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

MS SQL Server Discussion :

[Analysis Services-MDX] calcul nommé


Sujet :

MS SQL Server

  1. #1
    Membre éclairé Avatar de anayathefirst
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    326
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Décembre 2006
    Messages : 326
    Par défaut [Analysis Services-MDX] calcul nommé
    Salut
    Dans mon cube, j’ai une mesure qui correspond au cumul du chiffre d’affaire (calculé dans mon infocentre) et je voudrais récupérer la dernière valeur de l’an passé qui correspond au total du CA réalisé.
    Je suis nouveau en MDX, et j’ai beaucoup de mal à réaliser ma requête. J’ai essayé des trucs du genre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ([Measures].[CA]) Where (([Axe de Temps].[Exercice -Période].PREVMEMBER).[12])
    Mais Analysis services me dit qu’il y a une erreur vers ‘AS’, mot clé que je n’utilise pas.

    Vous l’aurez bien compris ‘Exercice – Période’ est la hiérarchie que j’ai créée pour l’axe de temps ;-) (je cherche à ateindre la période 12 du même exercice)

    Si qq1 à une idée ou une superbe adresse pour un tutoriel MDX, ça m’intéresse, ceux que j'ai trouvé pour l'instant ne me paraissent pas très ...compréhencibles.

  2. #2
    Membre Expert
    Avatar de rudib
    Homme Profil pro
    Fakir SQL Server & NoSQL
    Inscrit en
    Mai 2006
    Messages
    2 573
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Fakir SQL Server & NoSQL

    Informations forums :
    Inscription : Mai 2006
    Messages : 2 573
    Par défaut
    Bonjour,

    Par calcul nommé tu veux sans doute dire membre calculé ?

    Merci de préciser la version : 2000 ou 2005 ?

    Tu as deux fonctions très utiles en MDX : ClosingPeriod() et
    ParallelPeriod()

    Essai qqch comme ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    {ClosingPeriod([month],(ParallelPeriod([Year], 1, [Axe de Temps].[Exercice -Période].CURRENTMEMBER)))}

  3. #3
    Membre éclairé Avatar de anayathefirst
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    326
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Décembre 2006
    Messages : 326
    Par défaut
    J’utilise MS SQL Server 2005.
    En fait, ce que je voulais faire, c’est modifier carrément la vue des donnée (click droit sur la vue-> Nouveau Calcul Nommé). Pour le moment, je ne distingue pas vraiment la différence entre les deux, en tout cas dans mon cas, j’utilise la même table dans plusieurs cubes, je ne sais pas si il faut créer le même membre calculé dans chaque cube ou ajouter un calcul dans la vue de données !
    Pour le code que tu m’as proposé, il ne fonctionne pas vraiment :
    … La dimension [month] était introuvable …
    et quand j’utilise le wizzad pour créer un calcul nommé, il me dis carrément qu’il y a une violation d’autorisation …

    Au début, j’ai pensé que c’était à cause du fait que c’est des mois fiscaux, et donc j’ai changé par [FiscalMonths] et [FiscalYears] mais ça m’a donné la même erreur.

    Autre chose : connais-tu un bon tuto de MDX ? car en fait, je n'ai pas tout compris dans le code que tu m’as proposé !!!

  4. #4
    Membre Expert
    Avatar de rudib
    Homme Profil pro
    Fakir SQL Server & NoSQL
    Inscrit en
    Mai 2006
    Messages
    2 573
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Fakir SQL Server & NoSQL

    Informations forums :
    Inscription : Mai 2006
    Messages : 2 573
    Par défaut
    Le calcul nommé dans la dsv (vue de données), ne s'applique pas au cube, mais aux données avant génération du cube. Donc tu ne peux pas utiliser du MDX. Mais tu peux te générer la valeur en dur dans une vraie colonne de ta table sous-jacente, dans ton ETL. Sinon tu dois faire un membre calculé dans ta définition de cube.

    Non, je ne connais pas de tutoriel de MDX.

  5. #5
    Membre éclairé Avatar de anayathefirst
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    326
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Décembre 2006
    Messages : 326
    Par défaut
    Salut,
    Bon, j’ai essayé de lire la doc de Microsoft ‘http://technet.microsoft.com’ et j’ai écrit le code suivant pour faire ce dont j’ai besoin :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    ClosingPeriod( 
        [Axe de Temps].[Exercice - Période].[Période],
        ParallelPeriod
        (
            [Axe de Temps].[Exercice - Période].[Code Exercice],
            1,
            ([Measures].[Cumul CA]).CURRENTMEMBER
        )
    )
    Problème :
    En mode ‘débogage’ avec un select on 0 from [mon cube], il me dit :
    Query (1, 8) La fonction CLOSINGPERIOD attend une expression de niveau pour l'argument . Une expression de membre a été utilisée.
    J’ai peut-être mal cherché, mais je ne trouve pas de définition claire dans le site de Microsoft d’une expression de niveau… je ne sais donc pas comment remédier à mon problème :-S

    Lorsque je passe en mode visualisation (explorateur), SSAS me sort ‘#valeur’ à la place de mon membre calculé, et il me dit :
    La hiérarchie "[Exercice - Période]0" était introuvable dans le cube lors de l'analyse de la chaine [Axe de Temps].[Exercice - Période].[Période].
    J’ai pourtant créé une dimension que j’ai appelé [Axe de Temps] et dedans, j’ai créé une hiérarchie que j’ai appelé [Exercice - Période]. Je ne sais pas d’où il sort le 0 à la fin du nom de la hiérarchie :-(

    Toute idée est la bien venu pour résoudre mon problème

  6. #6
    Membre Expert
    Avatar de rudib
    Homme Profil pro
    Fakir SQL Server & NoSQL
    Inscrit en
    Mai 2006
    Messages
    2 573
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Fakir SQL Server & NoSQL

    Informations forums :
    Inscription : Mai 2006
    Messages : 2 573
    Par défaut
    En tout cas, le troisième argument passé à parallelperiod n'est pas bon : tu dois lui envoyer un membre de ta dimension temps.

    Comment as-tu construit ta hiérarchie Exercice - Période ? C'est quoi, Code Exercice ?

  7. #7
    Membre éclairé Avatar de anayathefirst
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    326
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Décembre 2006
    Messages : 326
    Par défaut
    Dans ma vue de données, [Code Exercice] représente l’année fiscale (définie avec l’interface de création de la dimension de type ‘time’. Et Période représente le mois fiscal.
    Pour créer ma hiérarchie, j’ai tout simplement utilisé l’interface graphique de SSAS :
    Pour la dimension [Axe de Temps], j’ai glissé [Code Exercice] et [Période] dans la zone ‘Hiérarchies et niveaux’ en veillant à mettre [Période] sous [Code Exercice], puis j’ai Créé une relation d’attribut entre [Code Exercice] et [Période] ([Période] sous [Code Exercice]).
    S’il y a une erreur dans ma méthode, faites-le-moi savoir.

    Il me reste tout de même une question : si je ne mets nul part [Measures].[Cumul CA], comment il saura quelle info je cherche ?

  8. #8
    Membre Expert
    Avatar de rudib
    Homme Profil pro
    Fakir SQL Server & NoSQL
    Inscrit en
    Mai 2006
    Messages
    2 573
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Fakir SQL Server & NoSQL

    Informations forums :
    Inscription : Mai 2006
    Messages : 2 573
    Par défaut
    C'était simplement pour savoir la structure de ta hiérarchie. Ceci dit, comme tu as mis des relations d'attributs, as-tu redéfini la clé de période pour qu'elle prenne en compte Code Exercice ?

    Pour faire ton membre calculé, tu dois simplement définir un tuple qui va être le contenu de ton membre. Tu définis un tuple en définissant le croisement de membres de dimensions, séparés par une virgule, le tout entre parenthèses.

    Que donne ceci ? (sans garantie, je ne suis pas un grand spécialiste du MDX)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    ([Measures].[Cumul CA], 
    ClosingPeriod( 
        [Axe de Temps].[Exercice - Période].[Période],
        ParallelPeriod
        (
            [Axe de Temps].[Exercice - Période].[Code Exercice],
            1,
            [Axe de Temps].[Exercice - Période].[Période].CURRENTMEMBER)
    ))

  9. #9
    Membre éclairé Avatar de anayathefirst
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    326
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Décembre 2006
    Messages : 326
    Par défaut
    Exactement les mêmes erreurs :’-(
    J’avais oublié de redéfinir la clé de Période : s, mais je l'ai fait avant de tester ta requête :-(
    en tout cas, je continue à chercher...

  10. #10
    Membre Expert
    Avatar de rudib
    Homme Profil pro
    Fakir SQL Server & NoSQL
    Inscrit en
    Mai 2006
    Messages
    2 573
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Fakir SQL Server & NoSQL

    Informations forums :
    Inscription : Mai 2006
    Messages : 2 573
    Par défaut
    Le premier argument de closingperiod demande un niveau de hiérarchie. Il est peut-être mal nommé. As-tu fais un drag and drop du niveau dans to éditeur MDX ?

  11. #11
    Membre éclairé Avatar de anayathefirst
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    326
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Décembre 2006
    Messages : 326
    Par défaut
    si par niveau, tu veux dire [Code Exercice] et [Période], alors oui, j'ai fait un drag and drop

  12. #12
    Membre éclairé Avatar de anayathefirst
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    326
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Décembre 2006
    Messages : 326
    Par défaut
    Hey
    J’ai enfin pu comprendre l’erreur qu’il me sortait ;-)
    J’ai modifié mon code pour que ça fasse ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     (
        [Measures].[Direct Exercice - Montant Réalisé], 
        closingPeriod
        ( 
            [Axe de Temps].[Exercice - Période].[Période],
            parallelPeriod
            (
                [Axe de Temps].[Exercice - Période].[Code Exercice],
                1,
                [Axe de Temps].[Exercice - Période].currentMember
            )
        )
    )
    En fait, il faut que le dernier argument représente une hiérarchie et pas un niveau de la hiérarchie ^^.

    Je me trouve maintenant confronter à un autre problème, toujours pour la même requête :S :
    En fait quand je visualise le résultat grâce au mode ‘Navigateur’, je n’obtiens pas le même Total CA à l’année N-1 pour toutes les périodes :’-(, j’ai un total différent pour chaque période ce qui n’est pas normal car pour chaque période du même exercice, le total est sensé être le même …
    Any idea ?

  13. #13
    Membre Expert
    Avatar de rudib
    Homme Profil pro
    Fakir SQL Server & NoSQL
    Inscrit en
    Mai 2006
    Messages
    2 573
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Fakir SQL Server & NoSQL

    Informations forums :
    Inscription : Mai 2006
    Messages : 2 573
    Par défaut
    Ca ne représente pas une hiérarchie, mais un membre. Je te suggère de bien comprendre ce qu'est un membre d'une dimension. C'est une notion importante.

    Pour ton problème : quelle est la clé de ta période ? Un numéro de mois ?

  14. #14
    Membre éclairé Avatar de anayathefirst
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    326
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Décembre 2006
    Messages : 326
    Par défaut
    Citation Envoyé par rudib
    Ca ne représente pas une hiérarchie, mais un membre. Je te suggère de bien comprendre ce qu'est un membre d'une dimension. C'est une notion importante.
    Je suis désolé, je me suis mal exprimé, la hiérarchie, c’est pas le dernier argument, mais l’argument de currentMember (qui est visuellement le dernier argument sans l’être vraiment… enfin bon, je me comprends ^^).

    Citation Envoyé par rudib
    Pour ton problème : quelle est la clé de ta période ? Un numéro de mois ?
    Pour ma période, en fait c’est un attribut de la vue utilisé pour mesures. C’est un chiffre qui peut prendre les valeurs de 1 à 12, et l’exercice lui aussi est un attribut dans la vue. C’est un chiffre qui commence à 1 (l’année de création de l’entreprise en qq sorte) et s’incrémente toutes les 12 période …

  15. #15
    Membre averti
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    34
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 34
    Par défaut
    je dirais qu'il faut que tu fasses :

    ([Axe de Temps].[Exercice - Période].[Annee].currentMember.PREVMEMBER , [Measures].[Direct Exercice - Montant Réalisé])

    => te donne le ca de l'année derniere en partant du principe que tu es un membre annee

    et
    ([Axe de Temps].[Exercice - Période].[Mois].currentMember.PREVMEMBER , [Measures].[Direct Exercice - Montant Réalisé])

    => le ca du mois précédent du principe que tu es un membre mois

  16. #16
    Membre éclairé Avatar de anayathefirst
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    326
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Décembre 2006
    Messages : 326
    Par défaut
    Salut
    J’ai changé d’avis pour calculer la total du chiffre d’affaire de l’année passée, en fait, ce que je veux faire, c’est réaliser la somme de tous les élément de l’année passée.
    Pour cela je suis allé sur l’aide de ssas (comment faire) dans la section « SUM (MDX) », j’ai suivi les exemple et donc j’ai rédigé le code suivant :
    Code MDX : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     sum(
        [Measures].[Direct Période - Montant Réalisé],
        {
                parallelPeriod
                (
                    [Axe de Temps].[Année fiscale].[Code Exercice],
                    1
                )
        }
    )
    à ma grande déception, ce code ne fonctionne pas, j’ai une erreur me disant qu’une somme n’attend pas un ensemble de tuples en arguments, mais une expression de chaine ou numérique…
    je craques, j’ai l’impression de suivre les tutos à la lettre et rien ne semble fonctionner comme je l’espère

  17. #17
    Membre Expert
    Avatar de rudib
    Homme Profil pro
    Fakir SQL Server & NoSQL
    Inscrit en
    Mai 2006
    Messages
    2 573
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Fakir SQL Server & NoSQL

    Informations forums :
    Inscription : Mai 2006
    Messages : 2 573
    Par défaut
    Salut,

    C'est pas plutôt l'inverse dans tes paramètres ?

    SUM({set}, mesure) ?

  18. #18
    Membre éclairé Avatar de anayathefirst
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    326
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Décembre 2006
    Messages : 326
    Par défaut
    hop
    c'était ça
    j'ai modifié mon code :
    Code MDX : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    sum(
        ascendants
        (
                parallelPeriod
                (
                    [Axe de Temps].[Année fiscale].[Code Exercice],
                    1
                )
        ),
        [Measures].[Direct Période - Montant Réalisé]
    )
    et j'ai plus d'erreurs,
    Par contre, normalement, je suis sensé avoir la même valeur pour tous les mois, ce qui n'est pas le cas, ce n'est même pas égal à la somme des valeurs réalisé l'année passée
    Mais bon, là, il est temps de rentrer, je me pencherais plus sur ce problème demain
    +

    Edite :qq fautes d’orthographe :-S

  19. #19
    Membre éclairé Avatar de anayathefirst
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    326
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Décembre 2006
    Messages : 326
    Par défaut
    salut,
    excusez moi de trainer ainsi, j'ai pas mal de trucs à faire en ce moment, en tout cas, j'ai reglé mon problème , voici le code que j'utilise
    Code MDX : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    (
        [Measures].[Direct Période - Montant Réalisé],
        ancestor
        (
            [Axe de Temps].[Année fiscale].currentMember,
            [Axe de Temps].[Année fiscale].[Code Exercice]
        ).prevmember
    en fait, ça prend directement la somme de l'ancetre (Année) puisqu'il n'y a pas de contrinte sur le mois ^^

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. MDX Analysis Services 2005
    Par ash_rmy dans le forum SSAS
    Réponses: 4
    Dernier message: 24/10/2010, 14h14
  2. [SQL Server 2005 Analysis services] Membres calculés/DisplayFolder
    Par anayathefirst dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 12/07/2007, 16h46
  3. MDX Analysis Services 2005
    Par Dibii dans le forum MS SQL Server
    Réponses: 4
    Dernier message: 01/06/2007, 16h32
  4. [SQLSRV2005] Analysis Services - prob calcul
    Par Virieur dans le forum MS SQL Server
    Réponses: 3
    Dernier message: 30/01/2007, 16h54
  5. requete MDX avec Analysis services
    Par delphi+ dans le forum MS SQL Server
    Réponses: 1
    Dernier message: 13/09/2006, 17h29

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