首页 > 解决方案 > 对多维 SSAS 的 DAX 查询不正确

问题描述

当 Excel 连接到 SSAS 时,Excel会对多维数据集进行mdx查询并且它可以正常工作。

当 PowerBI 连接到 SSAS(实时连接)时,PowerBI 对多维数据集进行DAX查询并且它无法正常工作,因为“CurrenteMember”不起作用。

我在 SSAS 中有一个度量:

CREATE MEMBER CURRENTCUBE.[Measures].[Cumulative amount]
 AS sum(
        YTD([Time].[Year - Quarter - Month].CurrentMember)
        , [Measures].[Fact]
    )

当我从 Excel 连接到 OLAP 并在数据透视表中选择 8 月和 9 月时,Excel 对 ssas 进行 mdx 正确查询并且我看到了正确的值。

在 PowerBI 中,我有层次过滤器(年-季-月)和带有列的网格:[月]、[累计金额]。当我从 PowerBI 连接到 OLAP 并在层次结构中选择 8 月和 9 月时,PowerBI 会进行 DAX 查询:

  EVALUATE 
  ....
  KEEPFILTERS(
    FILTER(
      KEEPFILTERS(
        SUMMARIZE(
          VALUES('Time'),
          'Time'[Year.Key0],
          'Time'[Year],
          'Time'[Quarter.Key0],
          'Time'[Quarter],
          'Time'[Month.Key0],
          'Time'[Month]
        )
      ),
      AND(
        'Time'[Year.Key0] IN {DATE(2019, 1, 1)},
        ('Time'[Year], 'Time'[Quarter], 'Time'[Month]) IN {("y.2019", "3q 2019", "August 2019"),
          ("y.2019", "3q 2019", "September 2019")}
      )
    )
  ),
  ....

在这种情况下它不起作用:表中的值是空的,因此表是空的。如果我只选择层次结构中的一项(一个月或一个季度) - 它效果很好。

PowerBI 不能进行 mdx 查询吗?必须做什么才能正确执行对多维 SSAS 的 DAX 请求?

标签: excelpowerbissasmdxdax

解决方案


感谢您提出的问题。

您应该知道问题不在 Power BI 生成的查询中。

你之前这么说:

当我从 Excel 连接到 OLAP 并在数据透视表中选择 8 月和 9 月时,Excel 对 ssas 进行 mdx 正确查询并且我看到了正确的值。

您的最终用户会感到困惑,结果显示是从年初至今到 8 月还是到 9 月。这就是问题所在。

我们需要知道 YTD() 函数只接受一个指定的成员并且只有一个。(九月或八月)这是合乎逻辑的方式。

Ytd( [ Member_Expression ] ) 

从与给定成员相同的级别返回一组同级成员,从第一个同级开始并以给定成员结束,受时间维度中的年份级别的约束。

但是有一种方法可以解决这个问题,我不推荐。

假设我们要显示最近一个月的 YTD 结果,如果用户选择多个月份(9 月、8 月、1 月),我们会将 9 月计算为 outed,因为它是最近的。

这可以通过使用两个函数来完成:Order 和 Item

CREATE MEMBER CURRENTCUBE.[Measures].[Cumulative amount]
AS sum(
       YTD(
           ORDER(
                 [Time].[Year - Quarter - Month],[Time].[Year - Quarter -Month].MEMBER_KEY,BDESC
                ).ITEM(0)
          ) ,
          [Measures].[Fact] 
       )

推荐阅读