共用方式為


訂單 (MDX)

排列指定集合的成員,選擇性地保留或中斷階層。

語法

  
Numeric expression syntax  
Order(Set_Expression, Numeric_Expression   
[ , { ASC | DESC | BASC | BDESC } ] )  
  
String expression syntax  
Order(Set_Expression, String_Expression   
[ , { ASC | DESC | BASC | BDESC } ] )  
  

引數

Set_Expression
傳回集合的有效多維度運算式 (MDX) 運算式。

Numeric_Expression
有效的數值運算式,通常是傳回數位之儲存格座標的多維度運算式 (MDX) 運算式。

String_Expression
有效的字串運算式,通常是資料格座標的有效多維度運算式 (MDX) 運算式,會傳回以字串表示的數位。

備註

Order 函 式可以是階層式函式(如使用 ASC 或 DESC 旗標所指定)或非階層式(如使用 BASC BDESC 旗標所指定; B 代表「中斷階層 」)。 如果 指定 ASC DESC Order 函式會先根據其在階層中的位置排列成員,然後排序每個層級。 如果 指定 BASC BDESC Order 函式會排列集合中的成員,而不考慮階層。 在未指定旗標中, ASC 是預設值。

如果 Order 函式與一組集合搭配使用,其中兩個或多個階層交叉聯結,而且 會使用 DESC 旗標,則只會排序集合中最後一個階層的成員。 這是 Analysis Services 2000 的變更,其中集合中的所有階層都已排序。

範例

下列範例會從 Adventure Works Cube 傳回 Date 維度上 [行事曆] 階層中所有 Calendar Quarters 的轉銷商訂單數目。Order 函式會 重新排序 ROWS 座標軸的集合。 Order 函 式會依照階層所 [Calendar] 決定的遞減階層順序來排序集合 [Reseller Order Count]

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

請注意,在此範例中,當 DESC 旗標變更為 BDESC ,階層會中斷,而且不會考慮階層而傳回 Calendar Quarters 清單:

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

下列範例會根據轉銷商總利潤,傳回產品前五個銷售子類別的轉銷商銷售量值,而不論階層為何。 在使用 Order 函式排序 結果之後,子集 函式只會傳回集合中的前 5 個 Tuple。

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

下列範例會使用 Rank 函式,根據 Reseller Sales Amount 量值來排名 City 階層的成員,然後依排名順序顯示成員。 藉由使用 Order 函式先排序 City 階層的成員集,排序只會完成一次,然後接著線性掃描,再以排序次序呈現。

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]  

下列範例會傳回集合中唯一的產品數目,使用 Order 函式在使用 Filter 函式之前排序非空白 Tuple。 CurrentOrdinal 函式可用來比較和消除系結。

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]  

若要瞭解 DESC 旗標如何 與 Tuple 集合搭配運作,請先考慮下列查詢的結果:

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

在 [資料列] 軸上,您可以看到銷售領域群組已依稅額遞減順序排序,如下所示:北美洲、歐洲、太平洋、NA。 現在,如果我們將一組 Sales Territory Groups 與一組產品子類別交叉,並以相同的方式套用 Order 函式,會發生什麼情況,如下所示:

  
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]  
  

雖然 Product Subcategories 集合已依遞減、階層順序排序,但銷售領域群組現在不會依階層的順序排序並出現:歐洲、NA、北美和太平洋。 這是因為只會排序元組 Product Subcategories 集合中的最後一個階層。 若要重現 Analysis Services 2000 的行為,請使用一系列的巢狀 Generate 函式,在交叉聯結之前排序每個集合,例如:

  
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]  

另請參閱

MDX 函數參考 (MDX)