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 :

[MDX] - afficher les properties dans le resultat


Sujet :

MS SQL Server

  1. #1
    Membre habitué Avatar de stephane.net
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    170
    Détails du profil
    Informations personnelles :
    Âge : 47
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 170
    Points : 158
    Points
    158
    Par défaut [MDX] - afficher les properties dans le resultat
    Bonjour,

    Voici ma requête MDX :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    SELECT
    	{ [Measures].[OrderNb],[Measures].[CA] } ON COLUMNS,
    	NON EMPTY crossjoin (
    		[Chain].[Principal].[Level 06],
    		[Supplier].[Supplier].[Warehouse] )
    	DIMENSION PROPERTIES
    		[Chain].[Principal].CustomerCode,
    		[Supplier].[Supplier].Supplier,
    		[Supplier].[Supplier].CodeGrandBack ON ROWS
    FROM
    	[OrderItem]
    WHERE
    	[Time].[Month].[Quarter].&[2007]&[1];
    je cherche à modifier cette requête pour que mes trois propriétés soient directement visibles dans le résultat de la requête

    Merci de votre aide
    Stephane

  2. #2
    Membre habitué Avatar de stephane.net
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    170
    Détails du profil
    Informations personnelles :
    Âge : 47
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 170
    Points : 158
    Points
    158
    Par défaut
    J'ai trouvé quelque chose :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    WITH MEMBER [Measures].[CodeMEGA] as '[Chain].[Principal].properties("CustomerCode")'
    SELECT
    	{ [Measures].[CodeMEGA],[Measures].[OrderNb],[Measures].[CA] } ON COLUMNS,
    	NON EMPTY crossjoin (
    		[Chain].[Principal].[Level 06],
    		[Supplier].[Supplier].[Warehouse] ) ON ROWS
    FROM
    	[OrderItem]
    WHERE
    	[Time].[Month].[Quarter].&[2007]&[1];
    Mais voilà la requête passe de 5s à presque 2 minutes

    et j'ai le message d'erreur :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Executing the query ...
    Exception of type 'System.OutOfMemoryException' was thrown.
    Execution complete

  3. #3
    Membre habitué Avatar de stephane.net
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    170
    Détails du profil
    Informations personnelles :
    Âge : 47
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 170
    Points : 158
    Points
    158
    Par défaut
    Voici la solution.

    1°) pour afficher les attributs en colonnes il faut créer des MEMBER dans la clause WITH et récuperer la valeur de la propriété avec la fonction PROPERTIES()
    2°) le problème de performance provient de l'utilisation de l'instruction NON EMPTY CROSSJOIN avec les MEMBER de la clause WITH. Il faut utiliser la fonction NONEMPTYCROSSJOIN() qui fonctionne très bien ramenant ma requête à 5s !
    3°) J'en est profité pour ajouter un filtre conditionnel sur la valeur d'un des attributs de la dimension [Chain] avec la fonction Filter()


    la requête devient :

    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
     
    WITH
       MEMBER [Measures].[NBCOMMANDE] as '[Measures].[OrderNb]'
       MEMBER [Measures].[CodeMEGA] as '[Chain].[Principal].PROPERTIES("CustomerCode")'
       MEMBER [Measures].[Fournisseur] as '[Supplier].[Supplier].PROPERTIES("Supplier")'
       MEMBER [Measures].[CodeGrandBack] as '[Supplier].[Supplier].PROPERTIES("CodeGrandBack")'
    SELECT
       { [Measures].[CodeMEGA],[Measures].[Fournisseur],
    [Measures].[CodeGrandBack],[Measures].[NBCOMMANDE],
    [Measures].[CA] } ON COLUMNS,
       NONEMPTYCROSSJOIN (
          FILTER(DESCENDANTS([Chain].[Principal].[ACCOR]),[Chain].[Principal].PROPERTIES("Type")='UNIT'),
          [Supplier].[Supplier].[Warehouse].MEMBERS ) ON ROWS
    FROM
       [OrderItem]
    WHERE
       [DeliveryTime].[Month].[Quarter].&[2007]&[1];
    J'espère que ça aidera quelqu'un

    A+

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

Discussions similaires

  1. Réponses: 11
    Dernier message: 04/07/2007, 18h22
  2. Réponses: 6
    Dernier message: 25/10/2006, 10h46
  3. afficher les accents dans un DBGRID
    Par TheCreole dans le forum Bases de données
    Réponses: 8
    Dernier message: 01/08/2006, 10h20
  4. [C#] Comment afficher les données dans un DataGrid ?
    Par lepovre dans le forum ASP.NET
    Réponses: 7
    Dernier message: 05/07/2006, 17h52
  5. Comment afficher les toolTipText dans une zone de statut ?
    Par nicok01 dans le forum VB 6 et antérieur
    Réponses: 7
    Dernier message: 28/01/2005, 13h32

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