手早く実現できるので Microsoft Flow のカスタムコネクタを使うけれども、手順は一緒なので、Logic Apps でも構わない。で、Microsoft Flow には Power BI サービスをサポートする標準コネクタはあるのだけど、用意されていないほかのことをしたいのです。なければ作ればいいじゃない。
そもそも標準コネクタは?
Power BI (Preview) - Connectors | Microsoft Docs
いつまでプレビューなのでしょう。長いですね。そのままかも。
用意されている Action と Triggers
テンプレートから用意されているからさほどは困らないけれども。
・テンプレートの閲覧 | Microsoft Flow
Action : Add rows to a dataset (AddRows)
データセットに行を追加するってことなんだけど、そもそもデータセットがサポートしていなければならないから、ストリーミングデータセットにデータを送り込むときに使っている感じでしょうか。
サポートするデータセットについては以前にポストした。
・Power BI REST API を使って Push をサポートするデータセットを作成
Triggers : When a data driven alert is triggered (CheckAlertStatus)
Power BI サービスで設定したデータ アラートを検知してメールを送信したり。
・Microsoft Flow と Power BI
Refresh a dataset アクションが追加され
カスタムコネクタ作らなくてもよくなった
データセットの更新がしたかった
こんな感じのことをしようかと。
データセットのリフレッシュがしたかったのです。更新のスケジュールは Power BI サービスで設定できるのだけど、別の契機で更新させたいなと。ならば、カスタムコネクタ。
制限
先に越えられない制限は更新の回数。データセットごとに限界値があって 8 回/日 ないし 48 回/日で後者は Premium キャパシティ。スケジュールされた更新の回数に含まれ、8 or 48 の限界値を超えるものではない。
In Shared capacities this call is limited to eight times per day (including refreshes executed via Scheduled Refresh)
In Premium capacities this call is not limited in number of times per day, but only by the available resources in the capacity, hence if overloaded, the refresh execution may be throttled until the load is reduced. If this throttling exceeds 1 hour, the refresh will fail.
Premium キャパシティであれば回数の制限はないんですって。
情報
最初はいろいろとやることや知ることがあり。
Power BI REST API
・Power BI の開発者向け機能 - Power BI | Microsoft Docs
オートメーションに使用できるAPIなのだけど、標準コネクタではその一部(AddRows)で使われているのです。Power BI REST API にはもっと多くの Action が用意されているのでそれを使いたいなと。
Action
Power BI REST APIs - Power BI REST API | Microsoft Docs
眺めているだけでもたくさんのことができるというのがわかる。で、いくつかを使うことにする。
Group
まずはアプリのワークスペースからの情報を
Groups - Get Groups
Groups - Get Groups (Power BI REST APIs) | Microsoft Docs
参加しているアプリのワークスペースに関する情報を GET する
必要なAPIのアクセス許可 : Workspace.Read.All or Workspace.ReadWrite.All
アプリのワークスペースを参照できればよいので、"Workspace.Read.All" で事足りる。Query パラメータも使えるけどこれも今回では使わない。
GET https://api.powerbi.com/v1.0/myorg/groups
GET https://api.powerbi.com/v1.0/myorg/groups?$filter={$filter}&$top={$top}&$skip={$skip}
Admin - Groups GetGroupsAsAdmin (Power BI REST APIs) | Microsoft Docs ってのがあるけど、これは Office 365 全体管理者 もしくは Power BI サービス管理者 の権限が必要でまさしく管理用途なのでこれは使わない。
Datasets
つづいて アプリのワークスペースに配置されたデータセットについて
Datasets - Get Datasets In Group
Datasets - Get Datasets In Group (Power BI REST APIs) | Microsoft Docs
必要なAPIのアクセス許可 : Dataset.ReadWrite.All or Dataset.Read.All
GET https://api.powerbi.com/v1.0/myorg/groups/{groupId}/datasets
アプリのワークスペースを特定できる groupId が必須。Get Groups で取得した結果を使う感じで。
Datasets - Refresh Dataset In Group
Datasets - Refresh Dataset In Group (Power BI REST APIs) | Microsoft Docs
アプリのワークスペースに配置されたデータセットをRefresh
必要なAPIのアクセス許可 : Dataset.ReadWrite.All
POST https://api.powerbi.com/v1.0/myorg/groups/{groupId}/datasets/{datasetKey}/refreshes
アプリのワークスペースを特定する groupId と データセットと特定する datasetKey が必須。
結果をお知らせするオプションを Request Body で POST
{
"notifyOption": "MailOnFailure"
}
オプションには、NoNotification / MailOnCompletion / MailOnFailure が用意されているので適宜。
ひと通り動作まで
アプリの登録
ともかくこれが必要です。アプリの登録 - Azure Active Directory 管理センター で構成してもよいのだけど手間がかからなさそうなツールを使う。
Power BI Development Center - App Registration Tool もしくは Onboarding Embed Tool で。
Application Name : (お好きな名前で)
Home Page URL : (必要な情報などが配置されているところなど)
STEP 2 で カスタムコネクタ作成に必要な Client Id と Client secret を取得できる。メモしたら終了でよい。
カスタムコネクタの作成
1.全般
スキーマ : HTTPS
ホスト : api.powerbi.com
ベースURL : /
2.セキュリティ
ID プロバイダー : Azure Active Directory
Client id : (アプリ登録で取得したもの)
Client secret : (アプリ登録で取得したもの)
Resource URL : https://analysis.windows.net/powerbi/api
リダイレクトURL : カスタムコネクタを保存すると発行される
既に作成されているアプリの[認証]-[リダイレクト URI] を発行されたリダイレクトURLに変更してアプリを更新
GetGroup
3.定義 - GetGroup
全般
要求
[サンプルからインポート]押下
動詞 : GET
URL : https://api.powerbi.com/v1.0/myorg/groups
4.テスト - GetGroup
接続
操作
応答
3.定義 - GetGroup
応答
[サンプルからインポート]押下
テストでコピーした応答ボディをペースト [インポート]押下
GetDatasetsInGroup
3.定義 - GetDatasetsInGroup
全般
要求
[サンプルからインポート]押下
動詞 : GET
URL : https://api.powerbi.com/v1.0/myorg/groups/{groupId}/datasets