共用方式為


Power Query 中的查詢評估和查詢折疊概觀

本文提供如何處理 M 查詢並將其轉換成數據源要求的基本概觀。

Power Query M 腳本

任何查詢,無論是由Power Query所建立、由您在進階編輯器中手動撰寫,還是使用空白文件輸入,都是由 Power Query M 公式語言中的函式和語法所組成。 此查詢會由Power Query引擎解譯和評估,以輸出其結果。 M 文稿可作為評估查詢所需的一組指示。

小提示

您可以將 M 腳稿視為描述如何準備數據的配方。

建立 M 腳稿最常見的方式是使用 Power Query 編輯器。 例如,當您連線到數據源,例如 SQL Server 資料庫時,請注意畫面右側有一個稱為 已套用步驟的區段。 本節會顯示查詢中使用的所有步驟或轉換。 從這個意義上說,Power Query 編輯器會做為介面,協助您為之後的轉換建立適當的 M 腳本,並確保您使用的程式代碼有效。

備註

M 文稿會在 Power Query 編輯器中使用,以:

  • 將查詢顯示為一系列步驟,並允許建立或修改新的步驟。
  • 顯示圖表檢視。

已套用步驟和數據預覽檢視的螢幕快照。

上一個影像強調套用的步驟區段,其中包含下列步驟:

  • 來源:建立數據源的連接。 在此情況下,它是 SQL Server 資料庫的連線。
  • 導覽:巡覽至資料庫中的特定數據表。
  • 移除其他欄位:選擇要從數據表中保留的欄位。
  • 已排序的數據列:使用一或多個數據行來排序數據表。
  • 保留頂端數據列:篩選數據表,只保留數據表頂端的一些數據列。

這組步驟名稱是檢視 Power Query 為您建立的 M 腳本的易記方式。 有數種方式可以檢視完整的 M 腳稿。 在 Power Query 中,您可以在 [檢視] 索引標籤中選取 [進階編輯器]。您也可以從 [常用] 索引標籤中的 [查詢] 群組選取 [進階編輯器]。在某些版本的 Power Query 中,您也可以移至 [檢視] 索引標籤,然後從 [版面配置] 群組中選取 [腳本檢視],以變更公式列的檢視,顯示 [查詢腳本]。

包含完整 M 腳稿和所套用步驟對應名稱的螢幕快照。

套用的步驟 窗格中找到的大部分名稱,在 M 腳本中也被使用。 查詢的步驟是使用 M 語言中稱為 標識符的內容 來命名。 有時候額外的字元會包裝在 M 中的步驟名稱周圍,但這些字元不會顯示在套用的步驟中。 例如 #"Kept top rows",由於這些額外的字元,其分類為 引號標識符 。 引號標識碼可用來允許任何零個或多個 Unicode 字元序列做為標識碼,包括關鍵詞、空格符、註解、運算子和標點符號。 若要深入瞭解 M 語言中的 識別碼 ,請移至 語匯結構

您透過Power Query 編輯器對查詢所做的任何變更,都會自動更新查詢的 M 腳稿。 例如,使用上一個影像作為起點,如果您將 [保留的前 20 個數據列] 步驟名稱變更為 前 20 個數據列,此變更就會在腳本檢視中自動更新。

顯示步驟名稱變更為前 20 行的螢幕擷圖,這也更新了 M 腳本。

雖然我們建議您使用Power Query 編輯器為您建立所有或大部分的 M 腳稿,但您可以手動新增或修改 M 腳稿的片段。 若要深入瞭解 M 語言,請移至 M 語言的官方文件網站

備註

M 文稿,也稱 M 程式碼,是指使用 Power Query M 語言的任何程式碼。 在本文的內容中,M 腳本也會參考 Power Query 查詢內找到的程式代碼,並可透過進階編輯器視窗或公式列中的腳本檢視來存取。

Power Query 中的查詢評估

下圖探討在 Power Query 中評估查詢時所發生的過程。

顯示從 M 文稿到最終輸出之查詢評估路徑的圖表。

  1. 在進階編輯器內找到的 M 腳本會提交至 Power Query 引擎。 也包含其他重要資訊,例如認證和數據源隱私權等級。
  2. Power Query 會決定需要從數據源擷取哪些數據,並將要求提交至數據源。
  3. 數據源會藉由將要求的數據傳送至 Power Query,以回應來自 Power Query 的要求。
  4. Power Query 會從數據源接收傳入數據,並在必要時使用 Power Query 引擎執行任何轉換。
  5. 衍生自上一個點的結果會載入至目的地。

備註

雖然此範例會展示 SQL Database 做為數據源的查詢,但概念適用於具有或不含數據源的查詢。

當 Power Query 讀取您的 M 腳稿時,它會透過優化程式執行腳本,以更有效率地評估您的查詢。 在此過程中,它會決定可將查詢中的哪些步驟(轉換)委託至您的資料來源。 它也會決定需使用 Power Query 引擎評估的其他步驟。 此優化程式稱為 查詢折疊,Power Query 會嘗試將可能執行推送至數據源,以優化查詢的執行。

這很重要

系統會遵循 Power Query M 公式語言的所有規則(也稱為 M 語言)。 最值得注意的是, 延遲評估 在優化程序期間扮演著重要的角色。 在這個過程中,Power Query 會瞭解查詢需要評估的特定轉換操作。 Power Query 也可以判斷哪些其他轉換不需要被評估,因為它們不會影響查詢結果的輸出。

此外,當涉及多個來源時,評估查詢時,會考慮每個數據源的數據隱私權層級。 詳細資訊: 數據隱私權防火牆的幕後

下圖示範此優化程式中所發生的步驟。

顯示查詢評估期間優化程式的圖表。

  1. 在進階編輯器內找到的 M 腳本會提交至 Power Query 引擎。 也會提供其他重要資訊,例如認證和數據源隱私權等級。
  2. 查詢折疊機制會將元數據要求提交至數據源,以判斷數據源、數據表架構、數據源上不同數據表之間的關聯性等功能。
  3. 根據收到的元數據,查詢折疊機制會決定要從數據源擷取哪些資訊,以及 Power Query 引擎內需要執行哪些轉換集。 它會將指示傳送至另外兩個元件,這些元件會負責從數據源擷取數據,並視需要轉換 Power Query 引擎中的傳入數據。
  4. Power Query 的內部元件收到指示之後,Power Query 會使用數據源查詢將要求傳送至數據源。
  5. 數據源會從 Power Query 接收要求,並將數據傳送至 Power Query 引擎。
  6. 一旦數據進入 Power Query,Power Query 的轉換引擎(亦稱為綜合引擎)便會執行那些無法折返或卸載到數據來源的轉換。
  7. 衍生自上一個點的結果會載入至目的地。

備註

根據 M 腳稿中使用的轉換和數據源,Power Query 會判斷它是否會串流或緩衝傳入數據。

查詢折疊概觀

查詢折疊的目標是將查詢的評估卸除或推送至可計算查詢轉換的數據源。

查詢折疊機制藉由將 M 腳本轉譯為數據源可以解譯和執行的語言來完成此目標。 然後,它會將評估推送至您的數據源,並將該評估的結果傳送至 Power Query。

此作業通常提供比從數據源擷取所有必要的數據,以及執行 Power Query 引擎中所需的所有轉換更快的查詢執行速度。

當您使用 取得資料功能時,Power Query 會引導您一步步完成連接到資料來源的流程。 這樣做時,Power Query 會使用 M 語言中分類為 存取數據函式的一系列函式。 這些特定函式會使用機制和通訊協定,使用數據源可以理解的語言來聯機到您的數據源。

不過,查詢中的後續步驟是查詢折疊機制嘗試優化的步驟或轉換。 然後,它會檢查是否可以移轉至您的資料來源,而不是使用 Power Query 引擎進行處理。

這很重要

所有數據源函式通常顯示為查詢的 [來源 ] 步驟,會以原生語言查詢數據源的數據。 查詢折疊機制會在數據源函式之後套用至查詢的所有轉換上使用。 然後,您可以將它們翻譯並合併成單一數據源查詢,或者將多個轉換卸載到數據源。

根據查詢的結構,查詢折疊機制可能有三個可能的結果:

  • 完整查詢折疊:當所有查詢轉換都推送回數據源時,Power Query 引擎會進行最少的處理。
  • 部分查詢折疊:當您的查詢中只有少數轉換,而非全部時,可以推送回數據源。 在此情況下,您的轉換子集只會在數據源完成,而其餘的查詢轉換則發生在Power Query引擎中。
  • 沒有查詢折疊:當查詢包含無法轉譯為數據源原生查詢語言的轉換時,可能是因為不支援轉換或連接器不支援查詢折疊。 在此情況下,Power Query 會從數據源取得原始數據,並使用 Power Query 引擎在 Power Query 引擎層級處理所需的轉換,以達到您想要的輸出。

備註

查詢折迭機制主要在針對結構化數據源的連接器中可用,例如,但不限於 Microsoft SQL ServerOData 摘要。 在優化階段,引擎有時會在查詢中重新排序步驟。

使用具有更多處理資源的數據源,且具有查詢折疊功能,可以加速查詢載入時間,因為處理發生在數據源,而不是 Power Query 引擎。

如需查詢折疊機制三個可能結果的詳細範例,請移至 查詢折疊範例

如需在 [ 套用的步驟 ] 窗格中查看查詢折迭指標的資訊,請移至 查詢折迭指標