2016-11-29 9 views
3

私は最近、さまざまなソースからデータを取得するためにPowerQueryに切り替えました。既存のデータを "masterEntries"というテーブルにロードしました。Power Query to Existing Table

「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"にデータを追加したいと思います。

私はVBAではなくPowerQueryでこれを実行しようとしています。 PowerQueryには、2つ以上のクエリ/結果を新しいテーブルに結合できる「クエリの追加機能」があります。

上記のクエリ( "latestEntries")から結果のテーブルを既存のテーブル( "masterEntries")に追加する新しいクエリでも可能です。

PowerQueryでどのように行うことができますか?

EDIT

  1. 私の元データ( "masterEntries")は、手動でロードしました。 400K以上のレコードを持つ大きなテーブルです。私はそれが助けに行く場合は、クエリを使用して読み込むことができます。
  2. 「latestEntries」が実行されるたびに、「masterEntries」にあるレコードがチェックされ、異なるソースから新しいエントリのみがフェッチされます。
  3. パワークエリーのAppend Queryメソッドは単なる接続です。それはレコードを永久に追加しません。つまり、「latestEntries」が新しいレコードセットを取得すると、「masterEntries」は、「latestEntries」の以前の実行にあったレコードを失います。
+0

あなたが第一のデータソースと負荷への接続を作成する必要がありますそれ。その後、2番目の接続を作成する必要があります。編集が終了したら、 'Home'リボンから' Append Queries'に行き、1st connectionを選択してください。次に、データをソートする必要があります。非常に簡単なプロセス、彼らはそれで素晴らしい仕事をしてきました。 – zipa

+0

2番目の接続は、新しいテーブルにデータをロードします。既存のテーブルにデータを追加しません。私は、統合されたデータを持つ新しいテーブルを望んでいません。もしあなたが間違っていたら私を訂正してください。 – eshwar

+0

それはありますが、 'Append Queries'を適用すると、名前が示すとおり正確に実行され、追加された解決策が得られます。 – zipa

答えて

0

あなたはちょうどあなたが使用したいテーブルにYour_Tableの名前を変更し、このような何かを追加する必要があります

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

これは、結合されたデータを新しいテーブルにロードします。私の必要性は、あなたがYour_Tableと呼ぶものに結合したデータを持つことです。 – eshwar

+0

あなたは 'Close&Load'をしましたか? – zipa

+0

投稿したクエリは、 "latestEntries"という新しいテーブルにデータを読み込みます。あなたの提案は、完全なデータセットを持つ "latestEntries"テーブルにのみなります。 – eshwar

1

をこれは、ビット「増分ロード」の要求のように聞こえます。これは現在、ExcelのPower Queryではサポートされていません。あなたのlinkbackテーブルが1,1澪行を超える場合は、ここで説明したように、あなたはJSON-圧縮を使用することができますhttp://ms-olap.blogspot.de/2015/05/incremental-data-loads-in-microsoft.html

:この問題を回避するには、ここで説明-tableのような「linkback」を経由して行くことですhttp://www.thebiccountant.com/2016/12/06/how-to-store-tables-longer-than-11-mio-rows-in-excel/ しかし注意して、そのこのコストパフォーマンス。

どちらの方法もパフォーマンスが「コスト」なので、実際に重い変換(またはWebからの長いロード)の繰り返し実行を「保存」すれば、この手法は理にかなっています。

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