Power BI如何生成两个表的所有组合
两个表的所有组合,其实就是笛卡尔积,用Excel都可以完成:
在Excel中可以利用INDEX函数实现,假如A列是姓,B列是名,那么在C2中输入公式:
C2=
INDEX(A:A,INT((ROW(A2)-2)/(COUNTA(B:B)-1))+2)&
INDEX(B:B,MOD(ROW()-2,COUNTA(B:B)-1)+2)
然后公式向下填充,就可以在C列生成笛卡尔积。
在PowerBI中,也有两种方式可以实现,PQ法以及DAX法:
在Power Query中生成笛卡尔积
在PQ中相比Excel要简单的多,假如有两个表,'姓'和'名',操作步骤如下,
↑添加辅助列,值设置为1(或其他任何值) ↑合并查询-按辅助列-完全外部联结 ↑展开合并查询 ↑合并列通过简单的点击操作,就生成了一个笛卡尔积,虽然看起来步骤很多,其实就是秒秒钟的事。
使用DAX生成笛卡尔积
依然假设已经有两个表,'姓'和'名',在【建模】选项卡下点击"新表",输入,
姓名 = GENERATE('姓','名')
二者逐一匹配的笛卡尔积的结果就出来了,这里GENERATE函数还可以使用CROSSJOIN替代,效果是一样的。
当然我们并不想要姓和名分开为两列,而是想直接得到姓名合并的结果,可以用ADDCOLUMNS把这两列合并,再利用SELECTCOLUMNS函数提取出需要的列,把公式改为,
表=SELECTCOLUMNS(ADDCOLUMNS(CROSSJOIN('姓','名'),"姓名",[姓]&[名]),"姓名",[姓名])
一步实现最终结果,
以上三种方式操作起来都不难,数据处理虽不是DAX的长处,但也可以简单实现,学会这几个DAX函数,以后在数据分析时可以灵活构建度量。
当然在Power Query中最简单的,数据处理本来就是PQ的核心功能,这个案例中无需任何代码或者公式,只是通过简单的界面操作,就可以轻松完成。
-精彩推荐-
采悟 from Power BI 星球