我有这个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功能进行可持续优化?
在优化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")