小勤:最近收到一份数据,需要对多个Excel工作簿的内容进行汇总,真是麻烦!
大海:多个Excel工作簿内容汇总用Power Query不是很简单的事情吗?前面我不仅推送了大量文章《用PQ自动汇总各种文件数据,这一系列我又都给你整理好了!》,另外,还专门发布了一个关于数据汇总的视频合集《【免费系列视频】Excel数据汇总特辑 | 多个案例,多种情况,举一反三!》
小勤:是啊。但现在又有新情况!给过来的多份数据,看起来都挺规范的,但是,列名居然有的大写,有的小写,有的首字母大写……
大海:那你想一下在哪个步骤可能出问题?
小勤:就是想展开数据实现合并的步骤啊。
大海:那为什么这个步骤就会出问题?
小勤:表里的列名不一样。
大海:那如果在这之前对表的列都进行重命名,即列名弄成一样的,是不是就可以了?
小勤:对啊。但该怎么弄呢?
大海:比如说,我们如果把列名都统一成大写,要怎么办?
小勤:首选要把表的列名取出来,然后将这些列名转换成大写的,然后替换掉原来表里的列名……
大海:对,基本就是这个思路,综合起来的公式也是这样:
代码语言:javascript复制Table.RenameColumns( // 3. 对表的列进行重命名
[Data],
List.Transform( // 2. 对表的列名进行转换
Table.ColumnNames([Data]), //1. 取出表的列名
(x)=>{x,Text.Upper(x)} // 2. 对表的列名转换为大写(和原来的列名合成一对)
)
)
小勤:Table.ColumnNames取表的列名,List.Transform进行转换,Table.RenameColumns对表的列进行重命名,一层层往外跟原来的思路真的很匹配。但是,为什么List.Transform函数的第二个参数做成{x,Text.Upper(x)}?
大海:因为List.Transform函数对列名转换为大写后,是要交给Table.RenameColumns函数去调用的,而Table.RenameColumns函数的参数要求就是{原列名,新列名},而其中x就是原列名,Text.Upper(x)就是新列,一起才能构成完整的参数哦。
小勤:可是有很多函数记不住这么多的参数形式啊,怎么办?
大海:PQ里可以简单操作形成步骤公式代码啊。比如这个,你如果不记得,可以随便改一下列名,看一下生成的代码,然后照着写就行了哦。
小勤:有道理!
- 关于解决问题的方法 -
在遇到问题时,首先思考一下:
1、具体是什么问题?
2、在哪个步骤开始出问题?
3、如果要避免这个问题的发生,可以进行什么样的处理?
4、具体怎么处理?
通过这样的方式,层层推进,很多问题自然就迎刃而解,而Power Query恰恰让我们可以很轻松定位到具体出问题的步骤,而且也可以很方便地通过一些操作的方式去生成相应的步骤公式(代码)来做参考,这也是Power Query之所以相对简单易用的地方。