所以我有一个名为Attendance Mark的维度,其中包含字符串,例如'PRESENT'。我有一个衡量总参赛人数的“考勤计数”。我想出了这个(受谷歌搜索的很大启发)MDX计算,以获得出席'PRESENT'的出勤标记条目的百分比:
Case
When IsEmpty ([Measures].[Attendance Count])
Then NULL
Else ( [Attendance Mark].[Attendance Mark].&[PRESENT],
[Measures].[Attendance Count]) /
( [Attendance Mark].[Attendance Mark],
[Measures].[Attendance Count] )
End
这似乎工作以为我对它没有100%的信心,但如果我通过Mark维度查看该度量,则会得到非常奇怪的结果。正如您所期望的那样,PRESENT显示为100%,但您希望其他显示为0% - 因为其范围内有0个“PRESENT”值。相反,它们显示的是865.29%,1338.17%或169.76%。完全错误的数据。
我出错的任何想法?
P.S显然,你从未在实际使用中用标记维度显示百分比度量,但我不希望它混淆用户,并且理解为什么会发生这种情况会很有用。
答案 0 :(得分:1)
我将问题分解为三个简单的部分:分子,分母和最后一个百分比。
诀窍在于,您希望计算尊重[考勤标记]的所有[PRESENT]和非[PRESENT]成员以及[All]成员。因此,[PRESENT]应为100%,非[PRESENT]应为null,[All]应为[PRESENT]占总数的百分比。
with
member [Measures].[x] as
aggregate(
exists(
{[Attendance Mark].[Attendance Mark].&[PRESENT]},
{[Attendance Mark].[Attendance Mark].CurrentMember}
), [Measures].[Attendance Count]
)
member [Measures].[y] as
aggregate(
exists(
{[Attendance Mark].[Attendance Mark].CurrentMember},
{[Attendance Mark].[Attendance Mark].&[PRESENT]}
), [Measures].[Attendance Count]
)
member [Measures].[z] as
[Measures].[x] / [Measures].[y], format_string = 'Percent'
select
{[Measures].[Attendance Count], [Measures].[x], [Measures].[y], [Measures].[z]} on 0,
non empty [Attendance Mark].[Attendance Mark].Members on 1
from
[cube]
其中[Measures].[x]
代表分子,[Measures].[y]
代表分母,[Measures].[z]
代表最终百分比计算。您显然可以一步完成。为了清楚起见,我将其分解出来。