仍然掌握解释MDX
. MSDN
因此,对于该RANK
功能,它具有以下内容:
如果指定了数值表达式,Rank 函数通过针对元组评估指定的数值表达式来确定指定元组的从一开始的排名。如果指定了数值表达式,Rank 函数将相同的等级分配给集合中具有重复值的元组。将相同等级分配给重复值会影响集合中后续元组的等级。例如,一个集合由以下元组组成,{(a,b), (e,f), (c,d)}。元组 (a,b) 与元组 (c,d) 具有相同的值。如果元组 (a,b) 的等级为 1,则 (a,b) 和 (c,d) 的等级均为 1。但是,元组 (e,f) 的等级为 3。此集合中可能没有排名为 2 的元组。如果未指定数值表达式,Rank 函数返回指定元组的从一开始的序数位置。Rank 函数不对集合进行排序。
在下面的脚本中,如果两个人的最高薪水并列第二,我会得到以下薪水等级:
1
2
2
4
我想做的是用服务年限来决定哪个被捆绑的人的等级更高。这可能吗?
WITH
SET [OrderedPeople] AS
ORDER(
NONEMPTY(
[PeopleDimension].[PeopleHier].[NamesLevel].members,
{ //following means if one or the other is null
//then the row is not excluded
[Measures].[Salary],
[Measures].[NumYearsService]
}
),
[Measures].[Salary]
*
[Measures].[NumYearsService]
,
BDESC
)
MEMBER [Measures].[Salary_Rank] AS
RANK([PeopleDimension].[PeopleHier].CurrentMember,
[OrderedPeople],
[Measures].[Salary] //<<<how do I use numYearsService to decide ties?
)
SELECT
NON EMPTY
{
[Measures].[NumYearsService],
[Measures].[Salary],
[Measures].[Salary_Rank]
}
ON COLUMNS,
NON EMPTY
[OrderedPeople]
ON ROWS
FROM [ourCube]
WHERE
(
{TAIL([Date].[Date - Calendar Month].[Calendar Day],7)(0):
TAIL([Date].[Date - Calendar Month].[Calendar Day],7)(6)}
)