Share via


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 hierarchy" を表します。 ASC または DESC が指定されている場合、Order 関数は最初に階層内の位置に従ってメンバーを配置し、次に各レベルを並べ替えます。 BASC または BDESC が指定されている場合、Order 関数は階層に関係なくセット内のメンバーを配置します。 フラグが指定されていない場合、 ASC が既定値です。

2 つ以上の階層がクロス結合されているセットで 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]  
  

[行] 軸では、Sales Territory グループが税額別に降順に並べ替えられていることがわかります。次のようになります:北米、ヨーロッパ、太平洋、NA。 次に、Sales Territory グループのセットと 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]  
  

製品サブカテゴリのセットは降順、階層順に並べ替えられていますが、販売区域グループは並べ替えされず、階層に表示される順序 (ヨーロッパ、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)