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 は、階層を "解除" するという意味の "break" の "b" です)。ASC または DESC を指定した場合、階層内の位置に基づいてメンバが整列され、その後で各レベルが整列されます。BASC または BDESC を指定した場合は、階層を無視してセット内のメンバが整列されます。どのフラグも指定しない場合は、既定値の ASC が使用されます。

次の例では、Adventure Works キューブから、[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 に基づいて、売上が上位 5 番目までの製品のサブカテゴリに対応する Reseller Sales メジャーを返しています。Subset 関数は、Order 関数を使用して結果を並べ替えてから、セット内の先頭から 5 つの組のみを返すために使用されています。

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 階層のメンバのセットに対して順序付けを行うことにより、並べ替えが 1 度だけ行われます。その後で線形スキャンが行われ、並べ替えた順での表示が行われます。

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]

次の例では、Filter 関数を使用する前に Order 関数を使用して空ではない組を順序付けることで、セット内の一意な製品の数を返しています。順序を比較して同位のものを除去するために、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]