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]