PowerBI/DAX之理解CROSSJOIN函数

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


语法和作用

语法:

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

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

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


辅助理解的例子

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

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

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

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

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

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

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


总结

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

PowerBI | 夕枫

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值