需要帮助优化多级 DAX 汇总计算
Need help optimizing a multi level DAX summarize calculation
我正在寻找有关如何优化多级 DAX 汇总查询的建议。这个非常慢,因为我认为它是 运行 O(n^3) 因为嵌套。不幸的是,我需要有多个级别,因为层次结构级别 Order > Order Line > Order Detail 需要以不同方式计算。
- 单元需要汇总到详细级别
- 这需要平均到行级别
需要汇总到Order级别
SUMX(
SUMMARIZE(
'FACT Opportunity'
,Opportunity[LineId]
,"Units"
,AVERAGEX(
SUMMARIZE(
'FACT Opportunity'
,Opportunity[DetailId]
,"SumDetail"
,SUM('FACT Opportunity'[Units])
)
,[SumDetail]
)
)
,[Units]
)
如果您能提供任何帮助或建议,我们将不胜感激。
在没有看到数据和数据模型的情况下很难提供优化建议(如果将它们包含在问题中会很棒)。
这里的关键问题是重复项的存在使事实 "Units" 不可加,这意味着您不能简单地将其向上滚动。结果,您被迫进行非常昂贵的三重循环。
一个明显的解决方案是使 "Units" 完全可加。您可以计算去重(针对重复调整)单位并将它们存储在实际机会中,作为计算列:
Adjusted Units =
DIVIDE (
'FACT Opportunity'[Units],
CALCULATE ( COUNT ( 'FACT Opportunity'[DetailId] ) )
)
在这里,您将单位除以唯一 DetailID 的数量(通常为 1,但如果有重复的 DetailID,则为 2,依此类推)。
此计算列会稍微增加您的数据加载时间,但会节省大量查询时间。为了进一步优化,可以考虑在数据仓库中预先计算它。
调整后的单位是完全加法的,所以你dax现在很简单:
Total Units = SUM('FACT Opportunity'[Adjusted Units])
它应该可以在订单 > 行 > 详细信息层次结构的任何级别上正常工作(除非存在问题中未描述的其他问题),并且速度应该很快。
我正在寻找有关如何优化多级 DAX 汇总查询的建议。这个非常慢,因为我认为它是 运行 O(n^3) 因为嵌套。不幸的是,我需要有多个级别,因为层次结构级别 Order > Order Line > Order Detail 需要以不同方式计算。
- 单元需要汇总到详细级别
- 这需要平均到行级别
需要汇总到Order级别
SUMX( SUMMARIZE( 'FACT Opportunity' ,Opportunity[LineId] ,"Units" ,AVERAGEX( SUMMARIZE( 'FACT Opportunity' ,Opportunity[DetailId] ,"SumDetail" ,SUM('FACT Opportunity'[Units]) ) ,[SumDetail] ) ) ,[Units] )
如果您能提供任何帮助或建议,我们将不胜感激。
在没有看到数据和数据模型的情况下很难提供优化建议(如果将它们包含在问题中会很棒)。
这里的关键问题是重复项的存在使事实 "Units" 不可加,这意味着您不能简单地将其向上滚动。结果,您被迫进行非常昂贵的三重循环。
一个明显的解决方案是使 "Units" 完全可加。您可以计算去重(针对重复调整)单位并将它们存储在实际机会中,作为计算列:
Adjusted Units =
DIVIDE (
'FACT Opportunity'[Units],
CALCULATE ( COUNT ( 'FACT Opportunity'[DetailId] ) )
)
在这里,您将单位除以唯一 DetailID 的数量(通常为 1,但如果有重复的 DetailID,则为 2,依此类推)。
此计算列会稍微增加您的数据加载时间,但会节省大量查询时间。为了进一步优化,可以考虑在数据仓库中预先计算它。
调整后的单位是完全加法的,所以你dax现在很简单:
Total Units = SUM('FACT Opportunity'[Adjusted Units])
它应该可以在订单 > 行 > 详细信息层次结构的任何级别上正常工作(除非存在问题中未描述的其他问题),并且速度应该很快。