我们可以通过修改Power Query中的已有查询,创建包含复杂结构的函数,自动完成特定的重复性工作,提高工作效率。

数据文件下载地址:

http://data.stats.gov.cn/easyquery.htm?cn=E0105

基本思路是把对单个文件的操作步骤抽象为一般化的步骤。

导入分析数据文件

首先用Power Query导入需要定期处理的一个文件并根据需要整理数据。

b71a32161a893884734c051523d4a7d6.png

导入数据。

9ab2827709901516e7c33d082f876872.png

根据需要修改整理数据。此处的步骤为每次导入新数据时都要重复的操作。

整理完毕后打开“高级编辑器”分析代码,选择可以作为参数的变量,创建自定义函数。

3fb37179dfade3ff6aef691837d5b6bf.png

在高级编辑器中查看分析代码

从代码中可以发现与导入文件相关的操作位于let语句的第一行代码中。与文件存储位置相关的路径和文件名信息使用了硬编码,所以在创建自定义函数时需要使用参数替代这部分数据("D:文件列表北京.xls")。

源 = Excel.Workbook(File.Contents("D:文件列表北京.xls"), null, true),

创建函数

在高级编辑器中修改代码,创建自定义函数。

let     读取文件 = (路径名 as text, 文件名 as text) =>  let      源 = Excel.Workbook(File.Contents("D:文件列表北京.xls"), null, true),    主要城市年度数据1 = 源{[Name="主要城市年度数据"]}[Data],    删除的底部行 = Table.RemoveLastN(主要城市年度数据1,1),    删除的顶端行 = Table.Skip(删除的底部行,3),    提升的标题 = Table.PromoteHeaders(删除的顶端行),    更改的类型 = Table.TransformColumnTypes(提升的标题,{{"2019年", type number}, {"2018年", type number}, {"2017年", type number}, {"2016年", type number}, {"2015年", type number}, {"2014年", type number}, {"2013年", type number}, {"2012年", type number}, {"2011年", type number}, {"2010年", type number}})  in    更改的类型in    读取文件

参数列表中as操作符的作用是限定参数类型。修改函数查询名称,最终结果如下图。

2acc130aa89889eb7ea5216bc2f31026.png

修改函数内容及名称。

调用函数

使用Power Query导入存储所有待操作文件的文件夹。本例中文件夹里含有4个Excel文件。导入后注意观察列数据,Name和Folder Path两列包含了调用前面创建的自定义函数所需的参数。

212ba864ca6ef37e16421fc3067392fa.png

导入存储待操作文件的文件夹。

158dda926eb283c89fc7edcf10cd7ec5.png

含有函数调用参数的Name和Folder Path列。

点击“添加自定义列”,在自定义公式中输入自定义函数和所需参数。

52496c543c4a703d2ec60fb3feddba94.png

利用函数添加自定义列。

55c1bbe008af79106c9cd19ce522e224.png

点击新列标题右侧的扩展按钮,提取数据。

2700f8ad91dc0f4b8dccd7598f3d07fe.png

根据需要选择数据列,选择“扩展”,完成数据的导入。

ead38968aa8560c295f510bc04a33458.png

调整数据,得到最终结果。

最后把查询结果上载到数据表即可。

当有新的数据文件时,只要存入相应的文件夹,在Power Query中刷新数据更新即可。

Logo

DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。

更多推荐