gpt4 book ai didi

ssas - 在 DAX 中优化汇总

转载 作者:行者123 更新时间:2023-12-04 20:01:00 27 4
gpt4 key购买 nike

我有这个 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 个这样的度量)而且事实表很大(大约 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 字段。它不会为模型增加任何值(value),并且会消耗大量内存。您的目标可以通过简单地计算行数来实现:

[Fact Count]:=CALCULATE(COUNTROWS('fact_table'),'Time_Dimension'[Last_month] <> "LAST") 

关于ssas - 在 DAX 中优化汇总,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50585999/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com