我有这个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功能中进行可持续的优化?
答案 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字段。它没有为模型增加任何价值,并消耗大量内存。只需计算行数即可实现您的目标:
[Fact Count]:=CALCULATE(COUNTROWS('fact_table'),'Time_Dimension'[Last_month] <> "LAST")