电源查询追加到现有的表

我最近切换到PowerQuery从各种来源获取数据。 我已经将我现有的数据加载到名为“masterEntries”的表中。

我已经调用了一个函数来检查“masterEntries”中每个源的最后一个logging,并只提取较新的logging。

let Source = Excel.CurrentWorkbook(){[Name="formsMaster"]}[Content], #"Changed Type" = Table.TransformColumnTypes(Source,{{"FormName", type text}, {"Form", type text}, {"LastEntry", Int64.Type}}), #"Added Custom" = Table.AddColumn(#"Changed Type", "Custom", each formEntries([FormName],[LastEntry])), #"Expanded Custom" = Table.ExpandTableColumn(#"Added Custom", "Custom", {"EntryId", "Field1", "Field2", "Field3", "Field5", "DateCreated"}, {"EntryId", "Field1", "Field2", "Field3", "Field5", "DateCreated"}), #"Removed Columns" = Table.RemoveColumns(#"Expanded Custom",{"Form", "LastEntry"}), in #"Removed Columns" 

该查询将数据加载到新表中。 相反,我想追加数据到“masterEntries”。

我试图用PowerQuery而不是VBA来做到这一点。 PowerQuery具有附加查询function,可以将两个或多个查询/结果组合到一个新表中。

即使是一个新的查询来追加结果表从上面的查询(“latestEntries”)到现有的表(“masterEntries”)将做。

有关如何使用PowerQuery可以完成的任何想法?

编辑

  1. 我的原始数据(“masterEntries”)是手动加载。 这是一个有400K +logging的大桌子。 我可以加载它使用查询,如果这将有所帮助。
  2. “latestEntries”的每次运行都会检查“masterEntries”中的logging是否已经存在,并只从不同的来源获取新的条目。
  3. Power Query中的追加查询方法只是一个连接。 它不会永久追加logging。 也就是说,当“latestEntries”带来一组新的logging时,“master条目”丢失了在“latestEntries”早期运行的logging。

你应该添加这样的东西,只需Your_Table名称Your_Table为您要使用的表:

  #"Append Query" = Table.Combine({#"Removed Columns", Your_Table}) in #"Append Query" 

这听起来有点像“增量加载”的请求。 Power Query中目前不支持此function。 解决方法是通过一个“linkback” – 表如这里描述的表: http : //ms-olap.blogspot.de/2015/05/incremental-data-loads-in-microsoft.html

如果你的链接表超过1,1 Mio行,你可以使用JSON压缩,如下所述: http : //www.thebiccountant.com/2016/12/06/how-to-store-tables-longer-than- 11-mio-rows-in-excel /但请注意,这会降低性能。

这两种方法“性价比”,所以这种技术只有在“保存”重复执行真正的重大转换(或从Web长时间加载)时才有意义。

假设你有一些ID,它是整数,这里是masterEntries表的查询(这很重要!):

 let Source = Excel.CurrentWorkbook(){[Name="masterEntries"]}[Content], Types = Table.TransformColumnTypes(Source,{{"ID", Int64.Type}, {"Value", type number}}), //Assuming you have integer-type IDs. //Otherwise you have to order and index records in a view, and query that view. MaxID = List.Max(Types[ID]), //if you have ordered index, List.Max() can be substituted with Table.LastN(Types, 1)[ID]{0} //it may perform better. TableFromDB = Excel.CurrentWorkbook(){[Name="source"]}[Content], //Replace with database table GetNewRows = Table.SelectRows(TableFromDB, each [ID] > MaxID), MergeTables = Table.Combine({Types, GetNewRows}) in MergeTables