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]