汇总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,"采购") //如果包含“采购”
and Text.Contains(x,"员") // 并且包含“员”
then {x, "采购员"} // 改为“采购员”
else {x,x}
)
)
公式的核心是用List.Transform函数,将原表的列名转换为用于对表进行列重命名的函数的参数。
关于List.Tranform函数的详细使用方法,请参考:《用Power Query轻松批量抓取A股数据,及列表转换函数(List.Transform)的使用》
Step-03 列名统一后,就可以直接展开合并数据了
2、列名规律不明显,需要人为识别!
这,就没有办法了,只能对一个个表人为地去改好列名,然后再进行合并。
从上面的处理情况来看,即使能总结出规律,处理起来其实也很麻烦。所以,关键的关键,还是在于数据源头上做好规范,否则,后面就一定在数据清洗的过程中花费更大的精力!
学习Power系列知识时,
人人都会遇到很多问题,
知识星球提问,
回答可跟踪可复习,
少走弯路,学习效率更高。
相关文章
- 在 Go 里用 CGO?这 7 个问题你要关注!
- 9款优秀的去中心化通讯软件 Matrix 的客户端
- 求职数据分析,项目经验该怎么写
- 在OKR中,我看到了数据驱动业务的未来
- 火山引擎云原生大数据在金融行业的实践
- OpenHarmony富设备移植指南(二)—从postmarketOS获取移植资源
- 《数据成熟度指数》报告:64%的企业领袖认为大多数员工“不懂数据”
- OpenHarmony 小型系统兼容性测试指南
- 肯睿中国(Cloudera):2023年企业数字战略三大趋势预测
- 适用于 Linux 的十大命令行游戏
- GNOME 截图工具的新旧截图方式
- System76 即将推出的 COSMIC 桌面正在酝酿大变化
- 2GB 内存 8GB 存储即可流畅运行,Windows 11 极致精简版系统 Tiny11 发布
- 迎接 ecode:一个即将推出的具有全新图形用户界面框架的现代、轻量级代码编辑器
- loongarch架构介绍(三)—地址翻译
- Go 语言怎么解决编译器错误“err is shadowed during return”?
- 敏捷:可能被开发人员遗忘的部分
- Denodo预测2023年数据管理和分析的未来
- 利用数据推动可持续发展
- 在 Vue3 中实现 React 原生 Hooks(useState、useEffect),深入理解 React Hooks 的