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 代表「破壞階層」)。如果指定 ASC 或 DESC,Order 函數會根據階層中的成員位置,先排列成員,然後排列每個層級。如果指定 BASC 或 BDESC,Order 函數會不管階層,直接排序集合中的成員。在未指定旗標的情況下,ASC 是預設值。
範例
下列範例會從 Adventure Works Cube 中傳回 [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 傳回前五名產品銷售子類別的 Reseller Sales 量值。在使用 Order 函數排序結果之後,會使用 Subset 函數來傳回集合中的前五個 tuple。
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 階層的成員集合,排序只進行一次,接著執行線性掃描,然後再依排序順序呈現。
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]
下列範例會傳回集合中唯一的產品數目,並且先使用 Order 函數來排序非空的 Tuple,再利用 Filter 函數。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]