Power Query动态追加查询(不同工作簿下)
这是Power Query实战工作场景第二期--动态追加查询(不同工作簿下)
实现即使修改数据文件路径,依然可以动态实时刷新数据
数据资源已经与这篇博客捆绑,有需要者可以下载通过网盘分享的文件:数据.xlsx、合并.xlsx等2个文件
链接: https://pan.baidu.com/s/1oGnfFZFZgwjAOd617_RtLQ?pwd=0623 提取码: 0623
在工作中我们经常要用Power Query对数据进行处理后实时增加数据,实现动态刷新。首先是最常规的办法
方法一
1.新建一个空白xlsx文件,命名为合并.xlsx,这里我们的合并-副本.xlsx文件位于E:\追加查询汇总多个工作表\合并.xlsx,打开文件合并.xlsx(这里新建的合并.xlsx和数据-副本.xlsx文件都位于E:\追加查询汇总多个工作表下)
2.获取数据-->来自文件-->从Excel工作簿,找到位于E:\追加查询汇总多个工作表\数据-副本.xlsx,选择多项,全部导入。,点击转换数据。
2.点击追加查询-->将查询追加作为新查询(不会修改原表),选择三个或更多表,添加我们这里的三个表,点击确定就是我们已经追加完后的表了。点击确定后,选择关闭并上载至,选择新建工作表。
3.回到数据-副本.xlsx,在表1增加一行勇太 66 66 66 66,按ctrl+s保存,然后再次回到合并.xlsx。
数据-->全部刷新,发现数据正确刷新。
4.回到数据-副本.xlsx,在表1增加一列物理 99 99 99 99,按ctrl+s保存,然后再次回到合并.xlsx。
数据-->全部刷新,发现数据正确刷新。
5.将包含这两个xlsx的追加查询汇总多个工作表这个文件夹移动到D:\追加查询汇总多个工作表,再次打开数据-副本.xlsx,删除表1物理这一列,再次打开合并.xlsx,点击数据-->全部刷新。数据不能正常刷新了。
这个方法操作简单,适合于文件夹不需要移动的数据源,但是实际工作场景中,数据源需要被随时拷到U盘或者传到同事的电脑里,此时这个方法就不适用了。
方法二
1.删掉刚刚的合并.xlsx,重新新建一个空白的工作簿。命名为合并.xlsx。打开D:\追加查询汇总多个工作表\合并.xlsx.获取数据-->来自文件-->从Excel工作簿,找到位于D:\追加查询汇总多个工作表\数据-副本.xlsx,选择表1,点击转换数据。
2.删除多余的应用步骤,只保留源。点击Table,发现第一行不是列名,将
= Excel.Workbook(File.Contents("D:\追加查询汇总多个工作表\数据 - 副本.xlsx"), null, true)改为
= Excel.Workbook(File.Contents("D:\追加查询汇总多个工作表\数据 - 副本.xlsx"), true, true)
3.按住ctrl,选择删除Item、Kind、Hidden列,展开Data列。
= Table.ExpandTableColumn(删除的列, "Data", {"姓名", "语文", "数学"}, {"姓名", "语文", "数学"})
我们发现只有姓名、语文、数学这三列,以后再添加其它列怎么办?
所以我们要做两件事,一件事是动态添加列名,另外一件事是解决路径问题。
4.右键删除的列,点击插入步骤后,自定义1命名为字段名。将展开的"Data"的函数里的字段名,改为删除的列,即
= Table.ExpandTableColumn(字段名, "Data", {"姓名", "语文", "数学"}, {"姓名", "语文", "数学"})改为= Table.ExpandTableColumn(删除的列, "Data", {"姓名", "语文", "数学"}, {"姓名", "语文", "数学"})
,
5.在字段名这个应用步骤里,增加函数,动态识别字段名
= List.Distinct(List.Combine(List.Transform(删除的列[Data],each Table.ColumnNames(_))))
6.在展开的"Data"将
Table.ExpandTableColumn(删除的列, "Data", {"姓名", "语文", "数学"}, {"姓名", "语文", "数学"})改为
= Table.ExpandTableColumn(删除的列, "Data",字段名)
发现动态的识别新增加的列名,成功解决第一件事,第二件事就是解决我们源这个应用步骤里写死的路径问题。
7.关闭并上载至,插入工作表,重名为路径。原追加后表1重名为合并。在A1单元格增加函数
=LEFT(CELL("filename"),FIND("[",CELL("filename"))-1)&"数据-副本.xlsx"
在实际工作中,我们只需要改后面"数据-副本.xlsx"这个地方,我们实际工作中文件是什么名字就改成什么名字。
8.在数据选项卡里,点击定义名称,选择A1单元格,命名为bi
9.回到合并这个表,找到右侧的查询&连接,右键表1,选择编辑重新进入Power Query
10.将源的函数= Excel.Workbook(File.Contents("D:\追加查询汇总多个工作表\数据 - 副本.xlsx"), true, true)中的"D:\追加查询汇总多个工作表\数据 - 副本.xlsx"替换为
Excel.CurrentWorkbook(){[Name="bi"]}[Content]{0}[Column1]
这里你只需要修改Name,值为你具体定义的名称。
关闭并上载,保存一下
11.剪切追加查询汇总多个工作表这个文件夹,剪切到桌面,打开数据-副本.xlsx。在表1中将勇太改为六花,点击保存。打开合并.xlsx,打开数据选项卡-->全部刷新
切记在刷新前一定要保存修改后的数据,否则刷新是没有变化的
最后提醒大家,我们移动的话,一定是移动整体的文件夹,不要单独移动某个文件,否则会失效
不要改随便改例如数据-副本原始名称,如果要改,就必须重新进入合并.xlsx里面,修改=LEFT(CELL("filename"),FIND("[",CELL("filename"))-1)&"数据-副本.xlsx",修改&后面的文件名字