共用方式為


Power Query 的查詢計劃

Power Query 的查詢計劃是一項功能,可讓您更清楚地檢視查詢的評估。 有助於判斷特定查詢為何無法在特定步驟折疊。

透過實際範例,本文示範使用查詢計劃功能來檢閱查詢步驟的主要使用案例和潛在優點。 本文中使用的範例是使用適用於 Azure SQL Server 的 AdventureWorksLT 範例資料庫所建立,您可以從 AdventureWorks 範例資料庫下載。

備註

Power Query 的查詢計劃功能僅適用於 Power Query Online。

建議的流程查詢計劃功能圖表,方法是檢閱查詢摺疊指標、檢閱所選步驟的查詢計劃,以及實作從查詢計劃檢閱衍生的任何變更。

本文分成一系列建議步驟,以解譯查詢計劃。 這些步驟如下:

  1. 檢閱查詢折迭指標
  2. 選取查詢步驟以檢閱其查詢計劃
  3. 實作查詢的變更

使用下列步驟,在您自己的 Power Query Online 環境中建立查詢。

  1. Power Query - 選擇資料源,選擇 空白查詢

  2. 將空白查詢的文稿取代為下列查詢。

    let
        Source = Sql.Database("servername", "database"),
        Navigation = Source{[Schema = "Sales", Item = "SalesOrderHeader"]}[Data],
        #"Removed other columns" = Table.SelectColumns(
            Navigation,
            {
                "SalesOrderID",
                "OrderDate",
                "SalesOrderNumber",
                "PurchaseOrderNumber",
                "AccountNumber",
                "CustomerID",
                "TotalDue"
            }
        ),
        #"Filtered rows" = Table.SelectRows(#"Removed other columns", each [TotalDue] > 1000),
        #"Kept bottom rows" = Table.LastN(#"Filtered rows", 5)
    in
        #"Kept bottom rows"
    
  3. servernamedatabase 變更為您自己的環境的正確名稱。

  4. (選擇性)如果您嘗試連線到內部部署環境的伺服器和資料庫,請務必設定該環境的閘道。

  5. 選取 下一步

  6. 在 Power Query 編輯器中,選取 [ 設定連線 ],並將認證提供給您的數據源。

備註

如需連線到 SQL Server 的詳細資訊,請移至 SQL Server 資料庫

遵循這些步驟之後,您的查詢看起來會像下圖中的查詢。

已啟用查詢摺疊指標之範例查詢的螢幕擷取畫面。

此查詢會連線到 SalesOrderHeader 資料表,並從 TotalDue 值高於 1000 的最後五個訂單中選取幾個資料行。

備註

本文使用簡化的範例來展示這項功能,但本文所述的概念適用於所有查詢。 建議您先熟悉查詢折疊,再閱讀查詢計劃。 若要深入了解查詢折疊,請移至 查詢折疊基本概念

1.檢閱查詢折迭指標

備註

閱讀本節之前,建議您先檢閱 有關查詢折迭指標的文章。

此程式中的第一個步驟是檢閱您的查詢,並密切關注查詢折疊指標。 目標是檢閱標示為未折疊的步驟。 然後,您可以藉此檢視對整體查詢的變更是否可以使這些轉換完全簡化。

[套用的步驟] 窗格內範例查詢的查詢摺疊指標螢幕擷取畫面。

在此範例中,唯一無法折疊的步驟是 [保留底部數據列],這很容易透過 未折疊 的步驟指標來識別。 此步驟也是查詢的最後一個步驟。

現在的目標是檢閱此步驟,並瞭解要回傳至數據源的內容,以及無法回傳的內容。

2.選取查詢步驟以檢閱其查詢計劃

您已將 [保留底部數據列 ] 步驟識別為感興趣的步驟,因為它不會折回數據源。 以滑鼠右鍵按兩下步驟,然後選取 [ 檢視查詢計劃] 選項。 此動作會顯示新的對話框,其中包含所選步驟之查詢計劃的圖表。

查詢計劃對話方塊的螢幕擷取畫面,其中顯示查詢計劃的圖表檢視,其節點由線條連接。

Power Query 會嘗試利用延遲評估和查詢摺疊來優化您的查詢,如 查詢摺疊基本概念中所述。 此查詢計劃代表您的 M 查詢被優化並轉譯為發送至數據來源的原生查詢。 它也包含Power Query Engine 所執行的任何轉換。 節點出現的順序會遵循查詢的順序,從您查詢的最後一個步驟或輸出開始,而查詢則以圖表最左邊表示。 在此情況下,代表保留底部列步驟的是 Table.LastN 節點。

在對話框的底部,有一個包含圖示的工具列,協助您放大或縮小查詢計劃檢視,以及其他按鈕可協助您管理檢視。 針對上一個影像,此列的 [適合檢視] 選項是用來更了解節點。

查詢計劃對話方塊的螢幕擷取畫面,其中節點已放大,以便更清楚檢視。

備註

查詢計劃代表優化的計劃。 當引擎評估查詢時,它會嘗試將所有運算元折疊成數據源。 在某些情況下,為了達到最佳折疊效果,它甚至可能會對步驟進行一些內部重新排序。 考慮到此過程,此優化查詢計劃中保留的節點或運算子通常包含「折疊」數據源查詢。 任何無法執行折疊的運算符都會在本地進行評估。

從其他節點中識別折疊節點

您可以將此圖表中的節點識別為兩個群組:

  • 折疊節點:此節點可以是 Value.NativeQuery 或 「資料源」節點,例如 Sql.Database。 這些節點也可以使用其函式名稱下的標籤 遠端 來識別。
  • 非折疊節點:其他數據表運算子,例如無法折疊的Table.SelectRowsTable.SelectColumns以及其他函式。 這些節點也可以透過標籤 「完整掃描 」和「 串流」來識別。

下圖顯示紅色矩形內的折疊節點。 其餘節點無法折疊回數據源。 您必須檢閱其餘節點,因為目標是嘗試讓這些節點折回數據源。

對話框底部的 [查詢計劃檢視] 控制項的螢幕擷取畫面,其中選取了 [適合顯示] 選項。

您可以選取某些節點底部的 [ 檢視詳細資料 ] 以顯示擴充資訊。 例如,節點 Value.NativeQuery 的詳細資訊顯示傳送至數據源的原生查詢(在 SQL 中)。

查詢計劃中 Value.NativeQuery 節點詳細數據檢視的螢幕擷取畫面。

此處顯示的查詢可能與傳送至資料來源的查詢不完全相同,但這是一個很好的近似值。 在此情況下,它會精確地告訴您從 SalesOrderHeader 資料表中查詢了哪些欄。 然後,它會如何使用 TotalDue 欄位篩選該數據表,只取得該欄位值大於 1000 的數據列。 Power Query 引擎在本機計算其旁邊的節點 Table.LastN,因為它無法折疊。

備註

運算子可能與查詢文本中使用的函式不完全相符。

檢閱未折疊的節點,並考慮讓轉換折疊的動作

您現在已判斷哪些節點無法折疊,並且可以在本機進行評估。 此案例只有 Table.LastN 節點,但在其他案例中,可能會有更多節點。

目標是將變更套用至查詢,為使步驟合併。 您可能會實作的一些變更可能包括從重新排列步驟到套用更清晰且直接針對數據源的替代邏輯。 這並不表示所有查詢和所有作業都可以通過進行某些變更來使其可折疊。 但最好透過反覆試驗判斷您的查詢是否可以重新組合。

由於數據源是 SQL Server 資料庫,如果目標是從數據表中擷取最後五個訂單,則最好是利用 SQL 中的 TOPORDER BY 子句。 由於 SQL 中沒有 BOTTOM 子句, Table.LastN 因此 PowerQuery 中的轉換無法轉譯為 SQL。 您可以移除Table.LastN步驟,然後將它取代為:

  • 表中對 SalesOrderID 欄進行的降序排序步驟,因為此欄決定了訂單的優先順序和最後輸入的順序。
  • 選取資料表排序後的前五個數據列,此轉換會完成與 [保留] 底端數據列Table.LastN) 相同。

這個替代方式相當於原始查詢。 雖然理論上這個替代方案似乎不錯,但您需要進行變更,以查看此替代方式是否使這個節點完全折疊回數據源。

3.對查詢進行變更

實作上一節所討論的替代方法:

  1. 關閉 [查詢計劃] 對話框,然後返回 Power Query 編輯器。

  2. 移除 保留底部行 步驟。

  3. 依遞減順序排序 SalesOrderID 欄。

    螢幕擷取畫面顯示如何使用自動篩選功能表以遞減順序排序 SalesOrderID 資料行。

  4. 選取資料預覽檢視左上角的表格圖示,然後選擇 [保留頂端資料列] 的選項。 在對話框中,傳遞數位 5 做為自變數,然後按 [確定]。

    螢幕擷取畫面顯示如何使用表格操作功能表選取 [保留頂層資料列] 轉換,以僅保留前五資料列。

實施變更之後,請再次檢查查詢折疊指標,並查看其是否顯示折疊指標。

螢幕擷取畫面顯示所有查詢摺疊指示器都是綠色,並顯示它們可以摺疊。最終表格提供相同的列,但順序不同。

現在是時候檢閱最後一個步驟的查詢計劃,現在是 [ 保留最上層資料列]。 現在只有折疊的節點。 選取 [ 檢視詳細數據 ] 底下 Value.NativeQuery ,以確認哪個查詢正在傳送至資料庫。

對查詢進行變更之後,新查詢計劃的螢幕擷取畫面,現在只會顯示摺疊的節點,而 Value.NativeQuery 會顯示評估查詢的完整 SQL 陳述式。

盡管本文建議您應該考慮哪些替代方案,但其主要目標是讓您學習如何使用查詢計畫來探討查詢折疊。 本文還提供對傳送至您的數據源內容的可見性以及本機完成的轉換。

您可以調整程式代碼,以查看它在查詢中的影響。 藉由使用查詢折迭指標,您也更清楚哪些步驟會防止查詢折疊。