本文来源于一个星友的问题,他有上百个Excel表格,格式并不完全一样,列的位置顺序也不同,但每个表都有几个共同列,这种情况下,能不能通过Power Query把这些表格共同的列批量合并呢?
当然是可以的!
我模拟了三个表,源数据的情况大致是这样的,
这三个表之间的特征如下:
有共同列
列的位置顺序是不同的
列的数量不同,表三比其他表少了一列
假设我们需要提取其中四列并合并:订单日期、商品名称、客户编号和销售额,这四列在三个表都存在。
如果使用PowerQuery简单的合并汇总功能,是无法满足要求的,不过通过简单的M代码就可以实现。
下面是操作步骤。
/01/
将需要合并的表放入到一个文件夹中,然后使用获取数据>从文件夹,
/02/
点击编辑,进入PowerQuery编辑器,删除无关列,只保留Content列,
/03/
添加自定义列,
结果如下,
上面这三个步骤都是常规的合并操作,下面这一步是重点。
/04/
添加步骤,输入以下M代码,
合并指定列=
Table.Combine(
List.Transform(
Table.Combine(已添加自定义[数据])[Data],
each Table.SelectColumns(_,
{"订单日期","商品名称","客户编号","销售额"})))
大功告成,只包含这四列的表格合并好了,
主要是利用了 List.Transform和Table.SelectColumns函数组合来提取需要的列,然后再利用Table.Combine函数把提取后的列合并起来。
以上代码自己琢磨一下,暂时不理解也没有关系,遇到同类问题直接套用即可。
通过这个小例子,也可以看出M的灵活和强大,当遇到特定的问题,只靠鼠标点击界面功能无法满足需要的时候,也许简单两个M函数就解决了。
并且,有的问题通过界面功能需要很多步骤才能实现,而利用M可以一步完成,大大简化操作步骤。
如果你经常做数据清洗工作,并且源数据不够规范,这种情况下学点M是很有必要的。