我有这个DAX公式,可以给我一个ID计数,该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个这样的度量),事实表很大(例如3亿行大)

我读到的是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函数进行可持续的优化?

最佳答案

在优化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")

10-05 18:30