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 中的步驟名稱周圍,但這些字元不會顯示在套用的步驟中。 例如 #"Kept top rows"
,由於這些額外的字元,其分類為 引號標識符 。 引號標識碼可用來允許任何零個或多個 Unicode 字元序列做為標識碼,包括關鍵詞、空格符、批註、運算子和標點符號。 若要深入瞭解 M 語言中的識別碼 ,請移至 語匯結構。
您透過Power Query 編輯器對查詢所做的任何變更,都會自動更新查詢的 M 腳稿。 例如,使用上一個影像作為起點,如果您將 [保留的前 20 個數據列] 步驟名稱變更為前 20 個數據列,此變更就會在腳本檢視中自動更新。
雖然我們建議您使用Power Query 編輯器為您建立所有或大部分的 M 腳稿,但您可以手動新增或修改 M 腳稿的片段。 若要深入瞭解 M 語言,請移至 M 語言的官方文件網站。
注意
M 文稿也稱為 M 程式代碼,是用於任何使用 Power Query M 語言的程式代碼。 在本文的內容中,M 腳本也會參考 Power Query 查詢內找到的程式代碼,並可透過進階編輯器視窗或公式列中的腳本檢視來存取。
Power Query 中的查詢評估
下圖會探索Power Query 中評估查詢時所發生的程式。
- 在進階編輯器內找到的 M 腳本會提交至 Power Query 引擎。 也包含其他重要資訊,例如認證和數據源隱私權等級。
- Power Query 會決定需要從數據源擷取哪些數據,並將要求提交至數據源。
- 數據源會藉由將要求的數據傳送至 Power Query,以回應來自 Power Query 的要求。
- Power Query 會從數據源接收傳入數據,並在必要時使用 Power Query 引擎執行任何轉換。
- 衍生自上一個點的結果會載入至目的地。
注意
雖然此範例示範具有 SQL 資料庫 做為數據源的查詢,但概念會套用至具有或不含數據源的查詢。
當 Power Query 讀取您的 M 腳稿時,它會透過優化程式執行腳本,以更有效率地評估您的查詢。 在此程式中,它會決定可將查詢中的哪些步驟(轉換)卸除至您的數據源。 它也會決定使用Power Query引擎評估哪些其他步驟。 此優化程式稱為 查詢折疊,Power Query 會嘗試將可能執行推送至數據源,以優化查詢的執行。
重要
系統會遵循 Power Query M 公式語言的所有規則(也稱為 M 語言)。 最值得注意的是, 延遲評估 在優化程序期間扮演著重要的角色。 在此程式中,Power Query 會瞭解需要評估查詢的特定轉換。 Power Query 也瞭解其他轉換不需要評估哪些轉換,因為它們不需要在您的查詢輸出中。
此外,當涉及多個來源時,評估查詢時,會考慮每個數據源的數據隱私權層級。 詳細資訊: 數據隱私權防火牆的幕後
下圖示範此優化程式中所發生的步驟。
- 在進階編輯器內找到的 M 腳本會提交至 Power Query 引擎。 也會提供其他重要資訊,例如認證和數據源隱私權等級。
- 查詢折疊機制會將元數據要求提交至數據源,以判斷數據源、數據表架構、數據源上不同數據表之間的關聯性等功能。
- 根據收到的元數據,查詢折疊機制會決定要從數據源擷取哪些資訊,以及 Power Query 引擎內需要執行哪些轉換集。 它會將指示傳送至另外兩個元件,這些元件會負責從數據源擷取數據,並視需要轉換 Power Query 引擎中的傳入數據。
- Power Query 的內部元件收到指示之後,Power Query 會使用數據源查詢將要求傳送至數據源。
- 數據源會從 Power Query 接收要求,並將數據傳送至 Power Query 引擎。
- 一旦數據位於Power Query內,Power Query內的轉換引擎(也稱為混搭引擎)會執行無法折疊或卸除至數據源的轉換。
- 衍生自上一個點的結果會載入至目的地。
注意
根據 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 Server 和 OData 摘要。 在優化階段,引擎有時會在查詢中重新排序步驟。
利用具有更多處理資源的數據源,且具有查詢折疊功能,可以加速查詢載入時間,因為處理發生在數據源,而不是 Power Query 引擎。
相關內容
如需查詢折疊機制三個可能結果的詳細範例,請移至 查詢折疊範例。
如需在 [ 套用的步驟 ] 窗格中找到的查詢折迭指標的相關信息,請移至 查詢折迭指標