powerquery实现原始数据路径手动填写刷新
问题:
在最近的工作中,遇到要处理一批比较大的数据,使用了powerquery,但是由于原始数据量大,无法放到一个excel文件中,被分成了多个,在处理的时候选择了从文件夹获取数据的方式,处理后通过powerpivot进行了一系列的计算,发给同事后,发现修改文件夹路径是比较麻烦,通过百度,找到一些方法,本文做下记录,以便后期查看。
解决步骤:
1、新建查询-从文件-从文件夹
2、选择原始数据文件夹所在位置
3、加载后选择编辑
4、添加一个自定义列,列名随意,公式使用Excel.Workbook([Content]),注意严格区分大小写
5、选择新加的列,点击右键,删除其他列
6、点击新列的右边双向箭头,选择扩展Data
7、点击Data列的右上角,选择扩展你需要的列(如果数据量不大可以全部扩展)
8、将第一行提升为标题。
9、选择一列设置数据类型(多个文件合并会 把表头放到了内容里面,需要选择一列设置格式后通过删除错误值来删除表头数据,具体选择哪列,根据实际数据情况而定)
10、新建一个文件路径的表,转换为表后添加到查询中,注意表的名称
11、最关键的一步要创建一个函数,因为只有函数才会拥有动态变化的值。直接点击“新建查询-从其他源-空白查询”,创建一个空白查询,点击“高级编辑器”,删除里边的所有代码,把下面代码粘贴进去然后保存,并把该查询命名为“fnGetParameter”
//括号和等号加右箭头是函数的标志,括号里的是函数的参数,或者叫变量。如果把第一行拿掉,其实就是一个完整的查询。加上第一行就把这个查询封装成为一个函数了。
(ParameterName as text) =>
let
//获取刚才创建的表格
ParamSource = Excel.CurrentWorkbook(){[Name="文件位置"]}[Content],
//这一步其实是让参数表格的行可以无限扩充,不再局限于本例中的三行。
ParamRow = Table.SelectRows(ParamSource, each ([文件] = ParameterName)),
Value=
if Table.IsEmpty(ParamRow)=true
then null
else Record.Field(ParamRow{0},"路径")
in
Value
11、用高级编辑器查看查询,将
源 = Folder.Files("E:\*************\callList"),
替换为
源 = Folder.Files(fnGetParameter("callList")),
接下来就是一路保存和操作,最后把文件发给同事,同事只用在文件位置表格里面修改他电脑上路径即可使用。
对于从其他文件获取的数据,也可以使用同样的方法调用。
另外也可以使用powerquery的参数来定义文件路径
只是这种方法需要同时进去powerquery修改参数。