在DAX中优化总结

问题描述 投票:2回答:1

我有这个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]
)

并且当我将度量可视化时它起作用,但当我尝试将它放在上下文中时(如上表),它给出了错误“不能在此上下文中使用SUMMARIZECOLUMN和ADDMISSINGITEMS()”我该怎么办?从最初的SUMMARIZE功能进行可持续优化?

ssas powerbi dax tabular
1个回答
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") 
© www.soinside.com 2019 - 2024. All rights reserved.