先日の勉強会でこんな質問がありました
「定期的に Power BI レポートファイル (pbix) をバックアップしておきたいのですが、何か方法はないですか?」
なるほどー、そんな需要があるんですねー。と勉強になりました。
勉強会では「Power BI REST API に Export Report があるから、それを使えばできるよ」って @kenakamu さんが回答してくれて、Qiita の記事を書いてくれました。
PowerShell で Power BI サービスから pbix をダウンロードする
↑ の記事では PowerShell で Power BI REST API を叩いています。
ただ、Citizen Developer (= 非技術者) の人にはちょっとハードルが高いって人もいるかと。
なので、可能な限り No code / Low code の方法ということで、Power Automate / Azure Logic Apps のカスタムコネクタで API を叩く方法ご紹介するのが今回の記事です。
ついでに Power Automate / Azure Logic Apps のカスタムコネクタの作り方紹介でもあります。
(Power BI Tips じゃないじゃん!?って思ってもいいけど、言わないでください😁)
前提として、Azure Portal (https://portal.azure.com) で Azure Active Directory が開けて、設定ができる人が対象です。
カスタムコネクタってなに?
カスタムコネクタとは、Power Automate (旧 Microsoft Flow) / Azure Logic Apps のコネクタを自分で作れるというものです。
それぞれのサービスには実に数百のコネクタが既に用意されていますが、中には用意されていない API を叩きたいという人もいらっしゃるでしょう。
あるいは、自社サービスのコネクタを作りたい、という人もいるかもしれません。
ちょっと余談ですが、自社サービスがあって、その API を呼び出す Power Automate / Azure Logic Apps 用のコネクタを作りたいという人もいるかもしれません。
カスタムコネクタを作って Microsoft に登録することで、公式にコネクタとして、認定してもらうことが可能です。そうすると、以下の様に検索すると、コネクタが表示されるようになります。
自組織内のみで使用する場合は、Microsoft の認定は不要です。
ご興味あるか方は、以下の公式ドキュメントをぜひ参考にしてみてください!
Azure Logic Apps でカスタム コネクタを作成する
https://docs.microsoft.com/ja-jp/connectors/custom-connectors/create-logic-apps-connector
では本題!
今日のゴールは冒頭のお題の通り、Power BI REST API の Export Report を呼び出すカスタムコネクタを作成します。
まずは公式ドキュメント
Reports - Export Report
https://docs.microsoft.com/ja-jp/rest/api/power-bi/reports/exportreport
Reports - Export Report In Group
https://docs.microsoft.com/ja-jp/rest/api/power-bi/reports/exportreportingroup
左側の [Reports] の部分がレポートに関する Power BI REST API です。
見てわかる通り、どうやら In Group が付いてるやつと付いてないやつがあるようですね。
これは、
- In Group が付いているやつ ⇒ ワークスペース用
- In Group が付いていないやつ ⇒ マイワークスペース用
です。
マイワークスペースは、Power BI Service を使えるユーザーすべてにデフォルトで提供されているワークスペースで、文字通り、個人用です。
一方、その他のワークスペースは Power BI Pro 以上のユーザーが作成可能なワークスペースで、他のユーザーと共有したり、一緒に使用したりするためのワークスペースです。
Power BI のワークスペースについては、以下をご覧ください。
Power BI で新しいワークスペースを作成する
https://docs.microsoft.com/ja-jp/power-bi/service-create-the-new-workspaces
はい、ということでまずは Power BI REST API にはワークスペースの種類に応じて、2種類あるんだ、と覚えておけば OK です。
準備:Power BI アプリケーション登録ツールで登録する
今回の方法では Azure AD にアプリを登録しておく必要があります。といっても登録ツールがあるので、画面の指示に従って操作すれば、誰でもできます。
Power BI REST API を他のアプリケーションから使用するには Azure AD (Active Directory) にアプリケーションを登録する必要があります。ご存知の通り、Power BI はユーザー管理や認証基盤を Azure AD に任せているからです。API を利用する際もセキュリティの観点から Power BI のユーザーアカウントを使用して認証する必要があるので、この準備が必要なわけです。
公式ドキュメントは以下です。
Azure AD アプリケーションを登録して Power BI とともに使用する
https://docs.microsoft.com/ja-jp/power-bi/developer/embedded/register-app
この ↑ ドキュメントの [Power BI アプリケーション登録ツールで登録する] 部分の通り進めれば、基本的には OK なんですが、Power BI REST API を使用するには一部情報が不足しているので、補足しながら説明します。
1.https://dev.powerbi.com/Apps にアクセスする
2.[Sign in] ボタンを押して、Power BI のアカウントでサインインする
3.[Next] ボタンで次に進む
4.Application Name, Application Type, Home Page URL, Redirect URL を入力する
No. | 項目名 | 値 |
---|---|---|
1 | Application Name | Power Automate Custom Connector |
2 | Application Type | Server-side application(for web apps or web APIs) |
3 | Home Page URL | https://www.google.com |
4 | Redirect URL | https://login.live.com/oauth20_desktop.srf |
以下備考です。
Application Name: 任意の名称で OK ですが、ここでは Power Automate Custom Connector とします
Application Type: Web アプリケーションから使用するので Server-side application(for web apps or web APIs) を選択します
Home Page URL: 本来なら自身の Web アプリケーションの URL を入力するのですが、有効な URL なら OK ですので、Google さんの URL を入れときます
Redirect URL: これが調べてもわからなかったのですが、海外の人が ブログ に書いてくれていましたので、いただきました😁
5.API access で Select all を選択する
このアプリケーションがどの API を実行できるかを選択するのですが、本来なら必要なもののみチェックを入れますが、
お試しなので [Select all] にチェックを入れて、全部許可しちゃいます。運用環境ではしっかりと吟味してください。Azure AD の画面で後から変更可能です。
6.Application ID と Application secret をコピーしておく
画面に表示された Application ID と Application secret をコピーしておいてください。特に Application secret は二度と確認できませんが、わからなくなったら Azure AD で再発行することができます。
カスタムコネクタを作ってみる
Power Automate を開いて、左側のメニューで [データ] - [カスタムコネクタ] を開いてください。
いろんな作り方ができるのですが、ここでは [一から作成] を選びます。
コネクタ名は任意で OK ですが、ここでは Power BI REST APIs としておきます。[続行] をクリック。
[ホスト] に api.powerbi.com を入力し、右下の [セキュリティ] をクリック
1.認証タイプ で OAuth 2.0 を選択
2.2~8は画面の通り入力。3と4既にはコピーしてある Application ID を Client id に, Application secret を Client secret に入力。
No. | 項目名 | 値 |
---|---|---|
2 | ID プロバイダー | Azure Active Directory |
3 | Client ID | 既にコピーしてある Application ID |
4 | Client secret | 既にコピーしてある Application secret |
5 | Login URL | https://login.windows.net/ |
6 | Tenant ID | common |
7 | Resource URL | https://analysis.windows.net/powerbi/api |
8 | スコープ | openid |
3.8まで入力したら、画面右上の 9.コネクタの作成 をクリック。
リダイレクト URL をコピーしておきます。これを Azure AD の設定画面に張り付けるため、Azure Portal を開きます。すぐに Power Automate に帰ってくるので、Power Automate の画面は開いたまま置いておいてください。
Azure Portal でリダイレクトURIを張り付ける
1.Azure Portal を開き、Azure Active Directory を検索して、開きます
2.Azure AD で画面左側メニューで [アプリの登録] をクリック。最初の手順で Power BI アプリケーション登録ツール にて、付けた名前 Power Automate Custom Connector をクリックする
3.左側で [認証] をクリック
4.[URI の追加] をクリック
5.コピーした URL を張り付けて、画面左上の [保存] をクリック
これで Azure Portal の設定は完了です。Power Automate に戻ります。
Export Report をカスタムコネクタで定義しようとすると Get Reports が必要なことがわかる
ここで再度 Export Report のドキュメントを見ておきましょう
Reports - Export Report
https://docs.microsoft.com/ja-jp/rest/api/power-bi/reports/exportreport
URI を見てみると、パラメータとして [reportId] が必要なことがわかります。なるほど、どのレポートをエクスポートするか指定する必要があるということですね。Power Automate でコネクタとして使用する際に、直に reportId を入力するのもアリですが、できればレポート名を選択して、裏では reportId が指定されているというのが望ましいですね。
これを実現するには、レポートのリストを取得する Get Reports を先に定義しておく必要があります。
Get Reports を定義する
Reports - Get Report
https://docs.microsoft.com/ja-jp/rest/api/power-bi/reports/getreport
この API はパラメータがないので、呼び出すだけです。
定義の画面でまずは画面上部の [全般] に以下の様に入力します。
No. | 項目名 | 値 |
---|---|---|
1 | 概要 | Get Reports |
2 | 説明 | Get Reports |
3 | 操作 ID | GetReports |
続いて [要求] の [+サンプルからのインポート] をクリックします
Get Reports の公式ドキュメントに
GET https://api.powerbi.com/v1.0/myorg/reports
とあるので
動詞: GET
URL: https://api.powerbi.com/v1.0/myorg/reports
と入力して、[インポート] をクリックします
つぎに [応答] も [+既定の応答を追加する] をクリックします
先ほどの公式ドキュメントの [Example] の [Sample Response] の JSON が記載されていますのでこれをコピーして、貼り付けます。
Content-Type application/json
Accept application/json
{
"value": [
{
"datasetId": "cfafbeb1-8037-4d0c-896e-a46fb27ff229",
"id": "5b218778-e7a5-4d73-8187-f10824047715",
"name": "SalesMarketing",
"webUrl": "https://app.powerbi.com//reports/5b218778-e7a5-4d73-8187-f10824047715",
"embedUrl": "https://app.powerbi.com/reportEmbed?reportId=5b218778-e7a5-4d73-8187-f10824047715"
}
]
}
画面右下の [テスト] をクリックし、[テスト] 画面に遷移します。
[テスト] 画面ではまず接続を作成します。[+新しい接続] をクリックして、自身の Power BI アカウントでサインインをしてください。
もしここでうまく接続が作成できない場合は、2.セキュリティ か Azure AD の設定がうまくいっていない可能性がありますので、見直してください。
正常に接続が作成できると、GetReports の [テスト操作] がクリック可能になりますが、
画面右上の [コネクタの更新] をクリックしてから、[テスト操作] をクリックしてください。
コネクタの更新をしておくことで、定義した最新の状態でテストをすることが可能です。
状態が 200 であれば 正常終了 です。ボディを見ると、自身の [マイワークスペース] のレポート一覧が取得できていることがわかります。
これでまずは Get Reports の定義は完了です。
ようやく Export Reports を定義する準備が整いました。
Export Reports を定義する
画面左上のナビゲーションで [3.定義] に戻り、[新しいアクション] をクリックします。
それぞれの項目に以下の様に値を入力してください
No. | 項目名 | 値 |
---|---|---|
1 | 概要 | Export Report |
2 | 説明 | Export Report |
3 | 操作 ID | ExportReport |
[要求] の [+サンプルからのインポート] をクリックします。
Export Reports の公式ドキュメントに
GET https://api.powerbi.com/v1.0/myorg/reports/{reportId}/Export
とあるので
動詞: GET
URL: GET https://api.powerbi.com/v1.0/myorg/reports/{reportId}/Export
これをそのまま入力して、[インポート] をクリックします。
URL 欄に {パラメーター名} と入力するとパラメーターとして認識し、Path で認識されます。
Power Automate のフローで使用する際にレポート名を選択してレポートIDを指定したいから Get Reports を先に定義したのでした。それをこれから設定します。
赤枠で囲んだ [reportId] をクリック - [編集] をクリックしてください
パラメーター設定の画面に遷移するので ドロップダウンの種類 で [ダイナミック] を選択してください。下に 操作ID、値、値の表示名 が出てくるので、以下のように選択します。
No. | 項目名 | 値 |
---|---|---|
1 | 操作 ID | GetReports |
2 | 値 | value[id] |
3 | 値の表示名 | value[name] |
こうすることでフロー作成時に レポート名 を選んで、裏では レポートID を設定するということが可能になります。
パラメーターの設定が終わったら画面左上の [←戻る] で戻ってください。
後はレスポンス(応答)の設定です。[応答] の [+既定の応答を追加する] をクリックしてください。
さて公式ドキュメントの Responses を見てみると…
あれ? JSON がない...
そう、ないのです。この API は pbix ファイルをエクスポートしダウンロードさせるので JSON 形式では返ってきません。
「でも、Medea Types: "application/zip" って書いてあるけど…?」
って思った人、鋭い。
答えは簡単で、pbix ファイルは zip ファイルです。試しにお手元の pbix ファイルの拡張子を zip に変えて、展開してみてください。ね、展開できたでしょ?
Microsoft Office の各種ファイル (docx, pptx, xlsx など) と同様です。
なので application/zip で OK です。
というわけで、ヘッダーに Content-Type application/zip だけ設定しておきましょう
インポートをクリックします。
はい、これで Export Report の定義は完了ですので、画面右下 [テスト→] でテスト画面に遷移します。
テスト画面でいざテスト!って思ったら Export Report がない?
はい、カスタムコネクタを作ってると、これよくあります。ご安心ください。
画面上部にちゃんとメッセージが出てますね、
**「変更をテストするためにコネクタを更新する必要があります」**と。
というわけで、[コネクタの更新] をクリックします。
はい、ちゃんと操作のところに ExportReport が出てきましたね。
早速テストをしてみましょう。
残念ながらテスト時は直に レポートID を入力する必要がありますので、[マイワークスペース] にある適当なレポートの URL を見てください。
https://app.powerbi.com/groups/me/reports/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx/ReportSection
URL の /reports の後ろの xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx が レポートID です。これをコピーして、reportId に張り付けます。
無事に動作すれば、こんな感じで値が返ってきます。ボディはバイナリファイルですので、わけわかんなくて OK です!
いったんここで画面右上の [閉じる] で編集画面を閉じます。
あとは実際にフローで使ってみよう!
というわけで、あとは実際にフローを作って、カスタムコネクタを使いましょうということなんですが、
さすがに長くなり過ぎたので、Vol.2 に書きます。
まとめ
実際にカスタムコネクタを使って、タイトルの「定期的にレポート (pbix) をエクスポートしたい」を実現するのは次回とします。
今回 (Vol.1) はその準備とカスタムコネクタの作り方をわかっていただければ、OK です!
以上ですー。最後まで読んでいただきありがとうございました。次回 Vol.2 もどうぞ!
そして相変わらず、皆様からのリクエスト、お待ちしております。
何かリクエストがあれば、以下までー🤗
Twitter: https://twitter.com/yugoes1021
Facebook: https://www.facebook.com/yugoes1021
LinkedIn: https://www.linkedin.com/in/yugoes1021/