【一个真实的案例】这么复杂的数据处理工作现在也可以不用编程轻松完成了
今天介绍一个真实的案例。这个案例是n年前有客户问的一个问题。当时我是写了个程序来实现这个功能。现在看,其实有更好的方法。
01
客户有这样的一些数据:
这些数据记录的是每个文件对应的时长,其中A列是文件名,B列是时长。这样的表格有四个:A,B,C,D,四个表的结构是一样的。
客户的要求也很简单:
客户要求根据前面的四个表格中的内容,生成这个表格,要求第一列是各个表格不同文件名的排列组合,第二列是这种排列组合对应的时间之和,第三列是这个合计时间的分钟数。
仔细分析,这个要求有两个要点或难点,第一个是如何实现四列数据的排列组合。第二个是个隐含的难点。大家仔细看原数据中第二列的内容,看上去都是时:分:秒的形式,但是列标题却是分:秒。经过询问客户才知道这是由于采集数据时的错误设置导致把应该是分:秒的数据变成了时:分:秒的格式,也就是说看上去是10:30:00(10小时30分钟)的数据实际上是00:10:30(10分钟30秒),因此,在处理数据时需要考虑这个转换。
02
这个问题用传统的Excel技术没有太好的解决方法。当时我对Power Query理解的不太深入,因此我写了一段程序来处理这个问题。程序本身也不复杂。不过用程序处理有很多陷阱,老实说不是一个好的解决方案。
后来,随着我对Power Query理解的越来越多,慢慢意识到有很多这种传统上必须写程序解决的问题都可以使用Power Query来实现。下面就介绍一下这个案例的实现过程。
首先,我们将表A导入到Power Query中。
选中工作表A中的表格区域任意单元格,点击“数据”选项卡中的“从表格”:
将表A导入到Power Query中:
可以看到,Power Query直接将第二列转成了小数。这个小数实际上就是按照Excel中的时间跟数值的转换规则转变而成的。
但是根据我们对原数据的理解,这个数据本身就是错误的,需要进行转换处理。
在“添加列”选项卡中,点击“自定义列”:
按照如下对话框中的方式定义该列:
由于原数据中错误的把分钟变成了小时,秒变成了分钟,整体变大了60倍,所以除以60可以恢复
得到结果:
删除原来的分:秒列(第二列):
在右侧查询设置面板中,将名称修改为“表A”:
点击“主页”选项卡中的关闭并上载至:
选择仅创建连接:
点击加载,完成查询的创建。
同样,为B,C,D创建查询,并分别命名为表B,表C,表D。
03
在“数据”选项卡中,点击创建查询,点击从其他源众多的空白查询:
自动进入Power Query编辑器:
在公式栏中输入:=表A
按回车,得到表:
在“添加列”选项卡下,点击“自定义列”,在对话框中输入公式:=表B,
点击确定后,得到:
同样的方式,添加两个自定义列,分别是表C,表D:
点击第三列(自定义)列标题右侧的按钮,
在对话框中选择所有列:
点击确定,
同样的方式,展开其余两个自定义列:
选中所有的文件名列(按住Ctrl键用鼠标点选),在“转换”选项卡下点击合并列:
在对话框中,按如下方式设置:
点击确定,得到结果:
在“添加列”选项卡下,点击自定义,在对话框中按照如下方式设置:
点击确定,得到结果:
将该列转换为持续时间:
得到结果:
删除除“文件组合”和“时长”的其他列,并调整列的顺序:
点击“主页”选项卡中关闭并上载,得到结果:
大功告成!
04
关注本公众号,点击底部菜单“联系客服”,与客服取得联系,索取“派列表”案例文件