在DAX中优化总结

时间:2018-05-29 13:47:11

标签: ssas powerbi dax tabular

我有这个DAX公式,它给了我一个月内在事实表上显示的id的计数,平均为一年。我可以把这个度量放在一个表格广告中,它按行解包,没有任何问题(通过添加维度中的变量)

Measure:= AVERAGEX(
    SUMMARIZE(
        CALCULATETABLE(fact_table;FILTER('Time_Dimension';'Time_Dimension'[Last_month] <> "LAST"));
         Time_Dimension[Month Name];
        "Count";DISTINCTCOUNT(fact_table[ID])
    );
    [Count]
)

但它的速度很慢(我在一张桌子上有3个这样的措施)而且事实表很大(比如300万行大)

我读到的是,SUMMARIZE在聚合方面表现非常糟糕,应该用SUMMARIZECOLUMNS代替。 我写了这个公式

Measure_v2:= AVERAGEX(
    SUMMARIZECOLUMNS(
        Time_Dimension[Month Name];
        FILTER(Time_Dimension;
            Time_Dimension[Month Name]<>"LAST"
        );
        "Count";DISTINCTCOUNT(fact_table[ID])
    )
    [Count]
)

当我将度量可视化时它起作用,但是当我尝试将它放在上下文中时(如上表),它给出了错误&#34;不能使用SUMMARIZECOLUMN和ADDMISSINGITEMS( )在这种情况下&#34;如何从原始的SUMMARIZE功能中进行可持续的优化?

1 个答案:

答案 0 :(得分:4)

在优化SUMMARIZE之前,我会重新访问整体方法。如果您的目标是计算每年每月的平均事实数,则可以采用更简单(更快)的方式。

[ID Count]:=CALCULATE(COUNT('fact_table'[ID]),'Time_Dimension'[Last_month] <> "LAST") 

[Average ID Count]:=AVERAGEX( VALUES('Time_Dimension'[Year_Month]), [ID Count`])

假设:

  • 您的时间维度中包含年月属性;
  • 您的事实表中的ID是唯一的(因此,简单的计数是 足够)

如果此解决方案无法解决您的问题,请发布您的数据模型 - 在不知道数据结构的情况下很难进行优化。

在旁注中,我会从事实表中删除ID字段。它没有为模型增加任何价值,并消耗大量内存。只需计算行数即可实现您的目标:

[Fact Count]:=CALCULATE(COUNTROWS('fact_table'),'Time_Dimension'[Last_month] <> "LAST")