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

如何在Power BI中基于动态行数的Conditions表筛选Order表?

动态条件筛选Orders表的Power BI实现方案

需求说明

基于Conditions表动态筛选Order表,Conditions表行数支持动态变化,筛选逻辑需满足:

  1. Conditions表单行内的BillTo、Shipper、Receiver字段为AND关系;
  2. 所有行的筛选结果做UNION合并(即逻辑OR关系)。

表结构

Conditions表

ConditionSetBillToShipperReceiver
C1B1, B2
C2S1, S3R3
C3B3, B4S3, S4R2,R3,R4

Order表

OrderNoBillToShipperReceiver
1B4S4R4
2B2S3R2
3B2S3R1
4B4S1R3
5B3S4R1
6B5S3R3
7B1S3R5
8B2S3R6
9B4S5R6
10B3S3R2

筛选规则

  • 单条条件行内:BillTo、Shipper、Receiver为AND条件(空字段表示不对该列做筛选);
  • 多条条件行之间:结果做UNION合并(即逻辑OR)。

示例筛选结果

  • C1筛选结果:2,3,7,8
  • C2筛选结果:4,6
  • C3筛选结果:10
  • 最终合并结果:2,3,4,6,7,8,10

等效SQL逻辑

SELECT OrderNo FROM Orders WHERE
(BillTo IN ('B1', 'B2'))   OR        --C1
(Shipper IN ('S1', 'S3') AND Receiver IN ('R3')) OR     --C2
(BillTo IN ('B3', 'B4') AND Shipper IN ('S3', 'S4') AND Receiver IN ('R2','R3','R4'))   --C3

Power BI实现方案

步骤1:拆分Conditions表的多值字段

首先处理Conditions表中逗号分隔的多值字段,拆分为行结构:

  1. 在Power Query编辑器中导入Conditions表;
  2. 对BillTo、Shipper、Receiver列分别执行拆分列>按分隔符>逗号>拆分为行;
  3. 筛选删除拆分后生成的空值行;
  4. 将处理后的表重命名为Conditions_Split。

步骤2:创建匹配判断度量值

在数据模型中创建度量值,用于判断单个订单是否满足任意一组条件:

IsMatch = 
VAR CurrentBillTo = SELECTEDVALUE(Orders[BillTo])
VAR CurrentShipper = SELECTEDVALUE(Orders[Shipper])
VAR CurrentReceiver = SELECTEDVALUE(Orders[Receiver])
RETURN
COUNTROWS(
    FILTER(
        SUMMARIZE(
            Conditions_Split,
            Conditions_Split[ConditionSet],
            "BillToMatch", IF(ISBLANK(MAX(Conditions_Split[BillTo])), TRUE(), CurrentBillTo IN VALUES(Conditions_Split[BillTo])),
            "ShipperMatch", IF(ISBLANK(MAX(Conditions_Split[Shipper])), TRUE(), CurrentShipper IN VALUES(Conditions_Split[Shipper])),
            "ReceiverMatch", IF(ISBLANK(MAX(Conditions_Split[Receiver])), TRUE(), CurrentReceiver IN VALUES(Conditions_Split[Receiver]))
        ),
        [BillToMatch] && [ShipperMatch] && [ReceiverMatch]
    )
) > 0

步骤3:应用动态筛选

  • 在报表页面添加Orders表的OrderNo字段;
  • 添加筛选器,选择度量值IsMatch并设置为“等于True”;
  • 当Conditions表新增/删除条件行时,刷新数据模型即可自动适配筛选逻辑。

可选:生成匹配订单号列表

若需直接展示符合条件的订单号,可创建以下度量值:

MatchedOrderNos = 
CONCATENATEX(
    FILTER(Orders, [IsMatch]),
    Orders[OrderNo],
    ", "
)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.24 06:35:31