Rank (MDX)

返回指定元组在指定集中的排名(排名从 1 开始)。

语法

Rank(Tuple_Expression, Set_Expression [ ,Numeric Expression ] )

参数

  • Tuple_Expression
    返回元组的有效多维表达式 (MDX)。

  • Set_Expression
    返回集的有效多维表达式 (MDX)。

  • Numeric_Expression
    有效的数值表达式,通常为返回数值的单元坐标的多维表达式 (MDX)。

注释

如果指定了数值表达式,则 Rank 函数通过对指定的元组计算指定的数值表达式的值,来确定该元组的排名(排名从 1 开始)。如果指定了数值表达式,则 Rank 函数会为集中具有相同值的元组分配相同的排名。为值相同的元组分配相同的排名,会影响该集中后续元组的排名。例如,由以下元组组成的集:{(a,b), (e,f), (c,d)}。元组 (a,b) 与元组 (c,d) 具有相同的值。如果元组 (a,b) 的排名为 1,则 (a,b) 和 (c,d) 的排名都为 1,但元组 (e,f) 的排名为 3。此集中没有排名为 2 的元组。

如果未指定数值表达式,则 Rank 函数返回指定元组的序号位置(序号从 1 开始)。

Rank 函数不会对集进行排序。

示例

下面的示例将返回包含客户和采购日期的元组集,并且使用 Filter、NonEmpty、Item 和 Rank 函数来查找每个客户的最后一次采购日期。

WITH SET MYROWS AS FILTER
   (NONEMPTY
      ([Customer].[Customer Geography].[Customer].MEMBERS
         * [Date].[Date].[Date].MEMBERS
         , [Measures].[Internet Sales Amount]
      ) AS MYSET
   , NOT(MYSET.CURRENT.ITEM(0)
      IS MYSET.ITEM(RANK(MYSET.CURRENT, MYSET)).ITEM(0))
   )
SELECT [Measures].[Internet Sales Amount] ON 0,
MYROWS ON 1
FROM [Adventure Works]

下面的示例使用 Order 函数而不是 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]