EXCEPT函数属于集合函数,可以对表实现数学定义上的取差集操作,将返回只存在其中一个表中的行。
语法和作用
语法:
EXCEPT ( <LeftTable>, <RightTable> )
作用:对左右两个表取差集,从左表中找出那些不存在于右表的行。
注意:
1、返回的结果会保留重复行,只要左表中的行不能在右表中找到,那都会被返回。
2、最终返回的表的列名与左表的一致,且会继承左表的数据沿袭。
3、在左右两个表进行比较时,是按位置进行比较的,而不是按照列名。
4、最终返回的表不会包含扩展表,即使左表存在扩展表。
辅助理解的例子
1、如下图所示,EXCEPT函数将返回左表中的那些不存在于右表的行,由于只有A3产品不存在于TableB,因此只返回了这一行。
2、如果用代码来表示的话,那么EXCEPT函数的等价写法如下:
EXCEPT('TableA','TableB')
等价于:
EVALUATE
FILTER(
SELECTCOLUMNS('TableA','TableA'[产品类别],'TableA'[产品名称],'TableA'[销售金额]),
NOT ('TableA'[产品类别],'TableA'[产品名称],'TableA'[销售金额]) IN 'TableB'
)
3、用作参数的两个表必须具有相同列数,否则会报错,如下图所示:
4、在左右两个表进行比较时,是按位置进行比较的,而不是按照列名,因此列顺序也要一致。如果列顺序不一致,通常会因为两表无法比较而直接返回左表的结果,如下图所示:
5、EXCEPT函数最终返回的表不会包含扩展表,即使左表存在扩展表,如下图所示:
6、EXCEPT函数可以用在需要取差集或取反的场景,比如计算切片器中未选产品的销售额,如下图所示:
总结
EXCEPT函数的行为类似于数学定义上的取差集,为表操作提供了更多的选择,建议掌握。