Power BI问题:部分订单销售额求和失效,需显示正确汇总结果
解决无开票日期订单销售额为空的问题
问题出在哪
- 多对多关系拖了后腿:发票表(table1)和订单表(table2)靠
Invoice#与Order#建立的多对多关联,会让无发票的订单在默认筛选逻辑下无法匹配到table1的行,导致Sales字段直接返回空值。 - Date Billed度量的返回值有问题:当前度量中无开票日期时返回的是空字符串
"",而非Power BI默认的BLANK(),空字符串会占用筛选上下文,干扰销售额的计算逻辑。
怎么解决
第一步:修正Date Billed度量
把空字符串替换为BLANK(),减少不必要的筛选干扰:
Date Billed = VAR Billed = CALCULATE( MAX(table1[Bill Date]), KEEPFILTERS(table2[Order#]) ) RETURN IF( ISBLANK(Billed), BLANK(), Billed )
第二步:创建专门的销售额汇总度量
别直接用Sales的「Do Not Summarize」设置,自己写DAX度量确保覆盖无发票订单的销售额:
Total Sales = CALCULATE( SUM(table2[Sales]), // 保留所有订单,哪怕没有匹配的发票 ALLNOBLANKROW(table1) )
如果需要同时筛选特定日期后的订单,用这个版本:
Total Sales (Target) = VAR TargetDate = DATE(2023,1,1) // 替换成你的目标日期 RETURN CALCULATE( SUM(table2[Sales]), // 筛选逻辑:开票日期晚于目标日期 或 无开票日期 OR( [Date Billed] > TargetDate, ISBLANK([Date Billed]) ) )
第三步:优化数据模型(可选)
如果多对多关系持续带来问题,可以拆成一对多结构:
- 新建中间表存储
Order#与Invoice#的对应关系,让订单表(table2)到中间表是一对多,中间表到发票表(table1)是一对多,这样筛选逻辑更可控。 - 确保订单表的
Order#是唯一值,避免重复行干扰汇总结果。
验证效果
将创建的Total Sales或Total Sales (Target)度量放入可视化组件,搭配修正后的Date Billed,就能看到无开票日期的订单销售额正常显示,同时也能正确统计特定日期后的订单数据。
内容的提问来源于stack exchange,提问作者Isaac Speelman
相关产品推荐
相关产品推荐

