TripPin パート 1 - OData サービス用のデータ コネクタ
このマルチパート チュートリアルでは、Power Query 用の新しいデータ ソース拡張機能の作成について説明します。 このチュートリアルは順番に実行することを目的としています。各レッスンは前のレッスンで作成したコネクタに基づいて構築され、コネクタに新しい機能が段階的に追加されます。
このレッスンの内容:
- Power Query SDK を使用して新しいデータ コネクタ プロジェクトを作成する
- ソースからデータをプルする基本関数を作成する
- Power Query SDK でコネクタをテストする
- コネクタを Power BI Desktop に登録する
基本的な OData コネクタの作成
このセクションでは、新しいデータ コネクタ プロジェクトを作成し、いくつかの基本情報を入力した後、そのコネクタを 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 コネクタのデータ ソース定義レコード
- 暗黙的 (匿名) がこのソースの唯一の認証の種類であるという宣言
- 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 フォルダーが作成されます。
<project>.query.pq ファイルは、拡張機能を Power BI Desktop の bin フォルダーに展開せずにテストするために使用されます。 Power Query SDK 内で使用できるツールの使用:
- [資格情報の設定] オプションを選択します。
- データ ソースに TripPin を選択します。
- クエリ/テスト ファイルに TripPin.query.pq ファイルを選択します。
- 認証サブタイプに [匿名] を選択します。
出力ダイアログに、データ ソースの資格情報と、作成された各資格情報の詳細を設定したことを確認するメッセージが表示されます。
Note
[すべての資格情報のクリア] コマンドを使用して資格情報を消去することも、Power Query SDK ツール内の [資格情報の一覧表示] コマンドを使用して使用可能な資格情報をチェックすることもできます。
資格情報を設定したら、TripPin.query.pq ファイルを選択し、ドキュメントで右クリックして現在の Power Query ファイルを評価するか、Power Query SDK ツールから現在のファイルを評価するためのオプションを使用します。
出力ダイアログには、評価結果のメッセージと、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 ディレクトリにコピーする必要があります。
- [マイ ドキュメント]\Power BI Desktop\Custom Connectors ディレクトリを作成します。
- このディレクトリに、拡張機能ファイル (TripPin.mez) をコピーします。
- Power BI Desktop で、[(非推奨) 検証または警告せずに、あらゆる拡張機能の読み込みを許可する] をオンにします ([ファイル]>[オプションと設定]>[オプション]>[セキュリティ]>[データ拡張機能] の下)。
- Power BI Desktop を再起動します。
- [データの取得] > [その他] を選択して、[データの取得] ダイアログを表示します。
検索ボックスに名前を入力して、拡張機能を見つけることができます。
関数名を選択し、[接続] を選択します。 サード パーティのメッセージが表示されたら、[続行] を選択して続行します。 関数呼び出しダイアログが表示されます。 サービスのルート URL (https://services.odata.org/v4/TripPinService/
) を入力し、[OK] を選択します。
このデータ ソースに初めてアクセスするため、資格情報の入力を求めるメッセージが表示されます。 最短の URL が選択されているのを確認し、[接続] を選択します。
シンプルなデータ テーブルが取得される代わりに、ナビゲーターが表示されます。 これは、OData.Feed 関数が返すテーブルの上に特別なメタデータが適用されていて、Power Query によってナビゲーション テーブルとして表示されるためです。 このチュートリアルでは、今後のレッスンで、独自のナビゲーション テーブルを作成し、カスタマイズする方法について説明します。
[Me] テーブルを選択し、[データの変換]を選択します。 列 (の多く) には、既に型が割り当てられていることに注目してください。 これは、基になる OData.Feed 関数のもう 1 つの機能です。 Fiddler で要求を見ると、サービスの $metadata ドキュメントがフェッチされているのがわかります。 これはエンジンの OData 実装によって自動的に行われ、これにより、サービスのスキーマ、データ型、およびリレーションシップが決定されます。
まとめ
このレッスンでは、OData.Feed ライブラリ関数に基づくシンプルなコネクタの作成について説明しました。 ご覧いただいたように、OData
基本関数を基にして、わずかなロジックでフル機能のコネクタを作成できます。 拡張機能に対応したその他の関数 (ODBC.DataSource など) でも、同様の機能を提供できます。
次のレッスンでは、OData.Feed を、より低機能の関数 (Web.Contents) に置き換えます。 レッスンごとに、追加のコネクタ機能 (ページング、メタデータ/スキーマ検出、OData クエリ構文へのクエリ フォールディングなど) を実装していき、カスタム コネクタで OData.Feed と同様の機能をサポートできるようにしていきます。