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

如何在Power BI的DAX中实现CASE语句的NOT IN逻辑

DAX 实现 SQL CASE 中 NOT IN 逻辑的方案

DAX 中可以直接通过以下两种写法实现你需要的判断逻辑,效果和你给出的SQL语句完全一致:


写法1:IN 运算符 + SWITCH(推荐,写法最简洁)

DAX 中用SWITCH(TRUE(),...)结构完全等价于SQL的CASE WHEN判断,IN运算符用来判断值是否在指定集合内,前面加NOT即可实现NOT IN的效果:

-- 计算列/度量值通用基础写法
目标计算字段 = 
SWITCH(
    TRUE(),
    NOT( 'table'[column_name] IN { "I", "IP", "N", "T", "W" } ), 1
)

注意:你给出的SQL示例里值列表最后多了一个冗余逗号,DAX语法不允许值列表末尾留多余逗号,写的时候要删掉。


写法2:CONTAINSROW 函数(兼容旧版本Power BI)

如果你使用的Power BI版本较老不支持上面的IN简写,可以用CONTAINSROW函数实现相同的集合判断逻辑:

目标计算字段 = 
SWITCH(
    TRUE(),
    NOT CONTAINSROW( { "I", "IP", "N", "T", "W" }, 'table'[column_name] ), 1
)

补充说明

  • 上述写法和你给出的SQL逻辑完全对齐:不符合NOT IN条件时默认返回BLANK()(对应SQL的NULL),如果需要兜底返回其他值,只需要在SWITCH函数最后加一个兜底参数即可,比如最后加,0就会在不满足条件时返回0。
  • 如果是编写度量值,需要结合当前筛选上下文取字段值的话,套一层SELECTEDVALUE即可,示例:NOT(SELECTEDVALUE('table'[column_name]) IN { "I", "IP", "N", "T", "W" })

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.03 00:37:03