次の方法で共有


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 が使用されます。

複数の階層がクロス結合されるセットと共に Order 関数が使用され、DESC フラグが使用される場合、セットの最後の階層のメンバーのみが並べ替えられます。この点が Analysis Services 2000 とは異なります。Analysis Services 2000 では、セットのすべての階層が並べ替えられます。

次の例では、Adventure Works キューブについて、Date ディメンションの Calendar 階層からすべての Calendar Quarters の再販業者の注文数を返しています。Order 関数は ROWS 軸のセットを並べ替えます。Order 関数は、[Reseller Order Count] によりセットを [Calendar] 階層で指定されている階層順 (降順) に並べ替えます。

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]

次の例では、階層とは無関係に、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]

DESC フラグが組のセットとどのように連動するかを理解するため、まず次のクエリの結果を検討してください。

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

ROWS 軸では、Sales Territory Groups が 北米、ヨーロッパ、太平洋、NA のように Tax Amount の降順に並べ替えられます。次に、Sales Territory Groups のセットを Product Subcategories のセットとクロス結合して、同様に 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 のセットは階層順 (降順) に並べ替えられますが、Sales Territory Groups の並べ替えは行われず、ヨーロッパ、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]