2009-12-07 15 views
6

Die relevanten Strukturen von meinem Cube sind, dass ich eine Hierarchie mit "Class" und "SubClass" habe. Ich habe auch eine Maßnahme namens "Value", was ich versuche zu erhalten.MDX-Abfrage, die 2 Dimensionen aus derselben Hierarchie enthält

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

Und ich kann die SubClass mit der Hierarchie offenbar gelesen, die zu ADOMD zurückgegeben:

Eine einfache Abfrage wie folgt aussehen kann.

Mein Problem ist zweifach, erstens, wie würde ich diese Hierarchie "abflachen", um sowohl Klasse als auch Unterklasse als diskrete Mitglieder im CellSet zu erhalten? Dies funktioniert nicht:

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

Die Klassenhierarchie Hierarchie mehr als einmal in der Crossjoin Funktion

Zweite Ausgabe verwendet wird, was ich actuually tun müssen, ist die oben auf bestimmte Klassen zu filtern, Auch dies funktioniert nicht aus dem gleichen Grund wie oben.

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] 

Jede Hilfe sehr geschätzt. MDX macht mich verrückt!

Antwort

4

Sie fehlen die Eigenschaft MEMBERS in Ihrer Dimension.

Für Ihr erstes Beispiel der:

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] 

Für Ihr zweites Beispiel der:

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

Danke für die Antwort, aber ich fürchte, es ist falsch. Dies führt zu demselben Fehler "Die Klassenhierarchie-Hierarchie wird in der Crossjoin-Funktion mehrfach verwendet" – Jamiec

+0

Entschuldigung. Es funktioniert gut auf meinem Würfel. Überprüfen Sie, ob Sie die geschweiften Klammern und Klammern an den richtigen Stellen haben. Ich bin ein bisschen verwirrt, dass Sie über eine Crossjoin-Funktion sprechen, aber es ist nicht in Ihrem Beispiel MDX. Normalerweise wird es durch die * zwischen Dimensionen angezeigt. – jvilalta

+0

Sind Sie sicher, dass Ihr Cube die 2 Dimensionen auf derselben Hierarchie hat? Ich kann auch keinen Unterschied zwischen der Verwendung eines * für Crossjoins aus einem Komma sehen. Ich habe die Reihenfolge der Curlies & Klammern in meiner Abfrage doppelt überprüft, das gleiche Ergebnis. Ich habe versucht, das Komma durch * mit dem gleichen Ergebnis zu ersetzen. – Jamiec

2

Verwenden von Unterabfragen in der WHERE-Klausel. MDX beschränkt die Verwendung einer Dimension immer nur auf eine Achse.

Sub Query ist ein Weg, um das zu umgehen. Ich habe vor kurzem diesen Trick gelernt, nachdem MDX mich auch verrückt gemacht hat.

0

Hallo, diese Abfrage funktionierte für mich.

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]} 
}) 

Bitte seien Sie vorsichtig mit dem '}' in der WHERE-Klausel, wie die Abfrage hat.

+0

Ich verwende [MART TIME DIM]. [Jahr]. & [2015] –

+0

Ich verwende [MART TIME DIM]. [Jahr]. & [2015] und \t [MART TIME DIM]. [Jahr]. & [2016] und es kostet mich das Ergebnis für die zwei Jahre –

+1

Wow, 7 Jahre alt auf den Tag. – Jamiec