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 :

Filtre sur requête MDX


Sujet :

SSAS

  1. #1
    Membre à l'essai
    Profil pro
    Consultant IT
    Inscrit en
    Octobre 2006
    Messages
    29
    Détails du profil
    Informations personnelles :
    Localisation : France, Vienne (Poitou Charente)

    Informations professionnelles :
    Activité : Consultant IT

    Informations forums :
    Inscription : Octobre 2006
    Messages : 29
    Points : 17
    Points
    17
    Par défaut Filtre sur requête MDX
    J'ai besoin de faire différents filtres sur ma requêtes MDX.

    Etant novice en la matière, j'ai fait plusieurs recherches, et je suis parvenu à une requête de ce type :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    WITH SET withFilterX AS (Filter ( [Axe Gène].[Gène].[Gène], [Axe Gène].[Gène].CurrentMember.Name = "COL1A1" 
     OR [Axe Gène].[Gène].CurrentMember.Name = "COL1A2"  )) 
     
     
     SELECT {[Measures].[MAX]} ON COLUMNS,Non Empty CrossJoin 
     ([Axe Probeset].[Probeset-Titre].[Probeset-Titre] ,
     [Axe Milieu de culture].[Milieu de culture - Français].[Milieu de culture - Français],
     withFilterX ,	
     [Axe Echantillon].[Echantillon-Codage].[Echantillon-Codage] ) ON ROWS
      FROM [SampleResults] 
     
      WHERE Filter ( [Axe Modèle biologique].[ID Biological Model].[ID Biological Model], 
      [Axe Modèle biologique].[ID Biological Model].CurrentMember.Name = "3923" 
      OR [Axe Modèle biologique].[ID Biological Model].CurrentMember.Name = "3925" 
      OR [Axe Modèle biologique].[ID Biological Model].CurrentMember.Name = "3928" 
      OR [Axe Modèle biologique].[ID Biological Model].CurrentMember.Name = "3930")
    J'ai 2 questions à ce sujet :
    1/ Est-ce qu'il existe une syntaxe plus performante pour effectuer les mêmes filtres ?

    2/ Est-il possible de filtrer dans la clause WHERE sur un second axe :
    ex :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    Filter ( [Axe Gène].[Gène].[Gène], [Axe Gène].[Gène].CurrentMember.Name = "COL1A1" 
    OR [Axe Gène].[Gène].CurrentMember.Name = "COL1A2"  )) 
    AND
    Filter ( [Axe Modèle biologique].[ID Biological Model].[ID Biological Model], 
      [Axe Modèle biologique].[ID Biological Model].CurrentMember.Name = "3923" 
      OR [Axe Modèle biologique].[ID Biological Model].CurrentMember.Name = "3925" 
      OR [Axe Modèle biologique].[ID Biological Model].CurrentMember.Name = "3928" 
      OR [Axe Modèle biologique].[ID Biological Model].CurrentMember.Name = "3930")
    (je sais que cette syntaxe ne fonctionne pas, mais c'est pour illustrer mes propos )


    merci de votre aide.

  2. #2
    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
    Le MDX n'est pas du SQL. Le MDX n'est pas du SQL. Le MDX n'est pas du SQL. Le MDX n'est pas du SQL.

    Bon blague à part la clause WHERE d'une requête MDX définit une position dans un espace à N dimensions, N étant le nombre de hiérarchies du cube + 1. Il n'y a pas de notion de égale je-ne-sais-quoi sauf dans la fonction Filter, qui est une fonction antiperformante car travaillant au niveau cellule (et non en bloc mais c'est un autre sujet) que l'on évite d'utiliser.

    Bref.

    Dans ton cas j'écrirais plutôt ça:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
     
    SELECT 
    {
       [Measures].[MAX]
    } ON COLUMNS,
    NON EMPTY
    {
       [Axe Probeset].[Probeset-Titre].[Probeset-Titre]
       *
       [Axe Milieu de culture].[Milieu de culture - Français].[Milieu de culture - Français]
       *
       {
          [Axe Gène].[Gène].[COL1A1],
          [Axe Gène].[Gène].[COL1A2]
       }
       [Axe Echantillon].[Echantillon-Codage].[Echantillon-Codage]
    }
    ON ROWS
    FROM 
    (
       SELECT
       {
            [Axe Modèle biologique].[ID Biological Model].[3923], 
            [Axe Modèle biologique].[ID Biological Model].[3925], 
            [Axe Modèle biologique].[ID Biological Model].[3928], 
            [Axe Modèle biologique].[ID Biological Model].[3930]
       } ON 0
       FROM [SampleResults] 
     )

  3. #3
    Membre à l'essai
    Profil pro
    Consultant IT
    Inscrit en
    Octobre 2006
    Messages
    29
    Détails du profil
    Informations personnelles :
    Localisation : France, Vienne (Poitou Charente)

    Informations professionnelles :
    Activité : Consultant IT

    Informations forums :
    Inscription : Octobre 2006
    Messages : 29
    Points : 17
    Points
    17
    Par défaut
    Je commence à comprendre un peu mieux la philosophie du langage MDX.
    C'est quand même pas évident quand on est bien habitué au SQL. ça donne de mauvaises habitudes lorsque l'on passe sur du MDX.

    Merci beaucoup en tout cas FrancoisJehl, ton code est en effet plus performant.


  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
    De rien . A noter que ton filtre que j'ai mis dans une sous requête peut aussi être mis tel quel dans le WHERE. Mais comme mettre des sets (des ensembles de tuples qui sont des points dans les coordonnées multidim de ta base) dans le slicer est historiquement "récent" et a causé quelques bugs étranges dans des versions précédentes, on gère les filtres multi sélection dans une sous-requête très souvent (ce que font Excel, SSRS...).

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

Discussions similaires

  1. [AC-2007] Multi-filtre sur requête
    Par maximilien59 dans le forum Modélisation
    Réponses: 5
    Dernier message: 31/01/2012, 08h45
  2. [AC-2003] Sélection d'état à partir d'un filtre sur requête
    Par Arro2a dans le forum VBA Access
    Réponses: 2
    Dernier message: 21/03/2011, 17h44
  3. Réponses: 6
    Dernier message: 09/06/2008, 14h25
  4. [MySQL] Requête de filtre sur les dates
    Par Mathieu72 dans le forum PHP & Base de données
    Réponses: 2
    Dernier message: 04/01/2007, 11h18
  5. Requête filtre sur des rendez vous
    Par jdotti dans le forum Outils
    Réponses: 5
    Dernier message: 17/03/2006, 15h41

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