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

如何在Power BI DAX中实现SQL风格的IN子查询筛选逻辑

解决方案:筛选包含指定取消状态订单的所有FACT记录

问题回顾

需要筛选FACT表中所有关联到同一ORDER_NUMBER的行,且该订单下至少存在一条FACT记录满足:关联的DIM_STATUS表中STATUS = "cancelled"且REASON <> "error"。无法调整现有数据模型,此前尝试的计算列因循环依赖报错。

方案1:创建计算表存储符合条件的订单号

创建一个计算表专门存储满足条件的ORDER_NUMBER,之后可直接将该表作为筛选器关联到DIM_ORDER表,实现全局或可视化级别的筛选。

DAX代码:

Valid_Cancelled_Orders = 
DISTINCT(
    SELECTCOLUMNS(
        FILTER(
            NATURALINNERJOIN(FACT, DIM_ORDER),
            RELATED(DIM_STATUS[STATUS]) = "cancelled" && RELATED(DIM_STATUS[REASON]) <> "error"
        ),
        "ORDER_NUMBER", DIM_ORDER[ORDER_NUMBER]
    )
)

使用方式:

  1. 计算表创建完成后,在数据模型中建立Valid_Cancelled_Orders[ORDER_NUMBER]与DIM_ORDER[ORDER_NUMBER]的单向关系(从计算表指向DIM_ORDER)。
  2. 将Valid_Cancelled_Orders[ORDER_NUMBER]拖入可视化的筛选器面板,选择“全部”即可自动筛选出所有关联这些订单的FACT记录。

方案2:创建度量值作为可视化筛选器

如果不需要额外的表,可创建一个度量值,通过可视化级别的筛选条件(设置为>0)实现需求,灵活性更高。

DAX代码:

Has_Valid_Cancelled_Line = 
VAR Current_Order = SELECTEDVALUE(DIM_ORDER[ORDER_NUMBER])
RETURN
    CALCULATE(
        COUNTROWS(FACT),
        ALL(FACT), -- 清除当前FACT表的上下文,避免循环依赖
        RELATED(DIM_ORDER[ORDER_NUMBER]) = Current_Order,
        RELATED(DIM_STATUS[STATUS]) = "cancelled",
        RELATED(DIM_STATUS[REASON]) <> "error"
    )

使用方式:

  1. 在任意可视化的筛选器面板中,点击“添加筛选器”,选择“度量值”,找到Has_Valid_Cancelled_Line。
  2. 设置筛选条件为“大于”,值输入0,应用后即可显示符合要求的FACT记录。

为什么之前的计算列会报错?

之前的计算列在FACT表中引用RELATED(DIM_ORDER[ORDER_NUMBER])后,又通过FILTER('FACT', ...)再次关联自身表,导致数据模型出现循环依赖。上述方案通过清除上下文(度量值)或独立存储订单号(计算表),避免了循环引用问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.13 09:58:23