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]