数据可视化之powerBI技巧(七)从Excel到PowerBI,生成笛卡尔积的几种方式

假如分别有100个不重复的姓和名,把每个姓和名进行组合匹配,就可以得到一万个不重复的姓名组合,这种完全匹配的方式就是生成一个姓名的笛卡尔积。

下面就来看看生成笛卡尔积的几种方式,为了展现的方便,以5个姓和5个名为例,更多的数据也是一样操作的。

 

在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列生成笛卡尔积。

 

 

在Power Query中生成笛卡尔积

 

在PQ中相比Excel要简单的多,假如有两个表,'姓'和'名',操作步骤如下,

 

 

↑添加辅助列,值设置为1(或其他任何值)

 

 

↑合并查询-按辅助列-完全外部联结

 

 

↑展开合并查询

 

 

↑合并列

 

 

 

通过简单的点击操作,就生成了一个笛卡尔积,虽然看起来步骤很多,其实就是秒秒钟的事。

 

使用DAX生成笛卡尔积

 

依然假设已经有两个表,'姓'和'名',在【建模】选项卡下点击"新表",输入,

 

姓名 = GENERATE('姓','名')

 

 

二者逐一匹配的笛卡尔积的结果就出来了,这里GENERATE函数还可以使用CROSSJOIN替代,效果是一样的。

当然我们并不想要姓和名分开为两列,而是想直接得到姓名合并的结果,可以用ADDCOLUMNS把这两列合并,再利用SELECTCOLUMNS函数提取出需要的列,把公式改为,

 

表=SELECTCOLUMNS(ADDCOLUMNS(CROSSJOIN('姓','名'),"姓名",[姓]&[名]),"姓名",[姓名])

 

一步实现最终结果,

 

 

 

 

总结

 

以上三种方式操作起来都不难,数据处理虽不是DAX的长处,但也可以简单实现,学会这几个DAX函数,以后在数据分析时可以灵活构建度量。

当然在Power Query中最简单的,数据处理本来就是PQ的核心功能,这个案例中无需任何代码或者公式,只是通过简单的界面操作,就可以轻松完成。

在Excel中虽然也仅需一个公式,但能灵活使用INDEX函数的都是高手级的,能达到这个水平的人少之又少,大部分人看到这个公式可能也不理解,并且如果数据量较大,通过Excel处理速度也会变得很慢。

所以说学习Power Query可以让你在数据处理上弯道超车,轻松逆袭,之前在Excel中很难处理,或者需要用到各种稀奇古怪函数才能得到的结果,在PQ中都显得毫不费力。

猜你喜欢

转载自www.cnblogs.com/qiu-hua/p/12795907.html