MDX
のドキュメントを解釈するコツをまだつかんでいますMSDN
。したがって、RANK
関数の場合、次のようになります。
数値式が指定されている場合、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 関数はセットを順序付けしません。
次のスクリプトでは、2 人が最高の給与で 2 番目に並んでいる場合、次の給与ランクが得られます。
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)}
)