排列指定集合的成员,可选择保持或打破层级结构。
Syntax
Numeric expression syntax
Order(Set_Expression, Numeric_Expression
[ , { ASC | DESC | BASC | BDESC } ] )
String expression syntax
Order(Set_Expression, String_Expression
[ , { ASC | DESC | BASC | BDESC } ] )
Arguments
Set_Expression
一个有效的多维表达式(MDX)表达式,返回集合。
Numeric_Expression
一个有效的数值表达式,通常是多维表达式(MDX)表达式,表示返回一个数字的单元坐标。
String_Expression
一个有效的字符串表达式,通常是有效的多维表达式(MDX)表达式,用于返回以字符串表示的单元坐标数值。
Remarks
Order功能可以是层级的(通过ASC或DESC标志指定)或非层级的(通过BASC或BDESC标志指定;B代表“断开层级”)。 如果指定为 ASC 或 DESC , 顺序 函数首先根据成员在层级中的位置排列成员,然后对每个层级进行排序。 如果指定了 BASC 或 BDESC , 顺序 函数会在不考虑层级的情况下对集合中的成员进行排序。 在没有指定旗帜的情况下, ASC 是默认的。
如果 Order 函数用于一个包含两个或多个层级交叉连接的集合,并且使用 DESC 标志,则只有集合中最后一个层级的成员会被排序。 这与Analysis Services 2000不同,当时集合中的所有层级结构都是有序的。
示例
以下示例从 Adventure Works 立方体中返回了日期维度日历层级中所有日历季度的转售订单数量。 Order 函数对集合的 ROWS 轴进行重排序。
序函数按层级决定[Calendar]的递减层次顺序对集合[Reseller Order Count]进行排序。
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时,层级结构被打破,日历季度列表被返回,不考虑层级结构:
SELECT
Measures.[Reseller Order Count] ON COLUMNS,
Order (
[Date].[Calendar].[Calendar Quarter].MEMBERS,
Measures.[Reseller Order Count],
BDESC
) ON ROWS
FROM [Adventure Works]
以下示例返回了基于经销商毛利的前五个销售子类别产品的经销商销售指标,无论层级如何。 子 集 函数用于在结果通过 顺序 函数排序后,返回集合中的前5个元组。
SELECT Subset
(
Order
(
[Product].[Product Categories].[SubCategory].members,
[Measures].[Reseller Gross Profit],
BDESC
), 0, 5
) ON 0
FROM [Adventure Works]
以下示例使用 排名 函数,根据经销商销售额度量对城市层级成员进行排名,然后按顺序显示。 通过使用 Order 函数先对城市层级成员集合排序,排序仅完成一次,随后进行线性扫描,再按排序顺序呈现。
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 函数对非空元组进行排序,再使用 滤波 器函数。 当前 序 函数用于比较和消除联系。
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]
在行轴上,你可以看到销售区域组按税额递减顺序排列,如下:北美、欧洲、太平洋、北美。 现在看看如果我们将销售区域组集合与产品子类别集合交叉连接,并以同样方式应用 订单 函数,具体如下:
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]
虽然产品子类别集合按递减层级排序,但销售区域组不再排序,而是按层级中出现的顺序排列:欧洲、北美、北美和太平洋。 这是因为只有元组集合中的最后一个层级——产品子类别——被排序。 要重现Analysis Services 2000的行为,可以使用一系列嵌套 的生成 函数在交叉连接前对每个集合进行排序,例如:
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]