2017-10-09 301 views
0

業務案例:
我有一個Excel電子表格中的關鍵ID列表。我想使用Power Query將這些ID與SQL Server數據庫中的詳細信息表一起使用。在Excel Power Query中針對SQL Server合併本地數據集

問題
目前使用Power查詢我只知道如何導入整個表,這是超過100萬點的記錄,然後做了左連接上它針對的目標ID的本地表中的現有查詢。

我想要做的是在原始查詢中發送這組ID,所以我不回拉整個表,然後過濾它。

問題
有沒有把IN子句針對類似於如下所示的本地表的例子嗎?

= Sql.Database("SQLServer001", "SQLDatabase001", 
[Query="SELECT * FROM DTree WHERE ParentID 
IN(Excel.CurrentWorkbook(){[Name="tbl_IDs"]}[Content])"]) 
+1

如果您只是創建與SQL Server表的連接,Power Query將不會恢復整個數據庫表。 然後就像合併表按鈕一樣簡單。左外是默認值。 我這樣做與連接Oracle表和數百萬行的所有時間。 – tbur

回答

1

我首先會在excel電子表格密鑰ID上建立一個「僅連接」查詢。

然後我會通過連接到SQL表開始一個新的查詢。在那個查詢中,我將添加一個合併步驟來將密鑰ID查詢作爲內部聯接(過濾器)應用。

這將下載1米行來應用過濾器,但它出奇的快,因爲這主要在內存中完成。它只會將過濾結果寫入Excel表格。

爲了提高性能,請在合併步驟之前儘可能多地過濾行和列。

+0

我相信當PQ運行在直接的SQL連接之下時,所有的M代碼都會轉換爲後端的SQL語句。所以它實際上只是運行一系列的SQL語句,而最終的查詢則不必下載整個表格。您可以右鍵單擊查詢中的某個步驟,然後單擊「查看本地查詢」選項以查看此信息。 我從來沒有能夠測試PQ如何完成這個任務,因爲它的本地PostgreSQL連接器問題... – Wedge