Power Query 是數據轉換和數據準備引擎。 Power Query 隨附用於從來源取得數據的圖形化介面,以及用於套用轉換的 Power Query 編輯器。 因為引擎可在許多產品和服務中使用,因此儲存數據的目的地取決於使用Power Query的位置。 使用 Power Query,您可以執行資料的擷取、轉換和載入 (ETL) 處理。
左側具有符號化數據源的圖表,在中央傳遞 Power Query 以進行轉換,然後移至右側的四個目的地:Microsoft Azure Data Lake Storage、Microsoft Dataverse、Microsoft Excel 和Microsoft Power BI。
使用 Power Query 來存取和轉換資料時,您可以定義一個可重複的程式(查詢),以在未來輕鬆重新整理,以取得 up-to日期數據。 如果您需要修改程式或查詢來考慮基礎數據或架構變更,您可以使用一開始定義查詢時所使用的相同互動式和直覺式體驗。
磁碟區(資料大小)、速度(變化率)和多樣性(數據源和數據圖形的廣度)
Power Query 可讓您針對整個數據集的子集運作,以定義必要的數據轉換,讓您輕鬆地篩選數據,並將數據轉換成可管理的大小。 Power Query 查詢可以手動重新整理,或利用特定產品中排程的重新整理功能(例如 Power BI),甚至是以程式設計方式重新整理(使用 Excel 物件模型)。 因為 Power Query 會針對每個來源提供數百個數據源和超過 350 種不同類型的數據轉換連線,因此您可以使用來自任何來源和任何圖形的數據。
Power Query 體驗
Power Query 用戶體驗是透過Power Query 編輯器使用者介面提供。 此介面的目標是透過與一組使用者友好的功能區、選單、按鈕與其他互動元件簡單互動,協助您套用所需的轉換。
Power Query 編輯器是主要數據準備體驗。 在編輯器中,您可以連線到各種不同的數據源,並藉由預覽數據並從 UI 選取轉換來套用數百個不同的資料轉換。 無論基礎數據源的限制為何,這些數據轉換功能在所有數據源中都是通用的。
當您藉由與 Power Query 介面的元件互動來建立新的轉換步驟時,Power Query 會自動建立執行轉換所需的 M 程式代碼,因此您不需要撰寫任何程式代碼。
目前有兩種 Power Query 體驗可供使用:
Power Query Online— 可在 Power BI 數據流、Microsoft Power Platform 數據流、Azure Data Factory 整頓數據流等整合中找到,以及更多可以透過線上網頁提供體驗的整合。
Power Query for Desktop— 可在 Power Query for Excel 和 Power BI Desktop 等整合中找到。
注意
雖然有兩個 Power Query 體驗存在,但它們在每一個案例中都提供幾乎相同的用戶體驗。
轉換
Power Query 中的轉換引擎包含許多預先建置的轉換函式,可透過 Power Query 編輯器的圖形化介面使用。 這些轉換可以像移除數據行或篩選數據列一樣簡單,也可以像使用第一個數據列做為數據表標頭一樣通用。 還有進階轉換選項,例如合併、附加、分組、樞紐和取消樞紐。
Power Query 可用於許多產品,例如 Power BI 和 Excel。 不過,在產品內使用Power Query 會將其使用量限製為僅限該特定產品。
數據流 是雲端中執行的「Power Query」體驗,且為產品無關的服務版本。 您可以使用數據流,以相同方式取得資料並轉換數據。 但是,您可以將輸出儲存在其他記憶體選項中,例如 Dataverse 或 Azure Data Lake Storage,而不是將輸出傳送至 Power BI 或 Excel。 如此一來,您就可以在其他產品和服務中使用數據流的輸出。
在任何數據轉換案例中,有一些轉換無法使用圖形化編輯器以最佳方式完成。 其中一些轉換可能需要圖形化介面目前不支援的特殊組態和設定。 Power Query 引擎在將所有 Power Query 轉換時會使用幕後的腳本語言:Power Query M 公式語言,也稱為 M。
M 語言是 Power Query 的數據轉換語言。 查詢中發生的任何項目最終都會以 M 撰寫。如果您想要使用 Power Query 引擎執行進階轉換,您可以使用進階編輯器來存取查詢的腳本,並視需要加以修改。 如果您發現使用者介面函式和轉換無法執行所需的確切變更,請使用進階編輯器和 M 語言來微調您的函式和轉換。
Power Query M
let
Source = Exchange.Contents("xyz@contoso.com"),
Mail1 = Source{[Name="Mail"]}[Data],
#"Expanded Sender" = Table.ExpandRecordColumn(Mail1, "Sender", {"Name"}, {"Name"}),
#"Filtered Rows" = Table.SelectRows(#"Expanded Sender", each ([HasAttachments] = true)),
#"Filtered Rows1" = Table.SelectRows(#"Filtered Rows", each ([Subject] = "sample files for email PQ test") and ([Folder Path] = "\Inbox\")),
#"Removed Other Columns" = Table.SelectColumns(#"Filtered Rows1",{"Attachments"}),
#"Expanded Attachments" = Table.ExpandTableColumn(#"Removed Other Columns", "Attachments", {"Name", "AttachmentContent"}, {"Name", "AttachmentContent"}),
#"Filtered Hidden Files1" = Table.SelectRows(#"Expanded Attachments", each [Attributes]?[Hidden]? <> true),
#"Invoke Custom Function1" = Table.AddColumn(#"Filtered Hidden Files1", "Transform File from Mail", each #"Transform File from Mail"([AttachmentContent])),
#"Removed Other Columns1" = Table.SelectColumns(#"Invoke Custom Function1", {"Transform File from Mail"}),
#"Expanded Table Column1" = Table.ExpandTableColumn(#"Removed Other Columns1", "Transform File from Mail", Table.ColumnNames(#"Transform File from Mail"(#"Sample File"))),
#"Changed Type" = Table.TransformColumnTypes(#"Expanded Table Column1",{{"Column1", type text}, {"Column2", type text}, {"Column3", type text}, {"Column4", type text}, {"Column5", type text}, {"Column6", type text}, {"Column7", type text}, {"Column8", type text}, {"Column9", type text}, {"Column10", type text}})
in
#"Changed Type"