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

Power BI问题:部分订单销售额求和失效,需显示正确汇总结果

解决无开票日期订单销售额为空的问题

问题出在哪

  1. 多对多关系拖了后腿:发票表(table1)和订单表(table2)靠Invoice#与Order#建立的多对多关联,会让无发票的订单在默认筛选逻辑下无法匹配到table1的行,导致Sales字段直接返回空值。
  2. 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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.03 12:03:19