如前面的答案,vlookup是方法之一,但是,用vlookup有一个问题,就是只能从一个表读取数据到另一个表,而不能实现两个表的完全整合,比如如果A表上有姓名和地址而B表上没有数据的,从B表读取A表的数据就读不出来,相反也是一样。
因此,个人认为最好的办法是用Excel2016的新功能Power Query(如果是Excel2010或2013可以到微软官方下载插件)。具体实现方法如下:
vlookup虽好,然难承大数据之重【PQ关联表合并】原创 大海 Excel到PowerBI小勤:大海,现在公司的数据量越来越大,现在有订单表和订单明细表,经常要将订单表的一些信息读取到订单明细表里,给相关的部门去用,原来只要几列数还好,vlookup读一下就是了,但现在,经常要很多数,用vlookup要累屎了。这个订单表还算少的,还很多其他的一张表里都好几十列了。
大海:呵呵,大数据时代嘛。几十列算少的啦,偶上次一个项目上的合同表,有差不多300列,而且这还不算真正多的。
小勤:那怎么办啊!有时候按列顺序读还好,很多时候还不是按顺序的,简直就没法整啊。而且,满篇公式的时候,工作表都要跑不起来了。
大海:这个时候用vlookup的确有点吃力了,虽然vlookup是Excel中极其重要的函数,但是,在大数据时代,已经很难承起数据关联合并的重担了,所以微软才在Excel里加了PowerQuery的功能嘛,点点点,你想要哪些列就哪些列。
小勤:这么神奇?
大海:这段时间PowerQuery的神奇你也不少见了,不用惊讶。现在就告诉你怎么弄。
Step-1:获取订单表数据并仅创建表连接上载
Step-2:获取订单明细表数据并仅创建表连接上载(需要直接上传结果的可以选择表)
Step-3:回到PowerQuery界面(当然,前面一个步骤如果没有关闭并上载的话,不需要这一步)
Step-4:选择要接入外部数据的查询,单击【开始】-【合并查询】
Step-5:选择要接入的外部表、选择两表之间用于匹配的列(可以是多列匹配,文末以另一个例子该步骤的附图方式说明)
Step-6:展开要接入表的列信息,选择要接入的列以及列名显示方式(是否加前缀)
Step-7:查看接入的结果,上载数据
Step-8:改变数据的加载方式(由“仅创建连接”方式改为“表”,若前面订单明细不是以“仅创建连接”的方式创建,该步骤不需要)
小勤:这样真是太方便了,只要选一下匹配要用的列,选择一下要接入哪些列就搞定了!对了,刚才你不是说可以多列匹配吗?原来用vlookup的时候可麻烦了,还得增加辅助列先将那些列连接起来,然后再用辅助列来匹配。
大海:是的。在PowerQuery里也不需要了,只要在选择匹配列时按住ctrl键就可以选择多列了。只是要注意两个表选择匹配列的顺序要一致。如下图所示:
小勤:太好了,以后数据列多的时候匹配取数就太简单了。
以上是使用Power Query代替vlookup实现的两表合并的基本用法(虽然步骤看起来很多,实际关键步骤就2个,都是鼠标点点点就瞬间完成的事情)。
那么,前面提到的,如果两个表间存在的差异数据都要显示,怎么办呢?只要对其中的表间连接类型按以下情况进行适当的选择即可:
左外部:只要订单表(左表)里有的数据,结果表里都会有,但有些因为明细表(右表)里没有,所以匹配过来后会成为null(空值)
右外部:和左外部相反,即明细表(右表)里有的数据,结果表里都会有,但因为订单表(左表)里有部分数据没有,所以合并后用null值表示。
完全外部:不管哪个表里的数据,全都进结果表,对于双方都有一些对方没有的,合并后显示为null值。
内部:跟完全外部相反,只有两个表都有的数据,才进结果表。
左反:只有订单表(左表)有而明细表(右表)没有的数据,才进结果表。这种用法经常用于检查如哪些订单缺了明细表等。
右反:和左反相反,只有明细表(右表)有而订单表(左表)没有的数据,才进结果表。
欢迎关注【Excel到PowerBI】偶是大海,微软认证Excel专家,企业签约Power BI顾问让大家一起学习,共同进步!mysql 按月分组,mysql 新增字段 备注,mysql case和if,mysql定时任务脚本,mysql variable value,mysql 查看数据文件位置