【问题标题】:Adding measure values based on date in MDX在 MDX 中添加基于日期的度量值
【发布时间】:2017-07-30 09:54:31
【问题描述】:

我正在尝试使用以下逻辑在 MDX 中创建度量 -

IIF([Date].[Date].CurrentMember.MemberValue >= '2017-06-01', [Measure 1] + [Measure 2], [Measure 1] + [Measure 3])

上面的表达式不起作用,因为它只对所有日期执行一次计算,而不是在指定的条件下。此外,即使在行上拖动年份,计算也应该有效。我的意思是它应该计算 6 月之前和 6 月之后的日期的 measure1+measure2 并再次返回两者的总和。

任何人都可以提供任何输入,我该如何实现?我需要在这里使用 SCOPE 之类的东西吗?

谢谢

【问题讨论】:

  • 您是否尝试过使用 CDate 将日期转换为实际日期? Date.Date 成员类型是日期吗?
  • 是的。我给了 [Date].[Date].[&2016-06-01T00:00:00].MemberValue 并且它正在识别比较。但结果并不如预期。因为 IIF 条件写在 Date 级别,所以当我拖动 Year 并尝试查看结果时它不起作用。即使我也拖动年、月、季度,谁能告诉我如何实现结果?
  • 既然是同一个维度,为什么还要按 MemberValue 来比较呢? [Date].[Date].CurrentMember >= [Date].[Date].[&2016-06-01T00:00:00] 应该足够了。你也有等级制度吗?维度是否设置为日期时间?
  • 是的。我们有日期层次结构,其中年、季度、月、周、日期在那里。如果我不提供 .Membervalue,则无法正确评估条件。是的,维度设置为日期时间。

标签: ssas mdx iif


【解决方案1】:

此计算不起作用的原因是 MDX 计算是在聚合数据之后执行的,但是无论数据聚合的级别如何,写入的计算都需要在日期级别执行。

如果您有一个日期层次结构,您可以使用类似以下的计算来聚合与当前过滤器/维度选择相关的叶项:

SUM(DESCENDANTS([Date].[Hierarchy].CURRENTMEMBER, , LEAVES), IIF([Date].[Date].CurrentMember.MemberValue >= '2017-06-01', [Measure 1] + [Measure 2], [Measure 1] + [Measure 3]))

这不会非常有效或快速,但如果您不需要它快速燃烧,它可能就足够了。

【讨论】:

    猜你喜欢
    • 2016-01-08
    • 1970-01-01
    • 1970-01-01
    • 2016-06-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-17
    • 1970-01-01
    相关资源
    最近更新 更多