【问题标题】:MDX script to ignore zero's when calculating averageMDX 脚本在计算平均值时忽略零
【发布时间】:2016-01-15 18:50:00
【问题描述】:

我正在尝试使用 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 的记录。关于如何解决此问题的任何建议?

【问题讨论】:

  • 在 SQL 数据库中,这些 GPA 值是 0 还是 null?
  • 它们既可以为零也可以为空,我想忽略两者。我们将要求企业在源系统上解决此问题,以便我们以后看不到任何 0。但我需要一个临时的 MDX 解决方案 :-)
  • 如果 SQL 数据库中 GPA 值为 null,则 [Has High School GPA] 将设置为 0。但是,如果 GPA 值为 0,则 [Has High School GPA] 设置为1 影响平均值。

标签: ssas mdx


【解决方案1】:

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

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  

【讨论】:

  • 感谢您的反馈。我尝试实施您的解决方案,但恐怕平均值仍然包括 0。我使用 NULLIF(HighSchoolGPA,0) 作为表达式在 DSV 中的相关表上添加了一个 CorrectHighSchoolGPA 命名计算。然后,我创建了一个新的“正确高中 GPA ~~”度量来引用命名计算,确保“NullProcessing”设置为“保留”。最后,我使用您提供的 MDX 创建了一个新的计算,如下所示。但是,我可以向您保证,输出仍然包含 0。我通过查询基础表来验证这一点。不走运
  • @Raj 嗯。这一切听起来都不错。你对分母有高中 GPA 做了什么?您是否还设置了 NullHandling=Preserve?上面的 AggregateFunction 是什么?
  • 我将 NullProcessing 设置为 Automatic,并且 AggregateFunction 是 Sum。我什至在没有 Has High School GPA 的情况下尝试了以下操作,但得到了相同的结果。 IsEmpty([MEASURES].[Correct High School GPA ~~]) then null else [MEASURES].[Correct High School GPA ~~]/[MEASURES].[Has High School GPA ~~] end
  • 用于 Has High School GPA 的 SQL 列返回什么?如果他们的 GPA 为 0,则为 0?假设它在 GPA 为 null 或 GPA 为 0 时返回 0,那么我预计它会起作用,因为您使用 Sum AggregateFunction。
  • 只有当 GPA 为空时,高中 GPA 才设置为 0,否则设置为 1。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-12-10
  • 1970-01-01
  • 2020-09-01
  • 1970-01-01
  • 2017-05-26
相关资源
最近更新 更多