共用方式為


Order (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 是預設值。

範例

下列範例會從 Adventure Works Cube 中傳回 [Sales Territory].[Northwest] 成員的轉售商訂單數目,以及該成員的所有上階。Order 函數會重新排列一個集合,包括 [Sales Territory].[Northwest] 成員以及它在 ROWS 軸的上階。Order 函數會從最上方的成員到最下方的成員排列集合,排列方式與 [Sales Territory] 階層所決定的階層式順序相同。

SELECT
    Measures.[Reseller Order Count] ON COLUMNS,
    Order(
        Ascendants(
            [Sales Territory].[Sales Territory].[Northwest]
        ),
        DESC
    ) ON ROWS
FROM
    [Adventure Works]

下列範例不考慮階層,而根據 Reseller Gross Profit 傳回前五名產品銷售子類別的 Reseller Sales 量值。在使用 Order 函數排序結果之後,會使用 Subset 函數來傳回集合中的前五個 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 函數來排序非空的 Tuple,再利用 Filter 函數。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]

請參閱

參考