zoukankan      html  css  js  c++  java
  • 数据可视化之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中都显得毫不费力。

  • 相关阅读:
    .net core json 操作
    TypeScript 解构和展开
    asp.net core 学习路线
    NVM的安装和NPM下载速度慢的问题
    OzCode 最牛Visual Studio 调试工具
    破解EntityFramework Core
    动态WebAPI实现原理
    sqlyog 下载
    小程序生成二维码,海报
    .net core 拦截器的使用
  • 原文地址:https://www.cnblogs.com/qiu-hua/p/12795907.html
Copyright © 2011-2022 走看看