Order (MDX)
Ordnet die Elemente einer angegebenen Menge an, wobei die Hierarchie optional beibehalten wird oder nicht.
Syntax
Numeric expression syntax
Order(Set_Expression, Numeric_Expression
[ , { ASC | DESC | BASC | BDESC } ] )
String expression syntax
Order(Set_Expression, String_Expression
[ , { ASC | DESC | BASC | BDESC } ] )
Argumente
Set_Expression
Ein gültiger MDX-Ausdruck (Multidimensional Expressions), der eine Menge zurückgibt.
Numeric_expression
Ein gültiger numerischer Ausdruck, bei dem es sich in der Regel um einen MDX-Ausdruck (Multidimensional Expressions) für Zellenkoordinaten handelt, die eine Zahl zurückgeben.
String_expression
Ein gültiger Zeichenfolgenausdruck, bei dem es sich in der Regel um einen gültigen MDX-Ausdruck (Multidimensional Expressions) für Zellenkoordinaten handelt, der eine als Zeichenfolge ausgedrückte Zahl zurückgibt.
Bemerkungen
Die Order-Funktion kann entweder hierarchisch (wie mithilfe des ASC - oder DESC-Flags angegeben) oder nichthierarchisch (wie mithilfe des BASC - oder BDESC-Flags angegeben; B steht für "Break hierarchy"). Wenn ASC oder DESC angegeben ist, ordnet die Order-Funktion zuerst die Elemente nach ihrer Position in der Hierarchie an und sortiert dann jede Ebene. Wenn BASC oder BDESC angegeben wird, ordnet die Order-Funktion Elemente in der Gruppe an, ohne Rücksicht auf die Hierarchie. Wenn kein Flag angegeben ist, ist ASC der Standardwert.
Wenn die Order-Funktion mit einer Gruppe verwendet wird, in der zwei oder mehr Hierarchien übergreifend sind, und das DESC-Flag verwendet wird, werden nur die Member der letzten Hierarchie im Satz sortiert. Dies ist eine Änderung im Vergleich zu Analysis Services 2000, wo alle Hierarchien im Satz befohlen wurden.
Beispiele
Im folgenden Beispiel wird aus dem Adventure Works-Cube die Anzahl der Wiederverkäuferbestellungen für alle Kalenderquartale aus der Kalenderhierarchie der Date-Dimension zurückgegeben. Die Order-Funktion sortiert den Satz für die ROWS-Achse neu an. Die Order-Funktion sortiert den Satz nach [Reseller Order Count]
in absteigender hierarchischer Reihenfolge, wie von der [Calendar]
Hierarchie bestimmt.
SELECT
Measures.[Reseller Order Count] ON COLUMNS,
Order(
[Date].[Calendar].[Calendar Quarter].MEMBERS,
Measures.[Reseller Order Count],
DESC
) ON ROWS
FROM [Adventure Works]
Beachten Sie, dass in diesem Beispiel, wenn das DESC-Flag in BDESC geändert wird, die Hierarchie unterbrochen wird und die Liste der Kalenderquartale ohne Beachtung der Hierarchie zurückgegeben wird:
SELECT
Measures.[Reseller Order Count] ON COLUMNS,
Order (
[Date].[Calendar].[Calendar Quarter].MEMBERS,
Measures.[Reseller Order Count],
BDESC
) ON ROWS
FROM [Adventure Works]
Im folgenden Beispiel wird das Reseller Sales-Measure für die fünf bestverkauften Produktunterkategorien unabhängig von der Hierarchie basierend auf Reseller Gross Profit zurückgegeben. Die Subset-Funktion wird verwendet, um nur die ersten 5 Tupel im Satz zurückzugeben, nachdem das Ergebnis mithilfe der Order-Funktion sortiert wurde.
SELECT Subset
(
Order
(
[Product].[Product Categories].[SubCategory].members,
[Measures].[Reseller Gross Profit],
BDESC
), 0, 5
) ON 0
FROM [Adventure Works]
Im folgenden Beispiel wird die Rangfolge-Funktion verwendet, um die Mitglieder der Stadthierarchie basierend auf dem Measure "Reseller Sales Amount" zu bewerten und sie dann in rangfolgerischer Reihenfolge anzuzeigen. Wenn Sie die Order-Funktion verwenden, um zuerst den Satz der Elemente der Stadthierarchie zu sortieren, erfolgt die Sortierung nur einmal, gefolgt von einem linearen Scan, bevor sie in sortierter Reihenfolge angezeigt wird.
WITH
SET OrderedCities AS Order
([Geography].[City].[City].members
, [Measures].[Reseller Sales Amount], BDESC
)
MEMBER [Measures].[City Rank] AS Rank
([Geography].[City].CurrentMember, OrderedCities)
SELECT {[Measures].[City Rank],[Measures].[Reseller Sales Amount]} ON 0
,Order
([Geography].[City].[City].MEMBERS
,[City Rank], ASC)
ON 1
FROM [Adventure Works]
Im folgenden Beispiel wird die Anzahl der Produkte in der Gruppe zurückgegeben, die eindeutig sind, wobei die Order-Funktion verwendet wird, um die nicht leeren Tupel zu sortieren, bevor die Filterfunktion verwendet wird. Die CurrentOrdinal-Funktion wird verwendet, um Verbindungen zu vergleichen und zu beseitigen.
WITH MEMBER [Measures].[PrdTies] AS Count
(Filter
(Order
(NonEmpty
([Product].[Product].[Product].Members
, {[Measures].[Reseller Order Quantity]}
)
, [Measures].[Reseller Order Quantity]
, BDESC
) AS OrdPrds
, (OrdPrds.CurrentOrdinal < OrdPrds.Count
AND [Measures].[Reseller Order Quantity] =
( [Measures].[Reseller Order Quantity]
, OrdPrds.Item
(OrdPrds.CurrentOrdinal
)
)
)
OR (OrdPrds.CurrentOrdinal > 1
AND [Measures].[Reseller Order Quantity] =
([Measures].[Reseller Order Quantity]
, OrdPrds.Item
(OrdPrds.CurrentOrdinal-2)
)
)
)
)
SELECT {[Measures].[PrdTies]} ON 0
FROM [Adventure Works]
Um zu verstehen, wie das DESC-Flag mit Tupelsätzen funktioniert, betrachten Sie zunächst die Ergebnisse der folgenden Abfrage:
SELECT
{[Measures].[Tax Amount]} ON 0,
ORDER(
[Sales Territory].[Sales Territory].[Group].MEMBERS
,[Measures].[Tax Amount], DESC)
ON 1
FROM [Adventure Works]
Auf der Zeilenachse sehen Sie, dass die Vertriebsgebietsgruppen in absteigender Reihenfolge des Steuerbetrags wie folgt sortiert wurden: Nordamerika, Europa, Pazifik, NA. Sehen Sie sich nun an, was passiert, wenn wir die Gruppe der Vertriebsgebietsgruppen mit der Gruppe der Produktunterkategorien kreuzen, und die Funktion Order auf die gleiche Weise anwenden, wie folgt:
SELECT
{[Measures].[Tax Amount]} ON 0,
ORDER(
[Sales Territory].[Sales Territory].[Group].MEMBERS
*
{[Product].[Product Categories].[subCategory].Members}
,[Measures].[Tax Amount], DESC)
ON 1
FROM [Adventure Works]
Während der Satz von Produktunterkategorien in absteigender, hierarchischer Reihenfolge angeordnet wurde, werden die Vertriebsgebietsgruppen jetzt nicht sortiert und werden in der Reihenfolge angezeigt, in der sie auf der Hierarchie angezeigt werden: Europa, NA, Nordamerika und Pazifik. Das liegt daran, dass nur die letzte Hierarchie im Satz von Tupeln, Produktunterkategorien, sortiert ist. Um das Verhalten von Analysis Services 2000 zu reproduzieren, verwenden Sie eine Reihe geschachtelter Generate-Funktionen , um jede Gruppe zu sortieren, bevor sie übergreifend verwendet wird, z. B.:
SELECT
{[Measures].[Tax Amount]} ON 0,
GENERATE(
ORDER(
[Sales Territory].[Sales Territory].[Group].MEMBERS
,[Measures].[Tax Amount], DESC)
,
ORDER(
[Sales Territory].[Sales Territory].CURRENTMEMBER
*
{[Product].[Product Categories].[subCategory].Members}
,[Measures].[Tax Amount], DESC))
ON 1
FROM [Adventure Works]