この記事では、すでに持っている M コードを Power BI カスタムコネクタとしてパッケージする方法について紹介します。普段 PowerPlatform しか使っていないから Visual Studio とか開発はちょっとという方にも、はじめの一歩としてお勧めです。
前提条件
それぞれウィザードに従ってインストールしてください。Visual Studio のどの機能が必要かまでは情報がないので、気になるワークロード適当に入れてみてください。
既存の M スニペットから始める
みなさんがどんなコードを使っているか知らないので、ここでは TripPin Service という認証不要の JSON データを返すだけの Web サービスをデータソースにします。
データを読み込む
1. Power BI Desktop を開いて「空のクエリ」を選択。
2. 詳細エディタで以下の関数一つを含むスクリプトを張り付け。
let
GetAirports = () as table =>
let
DefaultRequestHeaders = [
#"Accept" = "application/json;odata.metadata=minimal",
#"OData-MaxVersion" = "4.0"
],
source = Web.Contents("https://services.odata.org/v4/TripPinService/Airports", [ Headers=DefaultRequestHeaders ]),
json = Json.Document(source),
value = json[value],
toTable = Table.FromList(value, Splitter.SplitByNothing(), null, null, ExtraValues.Error)
in
toTable,
airports = GetAirports(),
#"Expanded Airport" = Table.ExpandRecordColumn(airports, "Column1", {"IcaoCode", "Name", "IataCode", "Location"}, {"IcaoCode", "Name", "IataCode", "Location"}),
#"Expanded Location" = Table.ExpandRecordColumn(#"Expanded Airport", "Location", {"Address", "City", "Loc"}, {"Address", "City", "Loc"}),
#"Expanded City" = Table.ExpandRecordColumn(#"Expanded Location", "City", {"CountryRegion", "Name", "Region"}, {"CountryRegion", "Name.1", "Region"}),
#"Expanded Loc" = Table.ExpandRecordColumn(#"Expanded City", "Loc", {"type", "coordinates", "crs"}, {"type", "coordinates", "crs"}),
#"Extracted Values" = Table.TransformColumns(#"Expanded Loc", {"coordinates", each Text.Combine(List.Transform(_, Text.From), ","), type text}),
#"Expanded crs" = Table.ExpandRecordColumn(#"Extracted Values", "crs", {"properties"}, {"properties"}),
airportsDetail = Table.ExpandRecordColumn(#"Expanded crs", "properties", {"name"}, {"crs"})
in
airportsDetail
4. カスタムコネクタを読み込むには設定を変える必要があるので、設定を変更する。
ではこの M スニペットをカスタムコネクタにしていきます。
プロジェクトの作成
1. Visual Studio 2019 を開いて「新しいプロジェクトの作成」をクリック。
2. Data Connector Project で検索してテンプレートを選択。
3. プロジェクト名を指定。ここでは TripPinConnector として作成。プロジェクトが作成されると複数のファイルが作成されるが、重要なのは以下のファイル。
- *.pq ファイル: コードを書くメインのファイル
- *.query.pg ファイル: テスト用のファイル
4. pq ファイルを開いて中身を確認。
安心してください。M 言語です。
M スニペットの移行
次にスニペットを以降していきます。ほぼ同じ構文ですが、Power BI の詳細エディタと異なりすべての関数を一気に書かないため、それぞれの関数の終わりはセミコロン[;]にします。
1. GetAirports 関数を張り付ける。場所は任意だがここでは shared セクションの直下とした。関数の最後がセミコロンである点に注意。
2. 次の残りのコードを shared に移行。
作業はこれだけです。
テスト
書いたスクリプトが動作するかテストします。
1. query.pq ファイルを開き、既存の shared 関数を実行していることを確認。
2. F5 キーを押下するか「開始」ボタンをクリック。認証の設定を聞かれるので、Anonymous を選択し「Set Credential」で保存。
簡単ですね。
展開
最後にコネクタをパッケージして展開してみましょう。
1. プロジェクトを保存したフォルダ | bin | Debug にある *.mez ファイルをコピー。
2. ファイルを C:\users\user_name\Documents\Power BI Desktop\Custom Connectors フォルダにコピー。なければ手動で作成。
Power BI Desktop で読み込み
1. Power BI Desktop を再起動して「データを取得」を選択。
5. 必要に応じて「読み込み」または「データの変換」を実行。操作は通常のコネクタと同様。
まとめ
この記事では、細かいことはさておき、まずカスタムコネクタを開発する手順について説明しました。まだまだ疑問は多くあると思います。
- 関数名は変更できるか?
- 他の機能などはどう実装するのか?
- ブランディングはどうやるのか?
- Debug ビルドのままでいいの?
- 認証あるエンドポイントはどうするか?
これらの疑問は以降の記事で紹介していきます。次はよくある認証のパターンとして OAuth を扱います。エンドポイントは Microsoft Graph です。待ちきれない方は My Graph sample にあるサンプルを参照してください。説明のリンク切れてる問題がありますが。。