INTERSECT函数属于集合函数,可以对表实现数学定义上的取交集操作,将返回两个表中都具有的相同行。
语法和作用
语法:
INTERSECT ( <LeftTable>, <RightTable> )
作用:对左右两个表取交集,从左表中找出那些同时存在于右表的行。
注意:
1、INTERSECT 的参数不可交换。通常,INTERSECT(T1, T2)的结果与 INTERSECT(T2, T1)的结果有不同的含义。
2、返回的结果会保留重复行,只要左表中的行能在右表中找到,那都会被返回。
3、用作参数的两个表必须具有相同的列数。
4、在左右两个表进行比较时,是按位置进行比较的,而不是按照列名。
5、最终返回的表的列名与左表的一致,且会继承左表的数据沿袭。
6、最终返回的表不会包含扩展表,即使左表存在扩展表。
辅助理解的例子
1、如下图所示,INTERSECT函数将返回左表中的那些同时存在于右表的行,比如A3产品不存在于TableB,因此A3产品的这一行就不会被返回。另外返回结果会保留重复行,比如B2产品的行。
2、如果用代码来表示的话,那么INTERSECT函数的等价写法如下:
INTERSECT('TableA','TableB')
等价于:
EVALUATE
FILTER(
SELECTCOLUMNS('TableA','TableA'[产品类别],'TableA'[产品名称],'TableA'[销售金额]),
('TableA'[产品类别],'TableA'[产品名称],'TableA'[销售金额]) IN 'TableB'
)
3、INTERSECT 的参数不可交换,如果将左表和右表互换位置,那么得到的结果通常并不一致,如下图所示:
4、用作参数的两个表必须具有相同列数,否则会报错,如下图所示:
5、在左右两个表进行比较时,是按位置进行比较的,而不是按照列名,因此列顺序也要一致。如果列顺序不一致,通常会因为两表无法比较而得到空表,如下图所示:
6、INTERSECT函数最终返回的表不会包含扩展表,即使左表存在扩展表,如下图所示:
7、可以使用INTERSECT函数来进行筛选器转移,达到更改数据沿袭的目的,如下图所示:
总结
INTERSECT函数的行为类似于数学定义上的取交集,这与筛选器的相交操作是不同的,需要注意区分。