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 : Restituer le dernier enfant d'une hiéarchie


Sujet :

SSAS

  1. #1
    Futur Membre du Club
    Homme Profil pro
    Inscrit en
    Mai 2012
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Mai 2012
    Messages : 8
    Points : 5
    Points
    5
    Par défaut MDX : Restituer le dernier enfant d'une hiéarchie
    Bonjour,

    Je suis un consultant fonctionnel qui débute en MDX. Je travaille sur du cube OLAP qui est branché sur un outil BO.

    J'ai une hiérarchie de périodes qui est construite de la manière suivante :

    -Premier niveau : L'année
    --Deuxième niveau : Les semestres (Semester 1, Semester 2)
    ---Troisième niveau : Les quarter (Quarter1, Quarter2...)
    ----Quatrième niveau : Les périodes (au format YYYY.MM, exemple 2015.12)

    J'ai besoin d'un MDX qui aille me chercher l'année sur laquelle je me situe
    Le code left([Period].currentmember.name,4) marche bien lorsqu'un mois est séléctionné. Il ne marche par contre pas lorsque je suis sur un quarter ou un semester...

    Il faudrait donc que le code aille cherche dynamiquement un membre fin, peut importe lequel.
    Le code left([Period].currentmember.lastchild.name,4) fait l'affaire si je suis sur un quarter mais pas un semester...

    Il doit bien y avoir une fonction qui me permet d'aller chercher un membre fin quelque le soit le niveau de la hiéarchie où je me situe non ?

    Sinon je dois passer par des case when....

  2. #2
    Futur Membre du Club
    Homme Profil pro
    Inscrit en
    Mai 2012
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Mai 2012
    Messages : 8
    Points : 5
    Points
    5
    Par défaut
    Euh...alors déjà j'ai oublié d'être poli sur mon premier message en précisant un simple : Merci par avance


    En attendant votre réponse, j'essaye de contourner le problème par des cases when.

    Je pars du code ci-dessous, qui fonctionne uniquement sur les mois (car ils sont au format YYYY.MM)
    Petite précision : Le [X01 - Budget Version] contient des valeurs du type "03", "12"....donc le STRTOMEMBER permet de sortir des expressions du type "AR-BUD - 2015.12" si je suis au niveau des mois.

    CREATE MEMBER CURRENTCUBE.[Reporting ID].[Reporting ID].[BUDGET'] AS
    Tail(
    NonEmpty(([Reporting ID].[Reporting ID].[BUDGET'],
    [Period].CurrentMember.Children))
    , 1).Item(0)
    ,Visible=0;
    [Reporting ID].[Reporting ID].[BUDGET'] =STRTOMEMBER("[Reporting ID].[Reporting ID].[AR-BUD - "
    + left([Period].currentmember.name,4) + "." + [X01 - BUDGET VERSION].currentmember.name + "]");

    Mon but est de produire un code qui fonctionne si je suis sur une année, un semestre ou un quarter.
    Pour cela je produis le case when ci-dessous, mais la syntaxe semble être fausse.
    Quelle est mon erreur ?
    Merci par avance

    CREATE MEMBER CURRENTCUBE.[Reporting ID].[Reporting ID].[BUDGET'] AS
    Tail(
    NonEmpty(([Reporting ID].[Reporting ID].[BUDGET'],
    [Period].CurrentMember.Children))
    , 1).Item(0)
    ,Visible=0;
    case when
    [Period].currentmember.level.name = "Year"
    then
    [Reporting ID].[Reporting ID].[BUDGET'] =STRTOMEMBER("[Reporting ID].[Reporting ID].[AR-BUD - "
    + left([Period].currentmember.lastchild.lastchild.lastchild.name,4) + "." + [X01 - BUDGET VERSION].currentmember.name + "]")
    else
    case when
    [Period].currentmember.level.name = "Half year"
    then
    [Reporting ID].[Reporting ID].[BUDGET'] =STRTOMEMBER("[Reporting ID].[Reporting ID].[AR-BUD - "
    + left([Period].currentmember.lastchild.lastchild.name,4) + "." + [X01 - BUDGET VERSION].currentmember.name + "]")
    else
    case when
    [Period].currentmember.level.name = "Quarter"
    then
    [Reporting ID].[Reporting ID].[BUDGET'] =STRTOMEMBER("[Reporting ID].[Reporting ID].[AR-BUD - "
    + left([Period].currentmember.lastchild.name,4) + "." + [X01 - BUDGET VERSION].currentmember.name + "]")
    else
    [Reporting ID].[Reporting ID].[BUDGET'] =STRTOMEMBER("[Reporting ID].[Reporting ID].[AR-BUD - "
    + left([Period].currentmember.name,4) + "." + [X01 - BUDGET VERSION].currentmember.name + "]")

    end
    end
    end
    ;

  3. #3
    Membre confirmé
    Homme Profil pro
    Consultant en Business Intelligence
    Inscrit en
    Novembre 2010
    Messages
    304
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Consultant en Business Intelligence
    Secteur : Conseil

    Informations forums :
    Inscription : Novembre 2010
    Messages : 304
    Points : 579
    Points
    579
    Par défaut
    Ancestor(ton currentmember,niveau ici année)

  4. #4
    Futur Membre du Club
    Homme Profil pro
    Inscrit en
    Mai 2012
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Mai 2012
    Messages : 8
    Points : 5
    Points
    5
    Par défaut
    Bonjour et Merci,

    Veux tu dire que la fonction ancestor est capable de se positionner sur un niveau définie ?

    Ce serait donc, pour redescendre au niveau forcément sur un niveau fin :

    Ancestor([Period].currentmember,"Year").lastchild.lastchild.lastchild.name

    Est ce bon ?

    Merci par avance

  5. #5
    Futur Membre du Club
    Homme Profil pro
    Inscrit en
    Mai 2012
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Mai 2012
    Messages : 8
    Points : 5
    Points
    5
    Par défaut
    C'est bon, j'ai testé ta syntaxe et cela fonctionne.

    Merci à toi !

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

Discussions similaires

  1. Réponses: 3
    Dernier message: 25/06/2008, 15h21
  2. Réponses: 7
    Dernier message: 21/05/2008, 15h47
  3. Derniere clé d'une table
    Par carnageco dans le forum Requêtes
    Réponses: 2
    Dernier message: 22/09/2003, 14h07
  4. Réponses: 10
    Dernier message: 01/08/2003, 13h45
  5. Trouver le dernier enregistrement d'une table
    Par remi59 dans le forum Requêtes
    Réponses: 4
    Dernier message: 11/03/2003, 14h54

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