计算平均值时忽略零的 MDX 脚本

MDX script to ignore zero's when calculating average

我正在尝试使用 MDX 创建一个计算成员来计算平均值。我有两个衡量标准,[高中 GPA] 和 [有高中 GPA]。如果 [High School GPA] 是数字,[Has High School GPA] 设置为 1,否则为 0。因此,在过去,以下计算成员工作得很好。

case
    when [MEASURES].[Has High School GPA] is null 
        or [MEASURES].[Has High School GPA] = 0
then null
    else
        [MEASURES].[High School GPA] / [MEASURES].[Has High School GPA]
end

现在,我需要从平均计算中排除 [High School GPA] = 0.00,即使 [Has High School GPA] 等于 1。因此,我修改了我的脚本如下。

case
    when [MEASURES].[Has High School GPA] IS null 
        or [MEASURES].[Has High School GPA] = 0 
        or [MEASURES].[High School GPA] = 0
then null
    else
        [MEASURES].[High School GPA] / [MEASURES].[Has High School GPA]
end  

但是,我的平均值仍然包括 [高中 GPA] = 0.00 的记录。关于如何解决这个问题有什么建议吗?

解决此问题的最简单方法是在 DSV 中的 table 上创建一个计算列。计算应为:

NULLIF(GPA,0)

然后在使用该列的度量上确保 NullHandling 属性 设置为 Preserve。这应该确保 0 和 Null 都以 Null 结束。

顺便说一下,在 MDX 中,IS NULL 语法不是您想要的。请改用 IsEmpty()。但在这种情况下,它是多余的,因为 MDX 中的 Null = 0。所以正确的 MDX 应该是:

case
    when [MEASURES].[Has High School GPA] = 0 
        or [MEASURES].[High School GPA] = 0
then null
    else
        [MEASURES].[High School GPA] / [MEASURES].[Has High School GPA]
end