2009-05-12 18 views
0

Ich erstellte eine MDX-Abfrage, um bestimmte Artikel aus einem OLAP-Cube abzurufen. Im Grunde genommen gibt es Artikel unter einem bestimmten Artikel-Kategorie Knoten, die von einem bestimmten Hersteller hergestellt werden:Sortieren und Paging in MDX-Abfrage (MS Analysis Services)

SELECT NON EMPTY 
(
    Hierarchize 
    (
     { 
      DrilldownLevel 
      (
       { 
        [T DAT Article].[Ar ID].[All] 
       } 
      ) 
     }  
    ) 

) 

DIMENSION PROPERTIES PARENT_UNIQUE_NAME, 
[T DAT Article].[Ar ID].[Ar ID].[Ar Key], 
[T DAT Article].[Ar ID].[Ar ID].[Ar LongName] 
ON COLUMNS 
FROM [Catalog_2009] 

WHERE 
(
    [T DAT Structure].[St St ID FK].&[193066], -- specific article-category node 
    [T DAT Firm].[Fi ID].&[86] -- specific manufacturer 
) 

CELL PROPERTIES VALUE, FORMAT_STRING, LANGUAGE, BACK_COLOR, FORE_COLOR, FONT_FLAGS 

Jetzt möchte ich diese Abfrage verbessern Paging und Sortierung zu unterstützen. Bedeutung I kann liefern:

  • Seitenindex (wie 0)
  • Seitengröße (wie 30)
  • Sort-Säule (wie Ar Longname)
  • Sortierrichtung (wie aufsteigend)

Welchen Ansatz sollte ich wählen? Ich schaute auf die Subset und order Klausel. Aber diese im Grunde beschränkt die Ergebnisse von der 'Hierarchisierung' Teil der Abfrage, was bedeutet, dass sie die Hierarchien anstelle des Endergebnisses abgeschnitten.

Könnte mir jemand einen Hinweis geben, wie man Paging und Sortieren zu arbeiten?

Antwort

1

Sortieren ist ein Schmerz in MDX, oder zumindest habe ich das immer gefühlt. Wenn Ihre Abfrage nur eine Dimension in Zeilen und eine in Spalten hat, wird das Leben viel einfacher.

Das ORDER-Schlüsselwort kann auf einen Satz angewendet werden, und Sie müssen ihm nur eine Nummer zum Sortieren geben und ihm sagen, welcher Weg mit ASC oder DESC gehen soll.

Das ASC- oder DESC-Problem wird verwirrend, da Sie auch BASC oder BDESC angeben können. Das "B" bedeutet "break" und besagt, ob die Zeilen (oder Spalten) in ihren hierarchischen Gruppen sortiert werden sollen, oder möchten Sie die Hierarchie beim Sortieren vollständig aufteilen und die Zeilen vollständig neu anordnen.

Hier ist ein einfaches Beispiel

ORDER({[Time].[Month].members}, [Measures].[Gross Sales], BASC) 

Das heißt, Sie alle Monate in absteigender Reihenfolge der Gesamtumsatz Wert auflisten möchten. Sie brechen die Hierarchie, so dass die Monate nicht innerhalb ihrer Elternjahre gruppiert bleiben und durch die Sortieroperation vollständig vermischt werden können.

+0

Dies ist eine gute Antwort ... was ist mit Blättern? –