Power Query 转换概述

Power Query 转换是数据处理的重要过程,转换工作开始之前要先确定好自己的目标,你需要得到什么样的结果。其实转换工作的实质就是:

无序变有序混乱变统一

有了目标之后,就是选择适当的转换方法,这个有点和Excel写公式相近,同一个问题可能会有很多种公式的写法,每个人都有自己一个习惯,有的高手认为,一步搞定,公式越短越显功力,有的则分步完成,同样能得到结果。所以只要解决问题,你的方法就是对的。

转换方法,大的方向有三个:

以少生多以多变少形状变换

具体到操作上:

以少生多:拆分列、添加列以多变少:删除行、删除列、筛选行形状变换:透视列、逆透视列

Power Query 转换操作的基本约定:

所有转换操作都在编辑器中进行查询可以重复使用列可以增加、可以减少行不能增加、可以减少使用M函数的时候,注意首字母要大写

我们来看一个例子:从天气网站上获取城市列表的转换过程:

左边是我们的目标表格,右变是网页的截图,看起来很整齐,但是如果你直接复制到Excel中就是一团汉字,拆都拆不开。看看源码的样子,也是很头疼

98行是我们要的数据,看起来也是很乱。

Power Query数据处理过程的第一步是建立连接,从网页建立连接是可以的,但是每次都要从网站抓取,不是很方便,我们可以源代码复制到文本中,然后从文本建立连接。

转换开始

第一步:修改源的设置

默认的是HTML格式的,需要修改成文格式

第二步:减法去掉多余的内容

我们复制到文本的时候多了一行空白,变成99行了,保留99行,其他行都去掉。

第三步:加法分列

省直辖市是h2字体,我们用

做符号分列,一列变多列。

第四步:变换转置:行变列

因为后续的出列还要继续拆分,放在列拆分比较方便。

第五步:加法继续拆分列

HTML中标志都是成对出现的

,

,所以我们再用拆分一次,就把省直辖市与区县分开。

第六步:准备分列字符

用逗号替换,逗号就是后续分类用的符号

第七步:减法去掉多余的字母与字符

使用Text.Remove函数去掉多余字符,保留汉字。添加两个自定义列

省市=Text.Remove([Column1.1],{"a".."z","","0".."9"})
区县=Text.Remove([Column1.2],{"a".."z",""," ", "-","0".."9"})

这里使用了M函数,要首字母大写,至于删除什么符号,要根据具体情况,适当添加,删减符号,当然不能把逗号也remove了,否则我们做的分列符号就白做了。

第八步:减法去除多余的列,与空行

第九步:加法拆分列

看见了么,我们预留的逗号在这一步发挥作用了。

第十步:变换逆透视列

选第2列,按SHIFT+END选中除第一列外的后面所有列,然后按逆透视按钮。

第十一步:减法删除列,筛选空白行

到这里转换工作就全部完成了。

其实我也不是一下子就全部做好,中间会有些问题,发现问题在去修正,例如自定列的时候,去除空格和短划线,就是在后来的检查中发现,县市的里面有些有多余的空格和短划线,纠正这个问题,可以添加两步字符替换,也可以在Text.Remove函数中直接去除。

Power Query转换操作,就是这样不断的找规律,加加减减,最后转换成你需要的结果。