【Power Query】追加查询(动态列,动态路径)
思路:
- 先在文件夹内新建一个Excel 工作表用于存放结果,避免数据重复
- 为避免多表追加后,上载时新增一倍工作表,直接在源上进行筛选,只留下Binary,再+自定义列,用Binary来定义出Table,删掉Binary,展开Table
- 在展开前,增加动态列表,生成不重复的所有字段,自动刷新同步
- 将固定路径替换成 动态路径,自动查询文件所在地址,避免因挪动文件夹而失效
步骤:
源筛选和添加自定义列:
- 先在文件夹里新建一个Excel文件,命名好,方便筛选
打开,追加完的结果就放在这里 - 我们点【数据】>>【获取数据】>>【来自文件】>>【来自文件夹】
选择当前打开的这个文件夹,直接点【转换数据】,其他什么都不要动 - 进来PQ的界面,步骤里只有一个【源】,按文件类型(Extension) 和名字(Name)筛选一下先
记得自己当前打开的工作簿名字,都要去掉,其中会有一个带~后缀
只留下【Binary】,选中这列 【删除其他列】,这列里是二进制的表格数据 - 接着点左上角【自定义列】这步是用来把table 定义出来
在公式栏里写上:
=Excel.Workbook([Content],true,true)
- 回车,这时候table 已经出来了,那content列,也就是Binary 就可以删掉了
只留下自定义列
接下来就可以把table展开了,注意不要勾选前缀
生成所有字段列表:
- 在展开的上一步,也就是 [删除的其他列1],右键【插入步骤后】,就可以新增一个步骤,用来同步新增的字段
- 可以重命名,我命名为【所有字段名】,我们在公示栏里输入:
=List.Distinct(List.Combine(List.Transform(删除的其他列1[Data],each Table.ColumnNames(_))))
注意其中【删除的其他列1】,如果上一步名字是这个就不用改,是什么改什么
- 接着要在展开步骤里,将“data” 前面的【所有字段名】几个字改成【删除的其他列1】,后面的括号里的字段,替换成【所有字段名】,也就是这样:
= Table.ExpandTableColumn(删除的其他列1, “Data”,所有字段名)
还是你命名什么就是什么,也可以跟我一样哈哈哈
这样就做好动态更新了,我们可以上载试试看
自主查找路径:
既然回到Excel了,正好可以新建一个sheet,重命名为路径
随便选一个地方,输入公式,直接就可以看到路径啦:
=LEFT(CELL(“filename”),FIND("[",CELL(“filename”))-2)
不同情况下的路径查询函数:
动态路径获取:
同文件下:
=LEFT(SUBSTITUTE(CELL(“filename”),"[",""),FIND("]",SUBSTITUTE(CELL(“filename”),"[",""))-1)
不同文件下:
=LEFT(CELL(“filename”),FIND("[",CELL(“filename”))-1)&“追加查询结果.xlsx”
只查询路径到文件:
=LEFT(CELL(“filename”),FIND("[",CELL(“filename”))-2)
-
再将这个有路径的单元格定义名称,我写的是path
-
回到刚才的查询,我们可以点中上载的那张表格,一般屏幕上方会有【查询】选项卡,里面找到【编辑】这一栏就可以回去啦 (如果没有,那【数据】下也有【查询和连接】,可以在右侧调出历史查询,右键编辑)
-
进去之后,在步骤里面点中【源】,因为路径在源里,我们需要把这里公式栏的固定路径,替换掉,双引号也要一起,也就是括号()里的内容,以下是用来替换的:
Excel.CurrentWorkbook(){[Name=“path”]}[Content]{0}[Column1]
- 这样文件夹就可以自由挪动了,不过要整个文件夹一起挪走,不然路径不统一
− ∗ T ∗ H ∗ A ∗ N ∗ K ∗ S ∗ − -*T*H*A*N*K*S*- −∗T∗H∗A∗N∗K∗S∗−