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