共用方式為


原生查詢中的查詢折疊

在 Power Query 中,你可以定義一個原生查詢,並對你的資料來源執行。 「使用原生資料庫查詢從資料庫匯入資料」這篇文章說明了如何利用多個資料來源進行此過程。 但使用該文章中描述的流程後,你的查詢無法利用任何後續查詢步驟的查詢折疊。

本文展示了一種替代方法,利用 Value.NativeQuery 函式針對你的資料來源建立原生查詢,並保持查詢摺疊機制在後續查詢階段保持活躍。

備註

我們建議您閱讀 有關查詢摺疊查詢摺疊指標 的文件,以更好地理解本文所使用的概念。

支援的資料連接器

以下節節所述的方法適用於以下資料連接器:

從資料來源連接至目標

備註

為了展示這個過程,本文使用 SQL Server 連接器和 AdventureWorks2019 範例資料庫。 不同連接器的使用體驗可能有所不同,但本文將展示如何在支援連接器上啟用查詢摺疊功能,取代原生查詢的基本原理。

連接資料來源時,重要的是你要連接到你想執行原生查詢的節點或層級。 以本文的例子來說,該節點是伺服器內部的資料庫層級。

這是 SQL Server 本地實例中連接 AdventureWorks2019 資料庫連線設定對話框的截圖。

在你設定好連線設定並提供連線憑證後,資料來源的導航對話框就會打開。 導航對話框包含所有可連接的物件。

從這個清單中,你需要選擇執行原生查詢的物件(也就是目標)。 在這個例子中,該物件是資料庫層級。

在 Power Query 的導覽視窗中,選取並長按(或右鍵點擊)導覽視窗中的資料庫節點,並選擇 「資料轉換 」選項。 選擇此選項後,會建立一個新的資料庫整體檢視查詢,這是你執行原生查詢所需的目標。

選擇資料的截圖,使用者在導覽器中右鍵點擊資料庫節點,並強調「轉換資料」。

當你的查詢進入 Power Query 編輯器後,只有 Source 步驟會顯示在 Applied 步驟的窗格中。 此步驟包含一個表格,包含資料庫中所有可用物件,類似於導航視窗中顯示的物件。

只有來源步驟的查詢截圖。

使用 Value.NativeQuery 函式

此流程的目標是執行以下 SQL 程式碼,並透過 Power Query 套用更多可折疊回原始碼的轉換。

SELECT DepartmentID, Name FROM HumanResources.Department WHERE GroupName = 'Research and Development'

第一步是定義正確的目標,在這裡是執行 SQL 程式碼的資料庫。 當步驟有正確目標後,你可以選擇該步驟——在此例中是「已套用步驟」中的來源——然後在公式列中選擇效果按鈕來新增自訂步驟。 在此範例中,將公式 Source 替換為以下公式:

Value.NativeQuery(Source, "SELECT DepartmentID, Name FROM HumanResources.Department WHERE GroupName = 'Research and Development'  ", null, [EnableFolding = true])

此公式最重要的組成部分是使用函數第四參數的可選記錄,該參數將 EnableFolding 記錄欄位設 為 true

這是使用Value.NativeQuery函式與明確SQL查詢的新自訂步驟公式截圖。

備註

你可以在 官方文件文章中閱讀更多關於 Value.NativeQuery 函式的資訊。

輸入公式後,會顯示警告,要求你啟用原生查詢以執行特定步驟。 選擇繼續,此步驟將被評估。

這個 SQL 陳述式會產生一個只有三列兩欄的表格。

截圖,顯示原生查詢結果與目標資料庫的評估。

測試查詢摺疊

要測試查詢的摺疊情況,你可以嘗試對任一欄位套用篩選器,看看「套用步驟」區塊的查詢摺疊指示器是否顯示該步驟已摺疊。 在這種情況下,你可以將 DepartmentID 欄位的值篩選成不等於二的值。

這張截圖示範如何篩選 DepartmentID 欄位,只包含不等於二的值。

新增這個篩選器後,你可以檢查查詢摺疊指示器是否顯示這個新步驟的查詢摺疊仍在進行。

在已套用步驟部分,篩選步驟顯示為已折疊回資料來源。

為了進一步驗證傳送到資料來源的查詢,你可以選擇並長按(或右鍵點擊)篩選列 步驟,然後選擇 檢視查詢計畫 選項,以檢查該步驟的查詢計畫。

在查詢計畫檢視中,你可以看到一個名為 Value.NativeQuery 的節點,裡面有一個 「查看詳細 資料」的超連結。 你可以選擇這個超連結,查看傳送到 SQL Server 資料庫的精確查詢。

原生查詢會包裹在另一個 SELECT 陳述句上,建立原始的子查詢。 Power Query 會盡力根據所用轉換和原生查詢,建立最優的查詢。

篩選列步驟的查詢計畫截圖。

小提示

對於因無法執行查詢摺疊而產生錯誤的情況,我們建議你嘗試以原始原生查詢的子查詢來驗證步驟,以檢查是否有語法或上下文衝突。