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.
Hinweise
Die Order-Funktion kann entweder hierarchisch sein (angegeben mit dem Flag ASC oder DESC) oder nicht hierarchisch (angegeben mit dem Flag BASC oder BDESC , wobei B für "Break hierarchy" oder "Hierarchie durchbrechen" steht). Wenn ASC oder DESC angegeben wird, ordnet die Order-Funktion zunächst die Elemente entsprechend ihrer Position in der Hierarchie an und sortiert dann jede Ebene. Wenn BASC oder BDESC angegeben wird, ordnet die Order-Funktion die Elemente in der Menge ungeachtet der Hierarchie an. Wenn kein Flag angegeben wird, ist ASC die Standardeinstellung.
Wenn die Order-Funktion mit einem Satz verwendet wird, wobei zwei oder mehr Hierarchien kreuzverknüpft sind, und das DESC-Flag verwendet wird, werden nur die Elemente der letzten Hierarchie im Satz befohlen. Dies ist eine Änderung im Vergleich zu Analysis Services 2000, wo alle Hierarchien im Satz befohlen wurden.
Beispiele
Im folgenden Beispiel wird für alle Kalenderquartale der Kalenderhierarchie auf der Date-Dimension aus dem Adventure Works-Cube die Anzahl der Wiederverkäuferbestellungen zurückgegeben. Die Order-Funktion ordnet den Satz für die ROWS-Achse neu an. Die Order-Funktion sortiert die Menge hierarchisch nach [Reseller Order Count] vom obersten zum untersten Element entsprechend der [Calendar]-Hierarchie geordnet.
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 die Hierarchie unterbrochen wird, wenn das DESC-Flag in BDESC geändert wird, und die Liste der Kalenderquartale wird ohne Beachtung der Hierarchie zurückgegeben:
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 zurückgegeben, basierend auf Reseller Gross Profit . Die Subset-Funktion wird verwendet, um nach dem Sortieren des Ergebnisses mithilfe der Order-Funktion nur die ersten 5 Tupeln aus der Menge zurückzugeben.
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 Rank-Funktion verwendet, um die Elemente der City-Hierarchie in eine Rangreihenfolge auf der Grundlage des Reseller Sales Amount-Measures zu bringen und sie anschließend in der Rangreihenfolge anzuzeigen. Durch die Verwendung der Order-Funktion zum Vorsortieren der Menge der Elemente der City-Hierarchie wird die Sortierung nur ein einziges Mal durchgeführt. Anschließend folgt ein linearer Scan, nach dessen Abschluss die Elemente in der Sortierreihenfolge angezeigt werden.
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 eindeutigen Produkte in der Menge zurückgegeben. Dabei wird die Order-Funktion verwendet, um die nicht leeren Tupel vor Verwendung der Filter-Funktion zu sortieren. Die CurrentOrdinal-Funktion wird zum Vergleichen und Ausschließen von Gleichrangigkeit verwendet.
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 Sätzen von Tupeln funktioniert, betrachten Sie zuerst 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 geschieht, wenn ein Crossjoin aus dem Satz der Vertriebsgebietsgruppen und dem Satz der Produktunterkategorien gebildet und die Order-Funktion auf die gleiche Weise wie folgt angewendet wird:
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 von geschachtelten Generate-Funktionen, um jeden Satz zu sortieren, bevor er kreuzverknüpft 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]