TripPin 第 1 部分 - OData 服務的數據連接器
此多部分教學課程涵蓋如何建立Power Query的新數據源延伸模組。 本教學課程旨在循序完成,每個課程都是以先前課程中建立的連接器為基礎,以累加方式將新功能新增至您的連接器。
在本課程中,您將會:
- 使用 Power Query SDK 建立新的資料 連線 or 專案
- 撰寫基底函式以從來源提取數據
- 在 Power Query SDK 中測試連接器
- 在 Power BI Desktop 中註冊連接器
建立基本 OData 連接器
在本節中,您會建立新的 Data 連線 or 專案、提供一些基本資訊,並在 Power Query SDK 中進行測試。
打開 Visual Studio Code。 建議您建立新的工作區,然後建立新的延伸模組專案。 若要建立新的延伸模組專案,請開啟總管,然後在 [Power Query SDK ] 區段中選取 [ 建立延伸模組專案 ] 按鈕。
選取此按鈕之後,系統會提示您輸入新項目的名稱。 將此新項目 TripPin
命名為 。
開啟 TripPin.pq 檔案,並貼上下列連接器定義。
section TripPin;
[DataSource.Kind="TripPin", Publish="TripPin.Publish"]
shared TripPin.Feed = Value.ReplaceType(TripPinImpl, type function (url as Uri.Type) as any);
TripPinImpl = (url as text) =>
let
source = OData.Feed(url)
in
source;
// Data Source Kind description
TripPin = [
Authentication = [
Anonymous = []
],
Label = "TripPin Part 1 - OData"
];
// Data Source UI publishing description
TripPin.Publish = [
Beta = true,
Category = "Other",
ButtonText = { "TripPin OData", "TripPin OData" }
];
此連線器定義包含:
- TripPin 連接器的數據源定義記錄
- 隱含 (Anonymous) 是此來源唯一的驗證類型宣告
- 具有呼叫 OData.Feed 之實作的函式 (
TripPinImpl
) - 將參數型態設定為 的共用函式 (
TripPin.Feed
)Uri.Type
- 數據源發佈記錄,可讓連接器出現在 [Power Query 取得數據 ] 對話框中
開啟 TripPin.query.pq 檔案。 以對導出函式的呼叫取代目前的內容。
TripPin.Feed("https://services.odata.org/v4/TripPinService/")
您必須先建置連接器,才能測試連接器。 若要這樣做,請移至終端機,然後選取 [執行建置工作...] 選項(鍵盤快捷方式 Ctrl + Shift + B)。 建議您選擇 MakePQX 選項,但建置的任一選項都應該正常運作。
此作業的結果會建立新的 Bin 資料夾,其中您建置的連接器會儲存為 TripPin.mez。
<project.query.pq> 檔案可用來測試延伸模組,而不需要將其部署至 Power BI Desktop 的 bin 資料夾。 使用 Power Query SDK 內可用的工具:
- 選取 [ 設定認證] 選項。
- 選取 [TripPin ] 作為數據源。
- 選取 TripPin.query.pq 檔案作為查詢/測試檔案。
- 選取 [匿名 ] 作為驗證種類。
在輸出對話框中,會出現一則訊息,確認您已設定數據源的認證,以及所建立之每個認證的詳細數據。
注意
您一律可以使用 Clear ALL 認證命令清除認證,或使用 Power Query SDK 工具內的 [列出認證] 命令來檢查可用的認證。
現在已就緒認證之後,您可以選取 TripPin.query.pq 檔案,並在檔中選取滑鼠右鍵,以 評估目前的電源查詢檔案 ,或使用選項 ,從 Power Query SDK 工具評估目前的檔案 。
輸出對話框會顯示評估結果的訊息,以及名稱 為 PQTest 結果的新視窗。
PQTest 結果視窗包含三個索引標籤:
- 輸出:在方格中顯示數據的預覽。
- 摘要:一般評估詳細數據,例如 StartTime、EndTime、Duration、用於評估的檔案、狀態等等。
- DataSource:提供從 Kind、函式名稱和路徑使用之數據源的相關信息。
您可以在測試檔案中試用幾個不同的 OData URL,以查看傳回不同結果的方式。 例如:
https://services.odata.org/v4/TripPinService/Me
https://services.odata.org/v4/TripPinService/GetPersonWithMostFriends()
https://services.odata.org/v4/TripPinService/People
TripPin.query.pq 檔案可以包含單一語句、let 語句或完整區段檔。
let
Source = TripPin.Feed("https://services.odata.org/v4/TripPinService/"),
People = Source{[Name="People"]}[Data],
SelectColumns = Table.SelectColumns(People, {"UserName", "FirstName", "LastName"})
in
SelectColumns
重要
請務必一律在您工作時儲存盤案。 如果您對 TripPin.pq 檔案進行變更,您應該一律觸發後續建置工作,以確定您正在針對最新版的連接器進行測試。
開啟 Fiddler 以擷取 HTTP 流量,然後執行查詢。 您應該會看到一些不同的要求來 services.odata.org,由混搭容器進程產生。 您可以看到存取服務的根 URL 會導致 302 狀態和重新導向至較長版本的 URL。 下列重新導向是您從基底連結庫函式取得「免費」的另一種行為。
如果您查看 URL,有一件事要注意的是,您可以看到語句所 SelectColumns
發生的查詢折疊。
https://services.odata.org/v4/TripPinService/People?$select=UserName%2CFirstName%2CLastName
如果您將更多轉換新增至查詢,您可以看到它們如何影響產生的 URL。
請務必注意此行為。 即使您未實作明確的折疊邏輯,連接器還是會從 OData.Feed 函式繼承這些功能。 M 語句能夠撰寫—篩選內容會盡可能從一個函式流向另一個函式。 這在概念上與連接器內使用的數據源函式繼承其驗證內容和認證的方式類似。 在稍後的課程中,您將使用 具有原生折疊功能的 OData.Feed 取代 為 Web.Contents,但不會。 若要取得相同層級的功能,您必須使用 Table.View
介面並實作您自己的明確折疊邏輯。
在 Power BI Desktop 中載入您的延伸模組
若要在 Power BI Desktop 中使用您的延伸模組,您必須將連接器項目的輸出檔 (TripPin.mez) 複製到您的自定義 連線 ors 目錄。
- 建立 [My Documents]\Power BI Desktop\Custom 連線 ors 目錄。
- 將擴展名檔案 (TripPin.mez) 複製到此目錄。
- 核取選項 (不建議) 允許在 Power BI Desktop 中載入任何延伸模組而不驗證或警告(在 [檔案>選項] 和 [>選項>安全性>數據延伸模組] 底下)。
- 重新啟動Power BI Desktop。
- 選取 [取得數據更多] > 以顯示 [取得資料] 對話框。
您可以在搜尋方塊中輸入擴充功能的名稱來尋找您的延伸模組。
選取函式名稱,然後選取 [連線]。 第三方訊息隨即出現—選取 [ 繼續 ] 繼續。 函式調用對話框現在會出現。 輸入服務 (https://services.odata.org/v4/TripPinService/
) 的根 URL,然後選取 [ 確定]。
因為這是您第一次存取此數據源時,您將會收到認證提示。 檢查已選取最短的 URL,然後選取 [連線]。
請注意,導覽器不會取得簡單的數據數據表。 這是因為 OData.Feed 函式會傳回其上方具有特殊元數據的數據表,Power Query 體驗知道要顯示為導覽數據表。 本逐步解說將說明如何在未來的課程中建立和自定義自己的導覽數據表。
選取 [ Me ] 資料表,然後選取 [ 轉換數據]。 請注意,數據行已指派類型(嗯,大部分都已指派)。 這是基礎 OData.Feed 函式的另一個功能。 如果您在 Fiddler 中監看要求,您會看到您已擷取服務的$metadata檔。 引擎的 OData 實作會自動執行此動作,以判斷服務的架構、數據類型和關聯性。
結論
本課程逐步引導您根據 OData.Feed 連結庫函式建立簡單的連接器。 如您所見,在基底函式上 OData
啟用功能完整的連接器所需的邏輯很少。 其他啟用擴充性的函式,例如 ODBC。DataSource 提供類似的功能。
在下一課,您將將 OData.Feed 的使用取代為功能較弱的 Web.Contents。 每個課程都會實作更多連接器功能,包括分頁、元數據/架構偵測,以及 OData 查詢語法的查詢折疊,直到您的自定義連接器支援與 OData.Feed 相同的功能範圍為止。