Ssas 使用MDX划分并列列
仍然需要解释Ssas 使用MDX划分并列列,ssas,mdx,Ssas,Mdx,仍然需要解释MSDN上的MDX文档。因此,它具有以下特点: 如果指定了数值表达式,则秩函数将确定 通过计算指定的 针对元组的数值表达式。如果数值表达式是 指定时,Rank函数将相同的秩分配给具有 重复集合中的值。将同一级别的任务分配给 重复值会影响集合中后续元组的秩。 例如,一个集合由以下元组组成,{(a,b),(e,f), (c,d)}。元组(a,b)的值与元组(c,d)的值相同。如果 元组(a,b)的秩为1,那么(a,b)和(c,d)都有一个 排名1。然而,元组(e,f)的秩为3。那里 此集
MSDN
上的MDX
文档。因此,它具有以下特点:
如果指定了数值表达式,则秩函数将确定
通过计算指定的
针对元组的数值表达式。如果数值表达式是
指定时,Rank函数将相同的秩分配给具有
重复集合中的值。将同一级别的任务分配给
重复值会影响集合中后续元组的秩。
例如,一个集合由以下元组组成,{(a,b),(e,f),
(c,d)}。元组(a,b)的值与元组(c,d)的值相同。如果
元组(a,b)的秩为1,那么(a,b)和(c,d)都有一个
排名1。然而,元组(e,f)的秩为3。那里
此集中不能有秩为2的元组。如果是数字
表达式,则Rank函数返回基于
指定元组的序号位置。秩函数不存在
订这套
在下面的脚本中,如果两个人的最高工资并列第二,我将获得以下工资等级:
12
2
四, 我想做的是用服役年限来决定哪一个级别更高。这可能吗
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)}
)
与
将[OrderedPeople]设置为
命令(
非空(
[PeopleDimension].[PeopleHier].[NamesLevel]。成员,
{//如果一个或另一个为空,则表示以下内容
//那么就不排除该行
[措施][工资],
[措施].[Numyearservice]
}
),
[措施][薪金]
*
[措施].[Numyearservice]
,
BDESC
)
成员[测量][薪资等级]为
排名([PeopleDimension][PeopleHier].CurrentMember,
[OrderedPeople],
[Measures].[Salary]/如果已经对集合进行了排序,则使用Rank
而不使用第三个参数,即
RANK([PeopleDimension].[PeopleHier].CurrentMember,
[OrderedPeople]
)
Rank
返回第一个参数在集合中的位置,该集合是第二个参数。第三个参数专门用于希望领带具有相同值的情况。如果使用第三个参数,则对于集合中的相邻元素,将选中第三个参数,返回值为p集合中第一个元素的位置,该元素对于第三个参数具有相同的值
要在MDX中按多个条件订购,请在彼此之间嵌套两个订单:
ORDER(
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].[NumYearsService]
,
BDESC
),
[Measures].[Salary],
BDESC
)
由于MDXOrder
保证执行外部排序,因此,当执行外部排序时,具有相同薪水的成员不会改变第一次排序的相对顺序,这意味着他们将继续按服务年限进行排序。+1谢谢-尽管我在Order
集合中包含了这两个度量,我希望[Salary_Rank]
首先基于薪水,然后基于NumYearsService
。我在[OrderedPeople]
中使用了两者的交叉,以避免失去多维数据集中任何有NumYearsService值但没有薪水的人(这不是最好的示例,但这是我拥有的实际多维数据集和度量值的一种可能性)也许我应该更改顺序集-实际上,我试图用该集合实现的是所有具有薪水或numyearsservice或两者兼有的名称(集合中没有重复项)@为什么我在我的回答中添加了一些关于order
的建议。谢谢弗兰克-我是否应该使用order
?我所需要的只是一个集合,其中包含[PeopleDimension].[PeopleHier].[NamesLevel]的所有成员.具有非空工资的成员,以及具有非空NumYearsService的所有成员。如果要使用Rank
,则必须对要对其进行排序的集合进行排序,因为Rank
只返回成员在集合中的位置,而不会对集合本身进行排序。