如何在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
相关产品推荐
相关产品推荐

