Order (MDX)

Arrangerar medlemmar i en specificerad mängd, valfritt bevarande eller brytande av hierarkin.

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

Arguments

Set_Expression
Ett giltigt Multidimensional Expressions (MDX)-uttryck som returnerar en mängd.

Numeric_Expression
Ett giltigt numeriskt uttryck som vanligtvis är ett Multidimensional Expressions (MDX)-uttryck av cellkoordinater som returnerar ett tal.

String_Expression
Ett giltigt stränguttryck som vanligtvis är ett giltigt Multidimensional Expressions (MDX)-uttryck av cellkoordinater som returnerar ett tal uttryckt som en sträng.

Remarks

Order-funktionen kan antingen vara hierarkisk (enligt användning av ASC- eller DESC-flaggan) eller icke-hierarkisk (enligt användning av BASC- eller BDESC-flaggan; B står för "break hierarchy"). Om ASC eller DESC specificeras, ordnar Order-funktionen först medlemmarna efter deras position i hierarkin och ordnar sedan varje nivå. Om BASC eller BDESC specificeras, arrangerar Order-funktionen medlemmar i mängden utan hänsyn till hierarkin. Om ingen flagga specificeras är ASC standard.

Om Order-funktionen används med en mängd där två eller fler hierarkier är korssammanfogade, och DESC-flaggan används, är endast medlemmarna i den sista hierarkin i mängden ordnade. Detta är en förändring från Analysis Services 2000 där alla hierarkier i mängden var ordnade.

Examples

Följande exempel returnerar, från Adventure Works-kuben , antalet återförsäljarorder för alla Kalenderkvartal från Kalenderhierarkin på Datumdimensionen. Order-funktionen omordnar mängden för ROWS-axeln. Order-funktionen ordnar mängden i [Reseller Order Count] fallande hierarkisk ordning enligt hierarkisk ordning [Calendar] enligt hierarkin.

SELECT
  Measures.[Reseller Order Count] ON COLUMNS,
  Order(
    [Date].[Calendar].[Calendar Quarter].MEMBERS,
    Measures.[Reseller Order Count],
    DESC
  ) ON ROWS
FROM [Adventure Works]

Observera hur i detta exempel, när DESC-flaggan ändras till BDESC, bryts hierarkin och listan med kalenderkvartal returneras utan hänsyn till hierarkin:

SELECT
  Measures.[Reseller Order Count] ON COLUMNS,
  Order (
    [Date].[Calendar].[Calendar Quarter].MEMBERS,
    Measures.[Reseller Order Count],
    BDESC
  ) ON ROWS
FROM [Adventure Works]

Följande exempel returnerar Återförsäljarförsäljningsmåttet för de fem mest säljande underkategorierna av produkter, oavsett hierarki, baserat på Återförsäljarens bruttovinst. Delmängdsfunktionen används för att returnera endast de första 5 tuplerna i mängden efter att resultatet ordnats med ordningsfunktionen.

SELECT Subset
  (
    Order
      (
        [Product].[Product Categories].[SubCategory].members,
        [Measures].[Reseller Gross Profit], 
        BDESC
      ), 0, 5
  ) ON 0
FROM [Adventure Works]

Följande exempel använder funktionen Rank för att rangordna medlemmarna i Citys hierarki baserat på Reseller Sales Amount-måttet, och visar dem sedan i rangordnad ordning. Genom att använda Order-funktionen för att först ordna mängden medlemmar i Stadens hierarki görs sorteringen endast en gång och följs sedan av en linjär skanning innan den presenteras i sorterad ordning.

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]  

Följande exempel returnerar antalet produkter i mängden som är unika, och använder Order-funktionen för att ordna de icke-tomma tuplerna innan Filter-funktionen används. Funktionen CurrentOrdinal används för att jämföra och eliminera oavgjorta.

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]  

För att förstå hur DESC-flaggan fungerar med mängder av tupler, överväg först resultaten av följande fråga:

  
SELECT  
{[Measures].[Tax Amount]} ON 0,  
ORDER(  
[Sales Territory].[Sales Territory].[Group].MEMBERS  
,[Measures].[Tax Amount], DESC)  
ON 1  
FROM [Adventure Works]  
  

På rad-axeln kan du se att Sales Territory Groups är ordnade i fallande ordning efter skattebelopp, enligt följande: Nordamerika, Europa, Stilla havet, Nordamerika. Nu ser vi vad som händer om vi korsjoinar mängden Sales Territory Groups med mängden Produktunderkategorier och applicerar Order-funktionen på samma sätt, enligt följande:

  
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]  
  

Medan mängden produktunderkategorier har ordnats i fallande, hierarkisk ordning, är Sales Territory Groups nu inte sorterade utan visas i den ordning de förekommer i hierarkin: Europa, Nordamerika, Nordamerika och Stilla havet. Detta beror på att endast den sista hierarkin i mängden tupler, Produktunderkategorier, är sorterad. För att återskapa beteendet hos Analysis Services 2000, använd en serie nästlade Generera-funktioner för att sortera varje mängd innan den korskopplas, till exempel:

  
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]