You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

DAX中SUMX作用于虚拟表与计算表返回结果差异问题咨询

DAX 单度量值与分步计算结果不一致问题说明

问题复现

场景1:分步计算结果正确

  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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.04 09:48:02