汇总Excel数据,列名不一样怎么办?| Power Query实战

日常工作中,很多朋友遇到类似如下的问题——多个要汇总的Excel工作表,列名却存在一些差异,比如有的表里叫“日期”,而另一个表里可能是“采购日期”……

碰到这种情况,该怎么办?
首先,这个问题如果说有 一劳永逸的办法,那肯定是规范数据的源头 ,比如对填报的数据设定模板,对表头进行锁定……但如果数据已经这个样子了,那么,就要根据实际情况进行灵活处理。以下讲2种比较常见的情况。
视频已在知识星球发布,数据下载链接:https://t.zsxq.com/07pmuqNxc
我是大海,欢迎加入知识星球【Excel到PowerBI】,更多系列视频,更多实战练习,问答更详尽,学习更高效。

第1种正如上面的例子, 虽然列名不一致,但是,列的位置是一样的 ,所以,这个情况处理起来也比较简单,具体如下:
Step-01 用Excel.Workbook函数解析工作簿(注意不要加第2个参数true)

Step-02 展开合并数据

Step-03 删除其他列

Step-04 提升标题行

Step-05 筛选删除多与数据(列名)

即, 使用Excel.Workbook函数解析工作簿时,不要添加第二个参数(true)识别列名,这样,得到的结果将是按位置生成的列名,直接合并再筛选数据即可。
接下来是比较复杂的第2种情况,即列的位置也不是一一对应的!
这时,可以继续细分为以下2种情况:
1、 列名有比较明确的规则 ,比如,【日期】列都包含“日期”两个字、【采购人员】列都包含“采购、员”三个字……

这时,因为虽然列名有差异,位置也不一致,但列的命名有规律可循,那么,自然就可以想办法按照规律进行统一。具体处理如下:
Step-01 用Excel.Workbook函数加上第2个参数true解析工作簿

Step-02 添加自定义列,对解析出来的工作表列名进行统一

= Table.RenameColumns(
[Data],
List.Transform(
Table.ColumnNames([Data]),
(x)=>if Text.Contains(x,"日期") //如果包含日期,改为“日期”
then {x, "日期"}
else if Text.Contains(x,"采购") //如果包含“采购”