人生没有彩排
每一天都是现场直播

44、理解CROSSJOIN函数

CROSSJOIN函数可以生成多个表的笛卡尔积组合,经常被用于模拟视觉对象的计值环境,以及处理明细正确但总计不正确等场景。


语法和作用

语法:

CROSSJOIN ( table1, table2, [tableN... ] )

作用:返回一个表,表中的数据是其参数所指定的所有表的笛卡尔积组合,表中的列则是参数所指定的所有表的所有列之和。

注意:参数所指定的所有表中,不能存在相同列,即表名和列名都一致的列,否则会报错。另外,如果是在计算表或新建表中使用CROSSJOIN函数时,则不能存在列名相同的字段,此时即使表名不一致,只是列名相同,也会报错。


辅助理解的例子

笛卡尔积是来自数学上的概念,它描述了两个集合之间所有可能的有序对的集合,即每个元素都与另一个集合中的每个元素形成一对,这样就生成了所有可能的组合。

那么换成表的话也一样,表A中的每一行都与表B的所有行进行组合配对,这样得到的就是两个表的笛卡尔积组合,如下图所示:

在DAX中可以使用CROSSJOIN函数来生成笛卡尔积组合,如下图所示:

另外,由于视觉对象的轴字段间就是产生的笛卡尔积组合,因此可以使用CROSSJOIN函数来模拟视觉对象的计值环境,比如可以在矩阵的总计行中模拟各个明细行,从而解决矩阵的明细正确但总计不正确的问题。

比如下图所示的,矩阵的小计和总计行的客户数量都不等于明细之和。

此时如果想让小计和总计返回对应明细的客户数量之和,那么就可以使用CROSSJOIN函数来解决,如下图所示:

CROSSJOIN函数与VALUES函数的搭配是解决小计或总计不正确的通用方法,建议理解并记忆。


总结

CROSSJOIN函数可以生成笛卡尔积组合,平时可能比较少用到这个函数,但在某些场景下却是不可或缺的,建议掌握。

未经允许不得转载:夕枫 » 44、理解CROSSJOIN函数