我最近切换到PowerQuery从各种来源获取数据。我已将现有数据加载到名为" masterEntries"。
的表中我调用了一个函数来检查" masterEntries"中每个源的最后一条记录。并且只获取较新的记录。
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具有追加查询功能,其中两个或多个查询/结果可以组合到新表中。
即使是将上述查询(" latestEntries")中的结果表附加到现有表(" masterEntries")的新查询也可以。
关于如何使用PowerQuery完成任何想法?
修改
答案 0 :(得分:1)
这听起来有点像“增量加载”的请求。 Excel中的Power Query当前不支持此功能。解决方法是通过像此处所述的“linkback”表:http://ms-olap.blogspot.de/2015/05/incremental-data-loads-in-microsoft.html
如果您的linkback-table超过1,100万行,您可以使用如下所述的JSON压缩:http://www.thebiccountant.com/2016/12/06/how-to-store-tables-longer-than-11-mio-rows-in-excel/ 但请注意,这会降低性能。
这两种方法都“降低了”性能,所以这种技术才有意义,如果你“保存”重复执行非常繁重的转换(或从网络上长时间加载)。
答案 1 :(得分:0)
您应该添加这样的内容,只需将Your_Table
的名称更改为您要使用的表格:
#"Append Query" = Table.Combine({#"Removed Columns", Your_Table})
in
#"Append Query"
答案 2 :(得分:0)
假设你有某种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