美文网首页PowerBI专栏power biPowerQuery
在Excel和PowerBI中生成笛卡尔积

在Excel和PowerBI中生成笛卡尔积

作者: PowerBI星球 | 来源:发表于2018-11-26 06:21 被阅读33次

    假如分别有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中都显得毫不费力。

    相关文章

      网友评论

        本文标题:在Excel和PowerBI中生成笛卡尔积

        本文链接:https://www.haomeiwen.com/subject/ankvqqtx.html