zl程序教程

您现在的位置是:首页 >  其他

当前栏目

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

2023-03-07 09:02:20 时间

日常工作中,很多朋友遇到类似如下的问题——多个要汇总的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系列知识时,

人人都会遇到很多问题,

知识星球提问,

回答可跟踪可复习,

少走弯路,学习效率更高。