IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

SSAS Discussion :

MDX: Cumul sur intervalle de date


Sujet :

SSAS

  1. #1
    Nouveau membre du Club
    Inscrit en
    Mars 2006
    Messages
    53
    Points
    30
    Détails du profil
    Informations forums :
    Inscription : Mars 2006
    Messages : 53
    Points : 30
    Par défaut MDX: Cumul sur intervalle de date
    Bonjour,

    J’ai besoin de votre aide car je suis bloqué sur un de mes projets.

    Je dois faire un cumul de nombre de contrat sur une période donnée.
    J'ai une dimension Temps [DimTemps], une dimension DateMAJ (avec 2 champs: dateMAJ, typecontrat), une table de fait Contrats (avec une mesure Nombredecontrat)

    Ce que je voudrais c'est faire une le cumul de nombre de contrat par mois et par typecontrat, mais en excluant les dates > dateMAJ. exemple on est le 17/01, ma date MAJ est le 12/01, je veux faire le cumul uniquement jusqu'au 12.

    J'ai commencer par la requête :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    Sum
    (
      PeriodsToDate
      (
         [DimTemps].[Année - Trimestre - Mois - Date].[Mois],
           [DimTemps].[Année - Trimestre - Mois - Date].CurrentMember
      ),
       [Measures].[Nombre de contrats]
    )
    Cela me donne bien le cumul par mois de nombre de contrats, sauf que cela me prend tout les contrats (jusqu’à la date du jour, le 17/01...)

    Avez vous une idée pour restreindre ma requête.
    Cordialement

  2. #2
    Membre émérite Avatar de FrancoisJehl
    Homme Profil pro
    BI Engineer
    Inscrit en
    Juillet 2009
    Messages
    1 485
    Points
    2 883
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : BI Engineer
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Juillet 2009
    Messages : 1 485
    Points : 2 883
    Par défaut
    Donc la fin de ton PeriodsToDate n'est pas le CurrentMember mais ton champ DateMAJ. Ce champ DateMAJ ressemble à quoi? C'est un attribut du même style que ceux de la dimension Date? Je veux dire que tu pourrais le rattacher à ta DimDate facilement via un LinkMember?

  3. #3
    Nouveau membre du Club
    Inscrit en
    Mars 2006
    Messages
    53
    Points
    30
    Détails du profil
    Informations forums :
    Inscription : Mars 2006
    Messages : 53
    Points : 30
    Par défaut
    pour info, je découvre seulement le langage MDX... Un prestataire nous a aidé à développer notre cube et a paramétré à l’origine cette mesure (avec d'autres d'ailleurs le but étant de calculer des prévisions à fin de mois).

    Alors oui la fin de ma période serait dateMAJ, et non plus currentmember.

    La dimension "date de mise à jour", je l'ai créé moi même, elle a un attribut dateMAJ de type date. La dimension DimTemps est la dimension temps créé par l'assistant SSAS.

    Je ne connais pas la fonction linkedmember (je vais regarder sur lien que tu donne)

    Merci pour ton aide

  4. #4
    Membre émérite Avatar de FrancoisJehl
    Homme Profil pro
    BI Engineer
    Inscrit en
    Juillet 2009
    Messages
    1 485
    Points
    2 883
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : BI Engineer
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Juillet 2009
    Messages : 1 485
    Points : 2 883
    Par défaut
    LinkMember va te permettre de rattacher un membre d'une dimension dans une autre s'ils ont la même clé. Il faudrait que tu sois capable de convertir ce DateMAJ en un attribut de ta dimension temps pour obtenir les meilleures performances. Sinon tu serais obligé de passer par des Filter() de CDate() avec des horribles fonctions DateDiff() VBA qui tuent les perfs...

  5. #5
    Nouveau membre du Club
    Inscrit en
    Mars 2006
    Messages
    53
    Points
    30
    Détails du profil
    Informations forums :
    Inscription : Mars 2006
    Messages : 53
    Points : 30
    Par défaut
    OK, J'ai relié mes dimensions dimtemps et dimMAJ par cette requête (dans ma vue source de données)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    SELECT     dbo.FaitContrat.TypeContrat, MAX(dbo.DimTemps.PK_Date) AS DateMAJ
    FROM         dbo.FaitContrat INNER JOIN
                          dbo.DimTemps ON dbo.FaitContrat.[Date contrat] = dbo.DimTemps.PK_Date
    GROUP BY dbo.FaitContrat.TypeContrat
    Puis dans j'ai créer une mesure comme celle ci:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    Sum
    (
      PeriodsToDate
      (
         [DimTemps].[Année - Trimestre - Mois - Date].[Mois],
    	 LinkMember([Date de mise à jour].[Date MAJ].currentmember,                      [DimTemps].[Année - Trimestre - Mois - Date].[Mois])
      ),
       [Measures].[Nombre de contrats]
    )
    mais sans succès, c'est pas très clair pour moi tout ca...
    J'ai un message d'erreur qui me dit que la fonction linkmember attend une hiérarchie pour l'argument 2.

  6. #6
    Membre émérite Avatar de FrancoisJehl
    Homme Profil pro
    BI Engineer
    Inscrit en
    Juillet 2009
    Messages
    1 485
    Points
    2 883
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : BI Engineer
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Juillet 2009
    Messages : 1 485
    Points : 2 883
    Par défaut
    Un exemple simple. J'ai une dimension [Employé]. Il y a un attribut [Date Naissance]. Cet attribut est basé sur une clé de type YYYYMMDD en integer.
    Parallèlement à cela j'ai une dimension temps qui possède un attribut jour basé lui aussi sur une clé entière au format YYYYMMDD.
    NB: cela ne veut pas dire que LinkMember ne marche qu'avec des int hein, juste que les deux types doivent être identiques

    Alors je peux faire le membre suivant:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    LinkMember
    (
       [Employé].[Date Naissance].CurrentMember,
       [Temps].[Jour]
    )
    qui sera un membre de la dimension Temps, hiérarchie Jour. Le deuxième argument est la hiérarchie de destination, dans laquelle on tente de mapper. Dit autrement, dans le cas d'une clé non composite c'est fonctionnellement équivalent (mais pas en perfs!) à

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    StrToMember("[Temps].[Jour].&["+CStr([Employé].[Date Naissance].CurrentMember.Member_Key)+"]")

Discussions similaires

  1. [AC-2010] Calculs sur intervalles de dates
    Par archonte dans le forum Requêtes et SQL.
    Réponses: 5
    Dernier message: 03/11/2013, 19h39
  2. Boucle incrémentation sur intervalle de dates
    Par clickandgo dans le forum VBA Access
    Réponses: 6
    Dernier message: 10/06/2013, 19h27
  3. [CR 10] Itération sur un intervalle de dates dont on n'a que les bornes
    Par cramto dans le forum SAP Crystal Reports
    Réponses: 5
    Dernier message: 19/06/2009, 11h45
  4. [AC-2000] probleme cumuls sur 2 dates et 2 motifs
    Par Ckikikirame dans le forum Requêtes et SQL.
    Réponses: 17
    Dernier message: 18/04/2009, 13h41
  5. ouvrir form sur intervalle de date
    Par krassi dans le forum IHM
    Réponses: 4
    Dernier message: 22/02/2007, 17h19

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo