Power BI中汇总虚拟表计算每日客户目标总和的问题
问题根源
你的TargetTotal度量值仅在有审计变更的日期返回数值,核心原因是**VALUES(Calendar[Date])受外部筛选上下文限制**:当在可视化或报表中使用该度量值时,外部上下文会自动筛选出存在目标变更记录的日期,导致虚拟表TargetTable只包含这些日期,而非日历表的全部日期。而计算表是脱离外部筛选上下文执行的,所以能获取所有日历日期,结果符合预期。
解决方案
将虚拟表中获取日期的逻辑从VALUES(Calendar[Date])改为ALL(Calendar[Date])(或ALLSELECTED(Calendar[Date]),若需保留用户手动筛选的日期范围),确保虚拟表覆盖所有需要的日期。同时可以简化度量值逻辑:
TargetTotal = VAR TargetTable = ADDCOLUMNS( CROSSJOIN( ALL(Calendar[Date]), -- 改用ALL获取全部日历日期,不受外部筛选影响 VALUES('Target Changes'[CustomerID]) -- 保留当前上下文的客户筛选 ), "Target", [RunningTarget] ) RETURN SUMX( GROUPBY( TargetTable, [Date], "SummedTarget", SUMX(CURRENTGROUP(), [Target]) ), [SummedTarget] )
更简洁的版本,无需额外GROUPBY:
TargetTotal = SUMX( CROSSJOIN( ALL(Calendar[Date]), VALUES('Target Changes'[CustomerID]) ), [RunningTarget] )
补充说明
- 若需支持用户手动筛选日期范围(而非强制全部日历日期),将
ALL(Calendar[Date])替换为ALLSELECTED(Calendar[Date])即可,这样虚拟表仅包含用户筛选后的日期,但仍会覆盖该范围内的所有日期,无论是否有变更记录。 - 确认你的
RunningTarget度量值在单个客户的非变更日期能正确返回最后一次的目标值(从描述看已满足),否则需检查LASTNONBLANK逻辑是否正确处理无变更日期的场景。
内容的提问来源于stack exchange,提问作者SB99
相关产品推荐
相关产品推荐

