2009-05-14 24 views
2

Ich versuche, eine MDX-Abfrage so zu erstellen, dass es nur die Kombinationen von zwei Dimensionen zurückgibt, in denen ein Maß ein bestimmtes Kriterium erfüllt. Ich dachte, das recht sein würde, gerade nach vorne die FILTER-Funktion, dhMDX - Mehrere Dimensionen filtern

SELECT 
    NON EMPTY FILTER({[Program].[ByRegion].[Program] * [Performance Metric].[Metric].CHILDREN }, [Measures].[Point Percentage] < .95) ON ROWS, 
    NON EMPTY (HIERARCHIZE([Calendar Period].[Y-Q-M].[Month of Quarter].&[3]&[1]&[2009]) , [Measures].[Point Percentage])ON COLUMNS 
FROM [QEP Revenue] 

jedoch nach dem Ausführen der Abfrage, es ist recht einfach zu sehen, dass ich einen Fehler gemacht haben, weil das erste Ergebnis ein Punkt Prozentsatz der 1,5172 hat das ist offensichtlich mehr als .95.

Wenn ich den Filter vollständig entfernen:

SELECT 
    --NON EMPTY FILTER({[Program].[ByRegion].[Program] * [Performance Metric].[Metric].CHILDREN }, [Measures].[Point Percentage] < .95) ON ROWS, 
    NON EMPTY ({[Program].[ByRegion].[Program] * [Performance Metric].[Metric].CHILDREN }) ON ROWS, 
    NON EMPTY (HIERARCHIZE([Calendar Period].[Y-Q-M].[Month of Quarter].&[3]&[1]&[2009]) , [Measures].[Point Percentage])ON COLUMNS 
FROM [QEP Revenue] 

ich ein ähnliches Ergebnis Satz mit Werten über 0,95. Fehle ich überhaupt den Punkt eines Filters oder gibt es ein Problem mit dem Versuch, zwei Dimensionen auf einmal zu filtern?

Antwort

3

Ich habe keine Datenquelle, aber diese MDX funktioniert gegen den AS2000 Sample Cube, Foodmart (Sales Cube).

SELECT 
    NON EMPTY 
    {{[Time].[Quarter].MEMBERS}} ON COLUMNS 
,NON EMPTY 
    Filter 
    (
     CrossJoin 
     (
     {[Customers].[State Province].&[CA]} 
     ,[Promotions].[All Promotions].Children 
    ) 
    , 
     (
      [Customers].[State Province].&[CA] 
     ,[Time].&[1997].&[Q1] 
     ,[Measures].[Unit Sales] 
     ) 
     > 300 
    ) ON ROWS 
FROM [Sales] 
WHERE 
    [Measures].[Unit Sales]; 
+0

Wenn Sie Ihr Beispiel betrachten, sehe ich, dass mein Problem darin bestand, meine Kalenderperiodendimension in den Crossjoin einzubeziehen. Sie haben die Dimension "Time" in die bedingte Anweisung von FILTER verschoben. Mit dieser Technik konnte ich die folgende Abfrage erstellen: SELECT NICHT LEER FILTER ({[Programm]. [ByRegion]. [Programm] * [Leistungsmetrik]. [Metrisch]. CHILDREN}, ([Kalender Zeitraum ]. [YQM]. [Monat des Quartals]. & [3] & [1] & [2009], [Messungen]. [Punktprozentsatz]) <0.95) ON ROWS, NICHT LEER [Kalenderzeitraum]. [YQM ]. [Monat des Quartals]. & [3] & [1] & [2009] ON COLUMNS VON [QEP Revenue] WHERE \t [Maßnahmen]. [Punkt Prozent] – Colin

+0

Ja - ich nehme an, der Punkt ist, dass es muss sowohl im Filter (als Filterbedingung) als auch im Crossjoin (zur Anzeige) enthalten sein. Wenn Sie interessiert sind, hatte ich ein bisschen Hilfe von einem Client-Tool namens XLCubed, das MDX macht. – Ant

0

Ich habe es geknackt.

Der Filter wurde ordnungsgemäß auf die Dimensionen "Program" und "Performance Metric" angewendet. Das Problem war, dass der Filter getrennt von der Dimension "Kalenderzeitraum" angewendet wurde. So konnte der angezeigte Punktprozentsatz von 1.5172 angezeigt werden, da in einem anderen Monat ein Punktprozentsatz vorhanden war, der die Filteranforderung erfüllte.

konnte ich die Abfrage als solche neu zu schreiben, um die gewünschten Ergebnisse zu erhalten:

SELECT 
    NON EMPTY 
    Filter 
    (
     { 
      [Program].[ByRegion].[Program]* 
      [Performance Metric].[Metric].Children* 
      [Calendar Period].[Y-Q-M].[Month of Quarter].&[3]&[1]&[2009] 
     } 
    , 
     [Measures].[Point Percentage] < 0.95 
    ) ON ROWS 
,NON EMPTY 
    [Measures].[Point Percentage] ON COLUMNS 
FROM [QEP Revenue]; 

Zum Glück, diese Abfrage in Reporting Services verwendet wird, so dass es angemessen ist, den Kalender Zeitraum in die Zeilen zu bewegen. Wenn ich jedoch die Kalenderperiode in den COLUMNS behalten möchte, würde ich nicht wissen, wie man das löst, da dieselbe Dimension nicht in beiden Achsen verwendet werden kann.

Verwandte Themen