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 :

[2K8] une problèmatique MDX


Sujet :

SSAS

  1. #1
    Membre régulier
    Inscrit en
    Février 2008
    Messages
    225
    Détails du profil
    Informations forums :
    Inscription : Février 2008
    Messages : 225
    Points : 96
    Points
    96
    Par défaut [2K8] une problèmatique MDX
    Bonjour à tous, je débute en MDX et j'aimerai avoir quelque piste pour la problématique suivante :

    J'ai une table de fait : F comportant les champs SK,Chp1,Chp2,chp3,SK_Temps
    et une mesure que je souhaite calculé en MDX intitulé NB

    J'ai une table de dimension temps : T

    Les enregistrements de ma table de fait ressemble à

    SK | Chp1| Chp2 | Chp3 | SK_Temps

    1 | 001 | OPP1| ART |150809
    2 | 002 | OPP1| PPF |160809
    3 | 003 | OPP1| FFF |170809

    Mon champs 3 est en réalité une SK vers une dimension mais c'est plus clair comme cela pour l'exemple.

    Le résultat obtenu de ma mesure NB est le suivant :
    Je positionne un filtre sur date, et mes mon champs 3 en dimension
    Au 15/08/09 je dois obtenir 1 pour la valeur ART et 0 pour les autres
    Au 16/08/09 je dois obtenir 1 pour la valeur PPF et 0 pour les autres

    En faite voici le calcul que je cherche à faire :
    Pour une date donnée, s'il y a plusieurs valeurs du chp2 identiques alors je prends le MAX(Chp1) et la mesure NB vaut 1 pour cet enregistrement.


    En SQL je ferais
    SELECT Max(Chp1) GROUP BY Chp2 WHERE SK_Temps< ParametreDate


    Je ne sais pas si c'est très clair, s'il faut je peux ré expliquer,
    Merci de m'avoir lu jusque là, et merci d'avance pour d'éventuelle piste.

  2. #2
    Membre éclairé
    Avatar de Reskibil
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    561
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Mai 2007
    Messages : 561
    Points : 815
    Points
    815
    Par défaut
    Tu devrais essayer de combiner un max dans un filter qui contiendrait tes dates.

  3. #3
    Membre régulier
    Inscrit en
    Février 2008
    Messages
    225
    Détails du profil
    Informations forums :
    Inscription : Février 2008
    Messages : 225
    Points : 96
    Points
    96
    Par défaut
    Merci pour ta réponse,
    Je re précise que je débute en MDX, j'essaye d'y aller par étape, j'ai donc essayé d'implémenter le MAX de la facon suivante :
    WITH MEMBER [Measures].[TEST] as
    MAX([Dim].[N°])
    SELECT
    [Measures].[TEST]
    ON 0
    FROM [Cube]
    Mais cela ne fonctionne pas, j'ai vu dans la doc qu'il était possible de mettre un autre argument à la fonction MAX, et sur le net je n'ai trouvé que des exemples avec deux arguments .. Est -ce pour cela que ça ne fonctionne pas?

  4. #4
    Membre émérite Avatar de FrancoisJehl
    Homme Profil pro
    BI Engineer
    Inscrit en
    Juillet 2009
    Messages
    1 485
    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
    Points
    2 883
    Par défaut
    Primo Max() s'applique sur un SET (un ensemble de membres) et pas sur un niveau ou une hiérarchie:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    [Géographie].[Pays-Région-Ville]
    est différent de
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    [Géographie].[Pays-Région-Ville].[Pays].Members.
    Donc dans ton cas donne en premier paramètre un ensemble de membres à ta fonction Max.

    Secundo il y a effectivement souvent un second paramètre: l'expression numérique (souvent une mesure mais pas forcément) sur laquelle évaluer le max sur le Set.
    François JEHL
    BI Engineer | MVP SQL Server
    http://fjehl.wordpress.com
    Pour me contacter, par MP ou ici, mais pas pour des questions techniques.

    /*
    Avant de poster cherchez dans la FAQ et utilisez la fonction "Rechercher" du forum.
    Au moment de poster, posez votre question dans le bon sous-forum (Débuter, SSAS, SSRS, SSIS), en utilisant les TAGs prédéfinis ([2K], [2K5], [2K8], [2K8R2]).
    */

  5. #5
    Membre régulier
    Inscrit en
    Février 2008
    Messages
    225
    Détails du profil
    Informations forums :
    Inscription : Février 2008
    Messages : 225
    Points : 96
    Points
    96
    Par défaut
    Merci pour ces précisions,
    J'ai donc modifier ma requête pour essayer ceci

    WITH MEMBER [Measures].[TEST] as
    MAX([Dim].[N°].Members)
    SELECT
    [Measures].[TEST]
    ON 0
    FROM [Cube]

    Mais le retour me donner une erreur (#erreur)
    Dela même manière ceci retourne une erreur

    WITH MEMBER [Measures].[TEST] as
    MAX([Dim].[N°].Members,[Dim].[N°].Members)
    SELECT
    [Measures].[TEST]
    ON 0
    FROM [Cube]

    Cela fonctionne si je met une measure :

    WITH MEMBER [Measures].[TEST] as
    MAX([Dim].[N°].Members,[Measures].[CA])
    SELECT
    [Measures].[TEST]
    ON 0
    FROM [Cube]

    Mais ce n'est pas ce que je cherche à faire, je veux faire un max d'un numéro, un max comme en sql .. comment faire svp?

  6. #6
    Membre émérite Avatar de FrancoisJehl
    Homme Profil pro
    BI Engineer
    Inscrit en
    Juillet 2009
    Messages
    1 485
    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
    Points
    2 883
    Par défaut
    Ah! L'expression c'est par exemple l'ID de chaque membre?

    Alors comme ça:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    WITH MEMBER MaxID 
    AS MAX([Dim].[Hierarchie].Members,
    [Dim].[Hierarchie].CurrentMember.Member_Key)
     
    SELECT MaxId ON 0
    FROM [TonCube]
    François JEHL
    BI Engineer | MVP SQL Server
    http://fjehl.wordpress.com
    Pour me contacter, par MP ou ici, mais pas pour des questions techniques.

    /*
    Avant de poster cherchez dans la FAQ et utilisez la fonction "Rechercher" du forum.
    Au moment de poster, posez votre question dans le bon sous-forum (Débuter, SSAS, SSRS, SSIS), en utilisant les TAGs prédéfinis ([2K], [2K5], [2K8], [2K8R2]).
    */

  7. #7
    Membre régulier
    Inscrit en
    Février 2008
    Messages
    225
    Détails du profil
    Informations forums :
    Inscription : Février 2008
    Messages : 225
    Points : 96
    Points
    96
    Par défaut
    Merci pour ta réponse, FrancoisJehl, cela fonctionne.
    Le problème c'est que n'arrive toujours pas à répondre à ma problèmatique initial ..

    J'ai crée une mesure MaxNo, lorsque je l'affiche j'ai maintenant ceci (par rapport à l'exemple initiale)

    SK | Chp1| Chp2 | Chp3 | SK_Temps | MaxNo

    1 | 001 | OPP1| ART |150809| 003
    2 | 002 | OPP1| PPF |160809| 003
    3 | 003 | OPP1| FFF |170809| 003

    Je me suis donc dit maintenant je crée un autre membre calculé de cette façon :
    CREATE MEMBER CURRENTCUBE.[MEASURES].[Nombre à date]
    AS CASE
    WHEN [Measures].[MaxNo]=[Dim].[N°].CurrentMember.Member_Key
    THEN 1
    ELSE 0 END,
    VISIBLE = 1;
    Cela fonctionne bien si j'utilise [Dim].[N°] dans mon TCD (et encore c'est lent) mais cela ne fonctionne pas avec les autres dimensions, je pense donc que ce n'est pas la bonne manière de faire,Reskibil avait parler de filter mais je ne vois pas comment faire ...

    Merci par avance pour ton aide

  8. #8
    Membre émérite Avatar de FrancoisJehl
    Homme Profil pro
    BI Engineer
    Inscrit en
    Juillet 2009
    Messages
    1 485
    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
    Points
    2 883
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    WHEN [Measures].[MaxNo]=[Dim].[N°].CurrentMember.Member_Key
    Cela fonctionne bien si j'utilise [Dim].[N°] dans mon TCD (et encore c'est lent) mais cela ne fonctionne pas avec les autres dimensions
    Ce qui est normal vu que ton calcul utilises le CurrentMember (tu dis à SSAS "si le membre que j'ai posé en AxisN a la valeur de cette mesure alors renvoie 1").
    Or tu ne souhaites pas le poser.

    Ca mérite de se poser deux secondes pour reposer ta problématique. Ton besoin initial est (je te cite)

    J'ai une table de fait : F comportant les champs SK,Chp1,Chp2,chp3,SK_Temps.
    J'ai une table de dimension temps.
    Pour une date donnée, s'il y a plusieurs valeurs du chp2 identiques alors je prends le MAX(Chp1) et la mesure NB vaut 1 pour cet enregistrement.
    Bon sachant que tu as aussi ta dimension N° créée en dégénérant ton Champ1 et que tu souhaites l'utiliser pour ton calcul (ce que l'on comprend après).
    On comprend donc que ce champ a "deux usages"
    -> Tu browses avec (utilisation comme axe d'analyse)
    -> Tu cherches à en faire une mesure (le MAX de ce champ)

    La question bêbête que je me pose est donc: pourquoi est ce que Champ1 n'est pas une mesure aggrégée en MAX, Champ2 et T deux dimensions?
    François JEHL
    BI Engineer | MVP SQL Server
    http://fjehl.wordpress.com
    Pour me contacter, par MP ou ici, mais pas pour des questions techniques.

    /*
    Avant de poster cherchez dans la FAQ et utilisez la fonction "Rechercher" du forum.
    Au moment de poster, posez votre question dans le bon sous-forum (Débuter, SSAS, SSRS, SSIS), en utilisant les TAGs prédéfinis ([2K], [2K5], [2K8], [2K8R2]).
    */

Discussions similaires

  1. [mdx][2k5]Gestion du Today dans une requete MDX
    Par Supradine dans le forum SSAS
    Réponses: 4
    Dernier message: 10/10/2008, 08h42
  2. [SSRS]Relier un paramètre rapport à une requête MDX
    Par ennamsaoui dans le forum SSRS
    Réponses: 5
    Dernier message: 03/04/2008, 16h25
  3. [MDX] Definir des parametres dans une requete MDX dans SSMS
    Par Reskibil dans le forum Développement
    Réponses: 1
    Dernier message: 27/02/2008, 11h47
  4. Créer un LocalReport avec une requête MDX
    Par stephane.net dans le forum ASP.NET
    Réponses: 1
    Dernier message: 23/11/2007, 02h30
  5. Retirer les valeurs (NULL) d'une requete MDX
    Par geof dans le forum Développement
    Réponses: 6
    Dernier message: 30/10/2007, 14h12

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