共用方式為


Power Query 中查詢評估與查詢摺疊的概述

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

Power Query M 指令碼 (Power Query M script)

任何查詢,不論是由Power Query建立、你在進階編輯器中手動撰寫,或是使用空白文件輸入,都包含 Power Query M 公式語言 的函式與語法。 這個查詢會被 Power Query 引擎解讀並評估,以輸出結果。 M 文稿可作為評估查詢所需的一組指示。

小提示

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

建立 M 腳本最常見的方式是使用 Power Query 編輯器。 例如,當你連接到資料來源,例如SQL Server資料庫時,會注意到螢幕右側有一個叫做applied steps的區塊。 本節會顯示查詢中使用的所有步驟或轉換。 從這個角度來看,Power Query 編輯器作為介面,幫助你建立適合的 M 腳本來完成你想要的轉換,並確保你使用的程式碼是有效的。

備註

M 腳本在 Power Query 編輯器中用於:

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

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

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

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

這組步驟名稱是方便瀏覽 Power Query 為你建立的 M 腳本的方式。 有數種方式可以檢視完整的 M 腳稿。 在Power Query中,你可以在View分頁中選擇進階編輯器。你也可以在Home分頁中,從Query群組中選擇進階編輯器。在某些版本的 Power Query 中,你也可以透過進入 View 分頁,從 Layout 群組中,選擇 Script view>Query script,來更改公式列的視圖以顯示查詢腳本。

包含完整 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 script 也指的是 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 引擎評估。 這個優化過程稱為query folding,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 內的轉換引擎(又稱為 mashup 引擎)會執行無法回折或卸載至資料來源的轉換。
  7. 衍生自上一個點的結果會載入至目的地。

備註

根據 M 腳本中所使用的轉換與資料來源,Power Query 會決定是串流還是緩衝接收資料。

查詢折疊概觀

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

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

此操作通常能比從資料來源提取所有必要資料並在 Power Query 引擎中執行所有需要的轉換,更快速地執行查詢。

當你使用 get data experience 時,Power Query 會引導你完成最終連結資料來源的過程。 在此過程中,Power Query 使用一系列 M 語言中的函式,分類為 存取資料函數。 這些特定函式會使用機制和通訊協定,使用數據源可以理解的語言來聯機到您的數據源。

不過,查詢中的後續步驟是查詢折疊機制嘗試優化的步驟或轉換。 接著它會檢查這些資料是否可以卸載到你的資料來源,而不是用 Power Query 引擎處理。

這很重要

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

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

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

備註

查詢摺疊機制主要用於結構化資料來源的連接器,如但不限於 SQL ServerOData Feed。 在優化階段,引擎有時會在查詢中重新排序步驟。

使用擁有更多處理資源且具備查詢摺疊功能的資料來源,可以加快查詢載入時間,因為處理是在資料來源而非 Power Query 引擎進行。