- 1 -
在使用Power Query的时候,我们会编写一些自定义函数,以方便在多个地方需要进行同样的处理时,可以直接调用。
其中,有一类自定义函数,是我们先用一个例子做试验,试验成功之后,再改为自定义函数的。
比如说,我们要从天气网站上获取一些历史数据,可以对某个城市其中1个月的数据先试着获取并做好处理,然后再改为自定义函数:
下面,我们将以此为例,看看怎样先做例子,然后,再一键生成自定义函数,而且,一键生成的自定义函数,还能随着我们所做的例子更新而更新!
- 2 -
首先,要一键生成自定义函数,有个小小的条件,我们先将要作为函数参数的内容用参数引用的方式来实现,除此以外,其他的步骤就是使用Power Query正常处理数据的步骤,具体过程如下:
Step-01 创建参数
进入Power Query编辑界面,单击“主页”菜单,一次单击“管理参数/新建参数”按钮:
在弹出的“管理参数”对话框中,依次填/选好参数的“名称、类型、当前值”等内容后,单击“确定”按钮:
这时,我们就生成了一个名称为“年月”的参数,且其默认值为“201101”:
Step-02 新建源,从Web获取数据
在填写链接的对话窗中,选择“高级”,将URL的部分分段输入(可通过单击“添加部件”按钮增加),即参数前、后的内容直接复制粘贴进去,而参数放在中间部分,通过选择类型和参数实现,最终如下图所示:
单击“确定”按钮后,我们将可以直接获取到广州市2011年1月份的数据:
Step-03 一键创建自定义函数
在Power Query左侧的查询清单中,右键单击刚生成的“广州历史天气预报”查询,在弹出的菜单中单击“创建函数”:
在弹出的“创建函数”对话框中,输入函数名称并单击“确定”按钮:
此时,前面创建的年月参数、广州历史天气查询以及生成的函数会被合并到一个“组”里:
而且,如果我们查看“获取天气信息”函数的属性,你会发现,其中有一项提示“此函数的定义随查询……的更新而更新”!
真有这么牛逼?!!!我们试试在“广州历史天气……”查询里删掉一列:
此时,我们可以看到,“广州历史天气预报……”查询里增加了一个“删除的列”的步骤:
我们再查看一下“获取天气信息”函数里的代码——也自动增加了“删除的列”的步骤!!!
实际上,我们如果进入高级编辑器,就会发现,创建的函数实际上是完整复制了“广州历史天气预报……”查询里的代码,然后再在外面套了一个自定义函数参数的写法:
只要我们不人为(手贱)去改这段代码,Power Query就会自动地用“广州历史天气预报……”查询里的代码来替换这一部分。而只要我们稍作改动,哪怕只是改一下形式,比如在参数后面加个回车换个行:
两者之间的联动就会失效——这也不是说Power Query还是不够智能,毕竟,谁知道你只是敲了个回车?总不能每次变更都对代码做个全文对比看差异在哪里,然后决定替换哪一部分内容!
- 3 -
最后,再说一下这种方式的一个好处:因为函数和示例间可以联动,让我们可以非常方便地去按示例数据的情况自动调整对应的函数,省去了先尝试做示例再修改为函数的麻烦,也避免了直接在函数中调整数据处理方式无法直观看到处理结果的不便,妥妥的一箭双雕啊!
当然,这个例子里,我们还可以针对“城市”做成一个参数,然后生成一个带2个参数的自定义函数,然后在后续构造城市、月份列表的基础上,调用该函数,直接获取多个城市多月份的天气预报数据,有兴趣的朋友可以动手试试。