原生查詢上的查詢折疊
在 Power Query 中,您可以定義原生查詢,並針對數據源執行它。 使用原生資料庫查詢從資料庫匯入數據一文說明如何使用多個數據源來執行此程式。 但是,藉由使用該文章中所述的程式,您的查詢不會利用後續查詢步驟的任何查詢折疊。
本文示範使用 Value.NativeQuery 函式針對數據源建立原生查詢的替代方法,並將查詢折疊機制保留在查詢後續步驟的作用中。
支援的數據連接器
下一節所述的方法適用於下列資料連接器:
從數據源聯機到目標
注意
為了展示此程式,本文使用 SQL Server 連接器和 AdventureWorks2019 範例資料庫。 體驗可能會因連接器到連接器而有所不同,但本文會展示如何針對支援的連接器啟用原生查詢的查詢折疊功能的基本概念。
連接到數據源時,請務必連線到您想要執行原生查詢的節點或層級。 針對本文中的範例,該節點是伺服器內的資料庫層級。
在您定義連線設定並提供連線的認證之後,數據源的瀏覽對話框隨即開啟。 瀏覽對話框包含您可以連線的所有可用物件。
從此清單中,您必須選取執行原生查詢的物件(也稱為目標)。 在此範例中,該對像是資料庫層級。
在 Power Query 的導覽器視窗中,選取並按住 [導覽器] 視窗中的資料庫節點,然後選取 [轉換數據 ] 選項。 選取此選項會建立資料庫整體檢視的新查詢,這是您需要執行原生查詢的目標。
一旦您的查詢降落在 Power Query 編輯器中,只有 [套用的步驟] 窗格中應該會顯示 [來源 ] 步驟。 此步驟包含一個數據表,其中包含資料庫中所有可用對象的數據表,類似於在 [導覽器] 視窗中顯示它們的方式。
使用 Value.NativeQuery 函式
此程式的目標是執行下列 SQL 程式代碼,並使用可折疊回來源的 Power Query 套用更多轉換。
SELECT DepartmentID, Name FROM HumanResources.Department WHERE GroupName = 'Research and Development'
第一個步驟是定義正確的目標,在此情況下是執行 SQL 程式代碼的資料庫。
一旦步驟有正確的目標,您可以選取該步驟,在此案例中為 [套用步驟] 中的 [來源],然後選取公式列中的 fx 按鈕以新增自定義步驟。 在此範例中,將 Source
公式取代為下列公式:
Value.NativeQuery(Source, "SELECT DepartmentID, Name FROM HumanResources.Department WHERE GroupName = 'Research and Development' ", null, [EnableFolding = true])
此公式最重要的元件是針對函式的第四個參數使用選擇性記錄,該 函式的 EnableFolding 記錄欄位設定為 true。
注意
您可以從官方檔文章深入瞭解 Value.NativeQuery 函式。
輸入公式之後,會顯示警告,要求您啟用原生查詢以針對特定步驟執行。 選取 [繼續],以評估此步驟。
此 SQL 語句會產生只有三個數據列和兩個數據行的數據表。
測試查詢折疊
若要測試查詢的查詢折疊,您可以嘗試將篩選套用至任何數據行,並查看套用步驟一節中的查詢折疊指標是否顯示為折疊步驟。 在此情況下,您可以篩選 DepartmentID 數據行,使值不等於 2。
新增此篩選之後,您可以檢查查詢折迭指標是否仍會顯示在這個新步驟中發生的查詢折疊。
若要進一步驗證要傳送至數據源的查詢,您可以選取並按住 [篩選的數據列] 步驟,然後選取 [檢視查詢計劃] 選項,以檢查該步驟的查詢計劃。
在查詢計劃檢視中,您可以看到名稱為 Value.NativeQuery 的節點具有 檢視詳細 數據超連結。 您可以選取此超連結,以檢視傳送至 SQL Server 資料庫的確切查詢。
原生查詢會包裝在另一個SELECT語句周圍,以建立原始的子查詢。 Power Query 會盡最大努力建立最佳查詢,因為所使用的轉換和提供的原生查詢。
提示
針對因為查詢折疊而無法收到錯誤的案例,建議您嘗試將步驟驗證為原始原生查詢的子查詢,以檢查是否有任何語法或內容衝突。