DAX中SUMX作用于虚拟表与计算表返回结果差异问题咨询
DAX 单度量值与分步计算结果不一致问题说明
问题复现
场景1:分步计算结果正确
- 创建计算表代码:
OverallUtilisation = SUMMARIZECOLUMNS( Mergetable[CalculateDateFromUTC],FILTER(Mergetable,Mergetable[noShow]<>"TRUE"), "OverallResourceDistCount", DISTINCTCOUNT(Mergetable[fkItemID]), "OverallDuration(Hours)", SUMX(Mergetable,Mergetable[MeetingDurationInHours]))
生成的汇总表包含所有符合条件的日期维度汇总数据,其中OverallDuration(Hours)字段最大值为2.75。
2. 基于计算表创建求最大值度量值:
MAXDURHRSTEST = MAXX(OverallUtilisation,OverallUtilisation[OverallDuration(Hours)])
运行结果为2.75,符合预期。
场景2:合并为单度量值结果异常
直接把计算表逻辑写在度量值内部,代码如下:
MAXYY = VAR OverallUtilisationYY = SUMMARIZECOLUMNS( Mergetable[CalculateDateFromUTC],FILTER(Mergetable,Mergetable[noShow]<>"TRUE"), "OverallResourceDistCount", DISTINCTCOUNT(Mergetable[fkItemID]), "OverallDuration(Hours)", SUMX(Mergetable,Mergetable[MeetingDurationInHours])) RETURN MAXX(OverallUtilisationYY,[OverallDuration(Hours)])
运行结果为0.75,与预期不符。
问题根因
- 计算表的计算发生在数据模型刷新阶段,全局扫描全表数据,不受报告页任何筛选条件影响,生成的是全量汇总表。
- 度量值为运行时计算,默认继承当前报告的所有筛选上下文(比如日期切片器、维度筛选器等),度量值内部的
SUMMARIZECOLUMNS只会扫描被筛选后的Mergetable行,生成的是局部汇总表,因此最大值计算结果偏小。 - 额外限制:
SUMMARIZECOLUMNS不支持在行上下文环境中正常运算,如果该度量值被放在带行分组的视觉对象(矩阵、表格)中,会额外触发计算异常。
修复代码
如需单度量值实现相同逻辑,建议替换SUMMARIZECOLUMNS,并显式控制筛选范围:
MAXYY = // 清除外部筛选,保证计算范围和计算表一致,如需保留部分筛选可替换为ALLSELECTED VAR FilteredMerge = FILTER(ALL(Mergetable), Mergetable[noShow] <> "TRUE") VAR SummaryTable = ADDCOLUMNS( SUMMARIZE(FilteredMerge, Mergetable[CalculateDateFromUTC]), "DurationSum", CALCULATE(SUM(Mergetable[MeetingDurationInHours])) ) RETURN MAXX(SummaryTable, [DurationSum])
内容的提问来源于stack exchange,提问作者Deepak Kumar
相关产品推荐
相关产品推荐

