TripPin 第 1 部分 - OData 服務的數據連接器

此多部分教學課程涵蓋如何建立Power Query的新數據源延伸模組。 本教學課程旨在循序完成,每個課程都是以先前課程中建立的連接器為基礎,以累加方式將新功能新增至您的連接器。

在本課程中,您將會:

  • 使用 Visual Studio SDK 建立新的 Data 連線 or 專案
  • 撰寫基底函式以從來源提取數據
  • 在 Visual Studio 中測試連接器
  • 在 Power BI Desktop 中註冊連接器

建立基本 OData 連接器

在本節中,您將建立新的 Data 連線 or 專案、提供一些基本資訊,並在 Visual Studio 中進行測試。

開啟 Visual Studio,然後建立新的專案。 在 [Power Query] 資料夾下,選取 [數據 連線 or 專案]。 在這裡範例中,將項目名稱設定為 TripPin

VSProject.

開啟 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.FeedUri.Type
  • 數據源發佈記錄,可讓連接器出現在Power BI [取得資料 ] 對話框中

開啟 TripPin.query.pq 檔案。 以對導出函式的呼叫取代目前的內容。

TripPin.Feed("https://services.odata.org/v4/TripPinService/")

選取 [ 開始] 按鈕以啟動 M 查詢公用程式。

<project.query.pq> 檔案可用來測試延伸模組,而不需要將其部署至 Power BI Desktop 的 bin 資料夾。 選取 [ 開始] 按鈕 (或按 F5) 會自動編譯延伸模組並啟動 M 查詢公用程式。

第一次執行查詢會導致認證錯誤。 在 Power Query 中,主控應用程式會將此錯誤轉換成認證提示。 在 Visual Studio 中,您會收到類似的提示,指出哪個數據源遺漏認證及其數據源路徑。 選取最短的數據源路徑 (https://services.odata.org/)—這會將您的認證套用至此路徑下的所有 URL。

選取 [ 匿名 認證類型],然後選取 [ 設定認證]。

Image of M Query Output dialog, with the Errors tab selected, and the Data Source Path filled in and the Credential Type set to Anonymous.

選取 [ 確定 ] 以關閉對話框,然後再次選取 [ 開始 ] 按鈕。 您會看到查詢執行狀態對話框,最後會顯示查詢傳回的數據查詢結果數據表。

Query results.

您可以在測試檔案中試用幾個不同的 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

開啟 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 目錄。

  1. 在 Visual Studio 中,選取 [建置] |從功能表列建置方案 (F6)。 這會為您項目產生 .mez 檔案。 根據預設,這會移至您專案的 bin\Debug 資料夾中。
  2. 建立 [My Documents]\Power BI Desktop\Custom Connectors 目錄。
  3. 將延伸模組檔案複製到這個目錄。
  4. 核取選項 (不建議) 允許在 Power BI Desktop 中載入任何延伸模組而不驗證或警告(在 [檔案>選項] 和 [>選項>安全性>數據延伸模組] 底下)。
  5. 重新啟動Power BI Desktop。
  6. 選取 [取得數據更多] > 以顯示 [取得資料] 對話框。

您可以在搜尋方塊中輸入擴充功能的名稱來尋找您的延伸模組。

Get Data Dialog.

選取函式名稱,然後選取 [連線]。 第三方訊息隨即出現—選取 [ 繼續 ] 繼續。 函式調用對話框現在會出現。 輸入服務 (https://services.odata.org/v4/TripPinService/) 的根 URL,然後選取 [ 確定]。

Invoke Function.

由於這是您第一次存取此數據源,因此會收到認證提示。 檢查已選取最短的 URL,然後選取 [連線]。

Image of credential prompt set to Anonymous and the level setting set to the shortest URL.

請注意,導覽器不會取得簡單的數據數據表。 這是因為 OData.Feed 函式會傳回其上方具有特殊元數據的數據表,Power Query 體驗知道要顯示為導覽數據表。 本逐步解說將說明如何在未來的課程中建立和自定義自己的導覽數據表。

Nav Table.

選取 [ Me ] 資料表,然後選取 [ 轉換數據]。 請注意,數據行已指派類型(嗯,大部分都已指派)。 這是基礎 OData.Feed 函式的另一個功能。 如果您在 Fiddler監看要求,您會看到您已擷取服務的$metadata檔。 引擎的 OData 實作會自動執行此動作,以判斷服務的架構、數據類型和關聯性。

Me Record.

推論

本課程逐步引導您根據 OData.Feed 連結庫函式建立簡單的連接器。 如您所見,在基底函式上 OData 啟用功能完整的連接器所需的邏輯很少。 其他啟用擴充性的函式,例如 ODBC。DataSource 提供類似的功能。

在下一課,您將將 OData.Feed 的使用取代為功能較弱的 Web.Contents。 每個課程都會實作更多連接器功能,包括分頁、元數據/架構偵測,以及 OData 查詢語法的查詢折疊,直到您的自定義連接器支援與 OData.Feed 相同的功能範圍為止。

下一步

TripPin 第 2 部分 - REST 服務的數據 連線 or