次の方法で共有


TripPin パート 1 - OData サービス用のデータ コネクタ

このマルチパート チュートリアルでは、Power Query 用の新しいデータ ソース拡張機能の作成について説明します。 このチュートリアルは順番に実行することを目的としています。各レッスンは前のレッスンで作成したコネクタに基づいて構築され、コネクタに新しい機能が段階的に追加されます。

このレッスンの内容:

  • Power Query SDK を使用して新しいデータ コネクタ プロジェクトを作成する
  • ソースからデータをプルする基本関数を作成する
  • Power Query SDK でコネクタをテストする
  • コネクタを Power BI Desktop に登録する

基本的な OData コネクタの作成

このセクションでは、新しいデータ コネクタ プロジェクトを作成し、いくつかの基本情報を入力した後、そのコネクタを Power Query SDK でテストします。

Visual Studio Code を開きます。 新しいワークスペースを作成してから、新しい拡張機能プロジェクトを作成することをお勧めします。 新しい拡張プロジェクトを作成するには、エクスプローラーを開き、[Power Query SDK] セクションで [拡張機能プロジェクトの作成] ボタンを選択します。

Power Query SDK 拡張機能プロジェクトを作成するためのオプションが強調されたスクリーンショット。

このボタンを選択すると、新しいプロジェクトの名前を入力するように求められます。 新しいプロジェクトに TripPin という名前を付けます。

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 コネクタのデータ ソース定義レコード
  • 暗黙的 (匿名) がこのソースの唯一の認証の種類であるという宣言
  • OData.Feed を呼び出す実装を含んだ関数 (TripPinImpl)
  • パラメーター型を Uri.Type に設定する共有関数 (TripPin.Feed)
  • Power Query の [データの取得] ダイアログにコネクタが表示されるようにするための、データ ソース公開レコード

TripPin.query.pq ファイルを開きます。 現在の内容を、エクスポートした関数の呼び出しに置き換えてます。

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

コネクタをテストする前に、コネクタをビルドする必要があります。 これを行うには、[ターミナル] に移動し、[ビルド タスクの実行] オプションを選択します (キーボード ショートカット Ctrl + Shift + B)。 MakePQX オプションを選択することをお勧めしますが、ビルドに使用できるオプションは動作するはずです。

コネクタをテストする前にビルド タスクを実行する方法を示すスクリーンショット。

この操作の結果により、ビルドされたコネクタが TripPin.mez として格納される新しい Bin フォルダーが作成されます。

mez 拡張子と TripPin.mez という名前を持つコネクタ ファイルが配置されている場所に作成された新しい bin フォルダーのスクリーンショット。

<project>.query.pq ファイルは、拡張機能を Power BI Desktop の bin フォルダーに展開せずにテストするために使用されます。 Power Query SDK 内で使用できるツールの使用:

  1. [資格情報の設定] オプションを選択します。
  2. データ ソースに TripPin を選択します。
  3. クエリ/テスト ファイルに TripPin.query.pq ファイルを選択します。
  4. 認証サブタイプに [匿名] を選択します。

出力ダイアログに、データ ソースの資格情報と、作成された各資格情報の詳細を設定したことを確認するメッセージが表示されます。

.query.pq ファイルに渡された URL を使用して、TripPin コネクタに対して新しく作成された認証の詳細を表示する出力ダイアログのスクリーンショット。

Note

[すべての資格情報のクリア] コマンドを使用して資格情報を消去することも、Power Query SDK ツール内の [資格情報の一覧表示] コマンドを使用して使用可能な資格情報をチェックすることもできます。

資格情報を設定したら、TripPin.query.pq ファイルを選択し、ドキュメントで右クリックして現在の Power Query ファイルを評価するか、Power Query SDK ツールから現在のファイルを評価するためのオプションを使用します。

現在の Power Query ファイルを評価するための複数の代替手段のスクリーンショット。

出力ダイアログには、評価結果のメッセージと、PQTest 結果という名前の新しいウィンドウが表示されます。

実行された評価の結果を表示する PQTest の結果ウィンドウのスクリーンショット。

PQTest の結果ウィンドウは、次の 3 つのタブで構成されます。

  • 出力: グリッド内にデータのプレビューを表示します。
  • 概要: StartTime、EndTime、Duration、評価に使用されたファイル、状態などの一般的な評価の詳細。
  • データソース: サブタイプ、関数名、パスから使用されたデータ ソースに関する情報を提供します。

テスト ファイル内でいくつかの異なる 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 を見ると、注目するべき点の 1 つとして、SelectColumns ステートメントで発生したクエリ フォールディングが確認できます。 https://services.odata.org/v4/TripPinService/People?$select=UserName%2CFirstName%2CLastName

クエリに変換をさらに追加すれば、生成される URL にどのような影響が出るかを確認できます。

この動作に注目することは重要です。 明示的なフォールディング ロジックを実装していない場合でも、コネクタは OData.Feed 関数からこれらの機能を継承します。 M ステートメントはコンポーザブルです。フィルター コンテキストは、可能な場合は必ず、1 つの関数から別の関数へと受け渡されます。 これは、概念としては、コネクタ内で使用されるデータ ソース関数が認証コンテキストと資格情報を継承するのと似ています。 この後のレッスンでは、ネイティブのフォールディング機能を備えた OData.Feed を、その機能がない Web.Contents に置き換えていきます。 同じレベルの機能を実現するには、Table.View インターフェイスを使用し、独自の明示的なフォールディング ロジックを実装する必要があります。

Power BI Desktop での拡張機能の読み込み

Power BI Desktop で拡張機能を使用するには、コネクタ プロジェクトの出力ファイル (TripPin.mez) を Custom Connectors ディレクトリにコピーする必要があります。

  1. [マイ ドキュメント]\Power BI Desktop\Custom Connectors ディレクトリを作成します。
  2. このディレクトリに、拡張機能ファイル (TripPin.mez) をコピーします。
  3. Power BI Desktop で、[(非推奨) 検証または警告せずに、あらゆる拡張機能の読み込みを許可する] をオンにします ([ファイル]>[オプションと設定]>[オプション]>[セキュリティ]>[データ拡張機能] の下)。
  4. Power BI Desktop を再起動します。
  5. [データの取得] > [その他] を選択して、[データの取得] ダイアログを表示します。

検索ボックスに名前を入力して、拡張機能を見つけることができます。

[データの取得] ダイアログ。

関数名を選択し、[接続] を選択します。 サード パーティのメッセージが表示されたら、[続行] を選択して続行します。 関数呼び出しダイアログが表示されます。 サービスのルート URL (https://services.odata.org/v4/TripPinService/) を入力し、[OK] を選択します。

関数の呼び出し。

このデータ ソースに初めてアクセスするため、資格情報の入力を求めるメッセージが表示されます。 最短の URL が選択されているのを確認し、[接続] を選択します。

資格情報プロンプトの画像。[匿名] に設定され、レベル設定が最短の URL に設定されています。

シンプルなデータ テーブルが取得される代わりに、ナビゲーターが表示されます。 これは、OData.Feed 関数が返すテーブルの上に特別なメタデータが適用されていて、Power Query によってナビゲーション テーブルとして表示されるためです。 このチュートリアルでは、今後のレッスンで、独自のナビゲーション テーブルを作成し、カスタマイズする方法について説明します。

ナビゲーション テーブル。

[Me] テーブルを選択し、[データの変換]を選択します。 列 (の多く) には、既に型が割り当てられていることに注目してください。 これは、基になる OData.Feed 関数のもう 1 つの機能です。 Fiddler で要求を見ると、サービスの $metadata ドキュメントがフェッチされているのがわかります。 これはエンジンの OData 実装によって自動的に行われ、これにより、サービスのスキーマ、データ型、およびリレーションシップが決定されます。

Me レコード。

まとめ

このレッスンでは、OData.Feed ライブラリ関数に基づくシンプルなコネクタの作成について説明しました。 ご覧いただいたように、OData 基本関数を基にして、わずかなロジックでフル機能のコネクタを作成できます。 拡張機能に対応したその他の関数 (ODBC.DataSource など) でも、同様の機能を提供できます。

次のレッスンでは、OData.Feed を、より低機能の関数 (Web.Contents) に置き換えます。 レッスンごとに、追加のコネクタ機能 (ページング、メタデータ/スキーマ検出、OData クエリ構文へのクエリ フォールディングなど) を実装していき、カスタム コネクタで OData.Feed と同様の機能をサポートできるようにしていきます。

次のステップ

TripPin パート 2 - REST サービス用のデータ コネクタ