LoginSignup
22
17

More than 3 years have passed since last update.

Power BI REST API を使ってデータセットの更新を仕掛ける

Last updated at Posted at 2018-12-04

手早く実現できるので 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 アクションが追加され
カスタムコネクタ作らなくてもよくなった :smile:
image.png

データセットの更新がしたかった

こんな感じのことをしようかと。
image.png
データセットのリフレッシュがしたかったのです。更新のスケジュールは 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 パラメータも使えるけどこれも今回では使わない。

HTTP
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

HTTP
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

HTTP
POST https://api.powerbi.com/v1.0/myorg/groups/{groupId}/datasets/{datasetKey}/refreshes

アプリのワークスペースを特定する groupId と データセットと特定する datasetKey が必須。
結果をお知らせするオプションを Request Body で POST

RefreshRequest
{
  "notifyOption": "MailOnFailure"
}

オプションには、NoNotification / MailOnCompletion / MailOnFailure が用意されているので適宜。

ひと通り動作まで

アプリの登録

ともかくこれが必要です。アプリの登録 - Azure Active Directory 管理センター で構成してもよいのだけど手間がかからなさそうなツールを使う。

Power BI Development Center - App Registration Tool もしくは Onboarding Embed Tool で。
image.png
image.png
Application Name : (お好きな名前で)
Home Page URL : (必要な情報などが配置されているところなど)
image.png
STEP 2 で カスタムコネクタ作成に必要な Client Id と Client secret を取得できる。メモしたら終了でよい。

カスタムコネクタの作成

image.png

1.全般

image.png
スキーマ : HTTPS
ホスト : api.powerbi.com
ベースURL : /

2.セキュリティ

image.png
認証タイプ:OAuth 2.0

image.png
ID プロバイダー : Azure Active Directory
Client id : (アプリ登録で取得したもの)
Client secret : (アプリ登録で取得したもの)
Resource URL : https://analysis.windows.net/powerbi/api
リダイレクトURL : カスタムコネクタを保存すると発行される
image.png
既に作成されているアプリの[認証]-[リダイレクト URI] を発行されたリダイレクトURLに変更してアプリを更新

GetGroup

3.定義 - GetGroup

全般

image.png
表示 : internal

要求

image.png
[サンプルからインポート]押下
image.png
動詞 : GET
URL : https://api.powerbi.com/v1.0/myorg/groups

image.png

4.テスト - GetGroup

接続

image.png
[新しい接続]押下

操作

image.png
[テスト操作]押下

応答

image.png
応答ボディをコピー

3.定義 - GetGroup

応答

image.png
image.png
[サンプルからインポート]押下
image.png
テストでコピーした応答ボディをペースト [インポート]押下
image.png

GetDatasetsInGroup

3.定義 - GetDatasetsInGroup

全般

image.png
表示 : internal

要求

image.png
[サンプルからインポート]押下
image.png
動詞 : GET
URL : https://api.powerbi.com/v1.0/myorg/groups/{groupId}/datasets

要求 - パス

image.png
image.png

4.テスト - GetDatasetsInGroup

操作

image.png

応答

image.png

3.定義 - GetDatasetsInGroup

応答

image.png
image.png
image.png

RefreshDatasetInGroup

3.定義 - RefreshDatasetInGroup

全般

image.png

要求

image.png
image.png

要求 - パス - groupId

image.png

要求 - パス - groupId - パラメーター

image.png

要求 - パス - datasetKey

image.png

要求 - パス - datasetKey - パラメーター

image.png

要求 - 本文 - body

image.png

要求 - 本文 - body - スキーマのプロパティ

image.png

試す

image.png
image.png
image.png
image.png
image.png
image.png
image.png

その他

22
17
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
22
17