日常工作中,很多朋友遇到类似如下的问题——多个要汇总的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,"采购") //如果包含“采购”
and Text.Contains(x,"员") // 并且包含“员”
then {x, "采购员"} // 改为“采购员”
else {x,x}
)
)
公式的核心是用List.Transform函数,将原表的列名转换为用于对表进行列重命名的函数的参数。
关于List.Tranform函数的详细使用方法,请参考:《用Power Query轻松批量抓取A股数据,及列表转换函数(List.Transform)的使用》
Step-03 列名统一后,就可以直接展开合并数据了
2、列名规律不明显,需要人为识别!
这,就没有办法了,只能对一个个表人为地去改好列名,然后再进行合并。
从上面的处理情况来看,即使能总结出规律,处理起来其实也很麻烦。所以,关键的关键,还是在于数据源头上做好规范,否则,后面就一定在数据清洗的过程中花费更大的精力!
学习Power系列知识时,
人人都会遇到很多问题,
知识星球提问,
回答可跟踪可复习,
少走弯路,学习效率更高。
本文分享自 Excel到PowerBI 微信公众号,前往查看
如有侵权,请联系 cloudcommunity@tencent.com 删除。
本文参与 腾讯云自媒体同步曝光计划 ,欢迎热爱写作的你一起参与!