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

Power BI如何筛选SDNo_≠0且无对应SD记录的Orders数据?

问题描述
  • 现有两个关联表:
    • SD表:包含No、Date等列
    • Orders表:包含SDNo_、Date等列
  • 两表通过SD[No]与Orders[SDNo_]建立一对多关系(一个SD对应多个Orders)
  • 部分Orders表的SDNo_值未在SD表的No列中存在
  • 需求:制作切片器、按钮或其他控件,展示SDNo_≠0且无对应SD表记录的Orders列表
  • 已尝试的计算表公式均未成功(结果仍包含不符合要求的记录):
    1. 公式1:
    FILTER(
     'Orders', 
     'Orders'[SDNo_] <> 0 
    && ISBLANK(RELATED('SD'[No])))
    
    1. 公式2:
    FILTER(
        'Orders',
        'Orders'[SDNo_] <> 0
        &&  ISBLANK(
            LOOKUPVALUE(
                'SD'[No],
                'SD'[No], 'Orders'[SDNo_]
            )
        )
    )
    
    1. 公式3:
    FILTER(
        'Orders',
        'Orders'[SDNo_] <> 0
        && NOT(
            CONTAINS(
                'SD',
                'SD'[No], 'Orders'[SDNo_]
            )
        )
    )
    
  • 疑问:
    1. 最佳实现方案是什么?
    2. 是否可以无需在Power Query中合并表来实现需求?

解决方案

一、无需Power Query合并的实现方法(推荐)

1. 正确的计算表公式

你之前的公式失效核心是关系上下文限制:一对多关系下,部分DAX函数的匹配判断会受筛选上下文影响,导致无匹配记录的判断失效。以下两种DAX写法可直接生成符合要求的计算表:

方法A:用COUNTROWS判断匹配存在性

无匹配Orders = 
FILTER(
    'Orders',
    'Orders'[SDNo_] <> 0
    && COUNTROWS(RELATEDTABLE('SD')) = 0
)

通过RELATEDTABLE('SD')获取当前Orders记录对应的SD表匹配行数,行数为0则说明无对应记录。

方法B:用EXCEPT函数取差集

无匹配Orders = 
VAR ValidSDNos = VALUES('SD'[No])
VAR NonZeroOrders = FILTER('Orders', 'Orders'[SDNo_] <> 0)
RETURN EXCEPT(NonZeroOrders, FILTER(NonZeroOrders, 'Orders'[SDNo_] IN ValidSDNos))

先提取所有有效SD编号,再筛选出非0的Orders记录,最后用EXCEPT排除掉有匹配的记录,直接得到目标列表。

生成计算表后,可基于该表创建切片器、表格可视化控件,直接展示目标订单。

2. 用度量值配合按钮/切片器实现动态筛选

如果不需要生成固定计算表,希望在原Orders表上动态切换筛选状态,可创建以下度量值:

是否为无匹配订单 = 
VAR CurrentSDNo = SELECTEDVALUE('Orders'[SDNo_])
RETURN
IF(
    CurrentSDNo <> 0 && NOT(CurrentSDNo IN VALUES('SD'[No])),
    1,
    0
)

后续操作:

  • 按钮控件:创建按钮,设置动作为「筛选」,选择该度量值并设置条件为是否为无匹配订单 = 1,点击按钮即可切换到目标订单视图
  • 切片器控件:将该度量值拖入切片器,选择「1」即可筛选出符合要求的订单

二、原公式失效原因说明

  • RELATED('SD'[No]):一对多关系下,RELATED仅能从「一」端获取匹配值,无匹配时返回空白,但计算表的全局上下文可能导致部分无匹配记录的判断逻辑失效
  • LOOKUPVALUE:若存在多匹配值会直接报错,且无匹配时未指定DEFAULT参数,可能返回错误而非空白,导致ISBLANK判断失效
  • CONTAINS:要求SD[No]与Orders[SDNo_]数据类型完全一致(如均为数值或均为文本),类型不匹配会导致匹配失败

内容的提问来源于stack exchange,提问作者EssentialMarie

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.12 00:33:29