2009-12-07 12 views
6

Les structures pertinentes de mon cube sont les suivantes: J'ai une hiérarchie avec "Class" et "SubClass". J'ai aussi une mesure appelée "Value" qui est ce que j'essaie d'obtenir.Requête MDX contenant 2 dimensions de la même hiérarchie

Une requête simple peut ressembler à:

SELECT 
NON EMPTY ([Measures].[Value]) ON COLUMNS, 
NON EMPTY ([Some Dimension].[Class Hierarchy].[Class]) ON ROWS 
FROM [MyCube] 

Et je peux lire évidemment le SubClass en utilisant la HIÉRARCHIE qui est retourné à ADOMD.

Mon problème est double, premièrement comment est-ce que je pourrais "aplatir" cette hiérarchie pour recevoir à la fois Class et SubClass en tant que membres discrets dans le CellSet? Cela ne fonctionne pas:

SELECT 
NON EMPTY ([Measures].[Value]) ON COLUMNS, 
NON EMPTY (
    [Some Dimension].[Class Hierarchy].[Class], 
    [Some Dimension].[Class Hierarchy].[Sub Class] 
) ON ROWS 
FROM [MyCube] 

La hiérarchie Hiérarchie des classes est utilisée plus d'une fois dans la fonction Crossjoin

question Deuxièmement, ce que je dois actuually à faire est de filtrer ci-dessus sur les classes particulières, encore cela ne fonctionnera pas pour la même raison que ci-dessus.

SELECT 
NON EMPTY ([Measures].[Value]) ON COLUMNS, 
NON EMPTY (
    {[Some Dimension].[Class Hierarchy].[Class].&[ClassA],[Some Dimension].[Class Hierarchy].[Class].&[ClassB]}, 
    [Some Dimension].[Class Hierarchy].[Sub Class] 
) ON ROWS 
FROM [MyCube] 

Toute aide très appréciée. MDX me rend fou!

Répondre

4

Il vous manque la propriété MEMBERS sur votre dimension.

Pour votre premier exemple, essayez ceci:

SELECT 
    NON EMPTY ([Measures].[Value]) ON COLUMNS, 
    NON EMPTY {(
      [Some Dimension].[Class Hierarchy].[Class].MEMBERS, 
      [Some Dimension].[Class Hierarchy].[Sub Class].MEMBERS)} ON ROWS 
FROM [MyCube] 

Pour votre deuxième exemple, essayez ceci:

SELECT 
    NON EMPTY ([Measures].[Value]) ON COLUMNS, 
    NON EMPTY {(
      [Some Dimension].[Class Hierarchy].[Class].&[ClassA], 
      [Some Dimension].[Class Hierarchy].[Class].&[ClassB], 
      [Some Dimension].[Class Hierarchy].[Sub Class].MEMBERS)} ON ROWS 
FROM [MyCube] 
+1

Merci pour la réponse, mais j'ai peur que ce soit faux. Cela produit la même erreur "La hiérarchie Hiérarchie de classes est utilisée plusieurs fois dans la fonction Crossjoin" – Jamiec

+0

Désolé. Cela fonctionne très bien sur mon cube. Revérifiez que vous avez les accolades et les parenthèses dans les bons endroits. Je suis un peu confus que vous parlez d'une fonction de crossjoin mais ce n'est pas dans votre échantillon MDX. Typiquement, il est indiqué par le * entre les dimensions. – jvilalta

+0

Êtes-vous sûr que votre cube a les 2 dimensions sur la même hiérarchie? Je peux également voir aucune différence entre l'utilisation d'un * pour les crossjoins d'une virgule. J'ai vérifié l'ordre des curlies et des parenthèses dans ma requête, même résultat. J'ai essayé de remplacer la virgule par * avec le même résultat. – Jamiec

2

dans votre utilisation Subqueries clause WHERE. MDX limitera toujours l'utilisation d'une dimension sur un seul axe.

Sous-requête est un moyen de contourner cela. J'ai récemment appris cette astuce après MDX m'a conduit aussi bien ..

0

Salut cette requête a fonctionné pour moi.

SELECT NON EMPTY { [Measures].[App Count] } 
ON COLUMNS, 
NON EMPTY 
{(
EXISTING 
(
[MART TIME DIM].[Date].[Date] .MEMBERS) * 
[New Ren DIM].[New Ren CODE].[New Ren CODE].ALLMEMBERS 
)} 
ON ROWS FROM [SubmissionCube] 
where 
({ 
[MART BROKER DIM].[BROKER ID].&[10812]},{[MART TIME DIM].[Year].&[2015], 
{[MARTTIME DIM].[Year].&[2016]} 
}) 

Veuillez respecter le '}' dans la clause where comme l'indique la requête.

+0

J'utilise [MART TIME DIM]. [Année]. & [2015] –

+0

J'utilise [MART TIME DIM]. [Année]. & [2015] et \t [MART TIME DIM]. [Année]. & [2016] et ça me donne le résultat pour les deux années –

+1

Wow, 7 ans au jour. – Jamiec

Questions connexes