从数据到信息
从信息到洞察

IN 和 CONTAINSROW

当需要根据多个条件判断表中是否存在符合要求的记录时,IN 的写法更为简洁。例如:

FILTER (
    ALL ( DimProduct[Color] ),
    DimProduct[Color] = "Red"
        || DimProduct[Color] = "Yellow"
        || DimProduct[Color] = "Blue"
)

-------------  等价于 ----------------

FILTER(ALL(DimProduct[Color]), [Color] IN { "Red", "Yellow", "Blue" })

数据类型和运算符一文中,我们介绍过 IN,它等价于 CONTAINSROW 函数

CONTAINSROW

CONTAINSROW ( <Table>, <Value>, [ <Value>, [ … ] ] )

如果表中存在或包含一行使得所有列都具有指定的值,则返回 TRUE,否则返回 FALSE。除语法外,IN 运算符和 CONTAINSROW 函数在功能上是等价的。

参数 属性 描述
Table 需要进行查找的表
Value 可重复 在对应的列进行查找的标量表达式

以下写法判断产品表颜色列是否存在颜色为红色、蓝色或黄色的行,两种写法等价:

CONTAINSROW ( { "Red", "Blue", "Yellow" }, Product[Color] )
Product[Color] IN { "Red", "Blue", "Yellow" }
与=运算符不同,IN 运算符和 CONTAINSROW 函数执行严格相等的比较(==)。例如,空白值不能匹配 0

否定判断

DAX 不支持 NOT IN 运算符,要执行 IN 的否定运算,你需要将 NOT 放在整个表达式前面:

NOT [Color] IN { "Red", "Yellow", "Blue" }

多列匹配

( 'Date'[Year], 'Date'[MonthNumber] ) IN { ( 2018, 12 ), ( 2019, 1 ) }
CONTAINSROW ( { ( 2018, 12 ), ( 2019, 1 ) }, 'Date'[Year], 'Date'[MonthNumber] )
FILTER (
    SUMMARIZE ( DimProduct, [Color], [Size] ),
    ( [Color], [Size] ) IN { ( "Black", "L" ) }
)

FILTER (
    SUMMARIZE ( DimProduct, [Color], [Size] ),
    CONTAINSROW ( { ( "Black", "L" ) }, [Color], [Size] )
)

 

说点什么

avatar
1000
 
鼓掌微笑开心憧憬爱你色并不觉得吃瓜doge二哈喵喵思考笑哭捂脸悲伤大哭抓狂汗偷笑打脸捂眼黑线问号晕拜拜闭嘴衰咒骂ok作揖
  订阅本文评论  
提醒
DAX 圣经

导读

初识 DAX

DAX 基础知识

DAX 原理

DAX 高级原理

基础函数类型

迭代函数

CALCULATE 函数

CALCULATE 调节器

基础表函数

条件判断函数

查找匹配函数

时间智能函数

统计类函数

投影函数

分组/连接函数

集合函数

其他函数