Power BI一对多关系场景下,如何显示无发票的订单完整数据?
解决Power BI中显示无发票订单的问题
这个场景在Power BI里挺常见的——默认的关系筛选逻辑会自动过滤掉没有对应发票的订单,导致你看不到未开票的记录。下面给你几个实用的解决方案,你可以根据自己的数据模型需求来选:
方法一:调整关系的交叉筛选方向
这是最直接的办法,适合不需要担心双向筛选影响其他报表的情况:
- 切换到数据模型视图,找到订单表和发票表之间的关系连线
- 双击连线打开关系设置对话框,把交叉筛选方向从默认的「单方向」改成「两者」(也就是双向筛选)
- 完成后回到报表视图,用订单表的
order id、metric tons,再搭配发票表的amount invoiced做可视化,无发票的订单就会显示出来,对应的开票金额会自动显示为空白或0
方法二:用DAX创建度量值/计算列(不修改关系)
如果不想改动现有关系(怕影响其他报表的筛选逻辑),可以用DAX来主动关联数据:
方案A:在订单表中创建计算列
开票金额 = CALCULATE( SUM('发票表'[amount invoiced]), FILTER('发票表', '发票表'[order id] = '订单表'[order id]) )
这个计算列会给每个订单匹配对应的开票总额,无发票的订单会显示为空白。
方案B:创建度量值(更适合动态可视化)
总公吨数 = SUM('订单表'[metric tons]) 总开票金额 = CALCULATE( SUM('发票表'[amount invoiced]), ALL('发票表'), '发票表'[order id] IN VALUES('订单表'[order id]) )
在可视化组件中使用订单表的order id、总公吨数和总开票金额,无发票订单的总开票金额会显示为0,这样报表就能完整展示所有订单的状态。
方法三:用Power Query做左外部合并
如果你想直接生成包含所有订单的合并表,可以用Power Query:
- 进入Power Query编辑器,选中订单表,点击「合并查询」→「合并查询作为新查询」
- 选择发票表,匹配列选
order id,连接类型选择左外部(左连接会保留订单表的所有行,哪怕发票表没有对应记录) - 展开合并后的发票表中的
amount invoiced字段,加载这个新表到数据模型 - 用这个合并表制作可视化,就能直接看到所有订单的公吨数和开票金额(无发票的显示为null)
额外优化:标记未开票订单
为了更直观区分,你可以在订单表中加一个计算列:
开票状态 = IF( ISBLANK([开票金额]), "未开票", "已开票" )
这样在报表里就能快速筛选或高亮未开票的订单了。
内容的提问来源于stack exchange,提问作者Remon Bal
相关产品推荐
相关产品推荐

