PowerQuery批量合并Excel,原来这个方法更好用
这些技巧可以应对绝大多数情况,但仍有例外的情况,这篇文章分享一个更灵活、更普适的方法,利用自定义函数批量合并Excel。
以前分享的思路是,先批量合并文件夹里面的所有的Excel表格,汇总完成后后再进行整理。
而利用自定义函数的思路是,先对文件夹中的一个文件进行整理,并将处理的步骤封装成自定义函数,然后对文件夹中的所有文件调用该函数,最终实现所有文件的合并整理。
如果还不是太理解,这里用一个示例带你看看,这种方式是怎么实现文件的批量整理,然后合并到一起的。
以这个文件夹为例,有2019年到2021年3个年度的Excel文件:
而每年的数据结构分别是下面这样的:
看起来表的结构好像是相同的,但仔细观察这三个表,你会发现,每个表的列名都是该年的月份,如果简单合并,就丢失了年月维度的信息,并且2021年的列数与其他两年还是不等的,这都导致了不能按照之前的方法简单合并。
由于上面几个表都是二维表,最后肯定要转换为一维表使用,那么,我们可以换个思路,先将每个表转换为一维表,一维表格式是完全相同的,最后再合并即可。
当然不需要手工单独对每个表转换为一维表,只需转换一个,然后将这个表的转换步骤应用到文件夹中的每个表上即可,下面是操作步骤。
1、将一个表导入到PowerQuery,并进行数据整理。
比如先将2019年的表,导入并逆透视为一维表,处理后的效果是这样的:
如果对PowerQuery操作不了解,可以先看看这篇文章:数据清洗中最常使用的十三招
2、将第一步的查询封装成自定义函数。
右键该查询,创建函数,可以命名为"单文件处理"。
生成自定义函数后,在编辑器中修改M代码,将excel文件的路径更改为自定义函数的参数:
然后我们只要将每个文件的路径找到,作为这个自定义函数的参数就可以了。
3、PowerQuery导入文件夹,获取每个文件的路径。
文件夹导入后,选中Name和FolderPath列,删除其他列,只保留这两列:
然后将这两列合并,就得到了每个文件的完整路径。
4、调用自定义函数,合并完成。
在第三步的基础上,调用第2步建好的自定义函数,将每个文件的完整路径作为参数。
然后展开数据,就直接得到了3个文件汇总并整理好的一维表。
以上就是利用自定义函数批量汇总的全部步骤,是不是也挺简单。
这种方法的优点如下:
更加灵活:对于不能直接简单的合并的(如本文示例),也可以处理;
速度更快:先对一个文件进行整理,然后再汇总,相比先汇总再整理,更节省时间,对于文件多、数据量大、以及需要较为复杂处理的合并尤为如此。
本文的练习数据,可以在「PowerBI星球」公众号对话框发送关键字“自定义函数批量合并”下载。