Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationEventAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
12
Help us understand the problem. What is going on with this article?

More than 1 year has passed since last update.

@yugoes1021

[Power BI Tips]定期的にレポート (pbix) をエクスポートしたい ~ Power Automate / Azure Logic Apps のカスタムコネクタの作り方 ~ Vol.1

先日の勉強会でこんな質問がありました

「定期的に Power BI レポートファイル (pbix) をバックアップしておきたいのですが、何か方法はないですか?」

なるほどー、そんな需要があるんですねー。と勉強になりました。

勉強会では「Power BI REST APIExport Report があるから、それを使えばできるよ」って @kenakamu さんが回答してくれて、Qiita の記事を書いてくれました。
PowerShell で Power BI サービスから pbix をダウンロードする

↑ の記事では PowerShellPower 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 に登録することで、公式にコネクタとして、認定してもらうことが可能です。そうすると、以下の様に検索すると、コネクタが表示されるようになります。
image.png

自組織内のみで使用する場合は、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

image.png
左側の [Reports] の部分がレポートに関する Power BI REST API です。
image.png
見てわかる通り、どうやら 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 のアカウントでサインインする
image.png
3.[Next] ボタンで次に進む
image.png
4.Application Name, Application Type, Home Page URL, Redirect URL を入力する
image.png

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 accessSelect all を選択する
このアプリケーションがどの API を実行できるかを選択するのですが、本来なら必要なもののみチェックを入れますが、
お試しなので [Select all] にチェックを入れて、全部許可しちゃいます。運用環境ではしっかりと吟味してください。Azure AD の画面で後から変更可能です。
image.png
6.Application IDApplication secret をコピーしておく
画面に表示された Application IDApplication secret をコピーしておいてください。特に Application secret は二度と確認できませんが、わからなくなったら Azure AD で再発行することができます。
image.png

カスタムコネクタを作ってみる

Power Automate を開いて、左側のメニューで [データ] - [カスタムコネクタ] を開いてください。
image.png
いろんな作り方ができるのですが、ここでは [一から作成] を選びます。
image.png
コネクタ名は任意で OK ですが、ここでは Power BI REST APIs としておきます。[続行] をクリック。
image.png
[ホスト] に api.powerbi.com を入力し、右下の [セキュリティ] をクリック
image.png

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.コネクタの作成 をクリック。
image.png
リダイレクト URL をコピーしておきます。これを Azure AD の設定画面に張り付けるため、Azure Portal を開きます。すぐに Power Automate に帰ってくるので、Power Automate の画面は開いたまま置いておいてください。

Azure Portal でリダイレクトURIを張り付ける

1.Azure Portal を開き、Azure Active Directory を検索して、開きます
image.png
2.Azure AD で画面左側メニューで [アプリの登録] をクリック。最初の手順で Power BI アプリケーション登録ツール にて、付けた名前 Power Automate Custom Connector をクリックする
image.png
3.左側で [認証] をクリック
image.png
4.[URI の追加] をクリック
image.png
5.コピーした URL を張り付けて、画面左上の [保存] をクリック
image.png

これで 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
image.png
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
image.png
image.png
この API はパラメータがないので、呼び出すだけです。
image.png
定義の画面でまずは画面上部の [全般] に以下の様に入力します。

No. 項目名
1 概要 Get Reports
2 説明 Get Reports
3 操作 ID GetReports

続いて [要求][+サンプルからのインポート] をクリックします
image.png

Get Reports の公式ドキュメントに

GetReports
GET https://api.powerbi.com/v1.0/myorg/reports

とあるので
動詞: GET
URL: https://api.powerbi.com/v1.0/myorg/reports
と入力して、[インポート] をクリックします

つぎに [応答][+既定の応答を追加する] をクリックします

先ほどの公式ドキュメントの [Example][Sample Response] の JSON が記載されていますのでこれをコピーして、貼り付けます。
image.png

ヘッダー
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"
    }
  ]
}

image.png
画面右下の [テスト] をクリックし、[テスト] 画面に遷移します。
[テスト] 画面ではまず接続を作成します。[+新しい接続] をクリックして、自身の Power BI アカウントでサインインをしてください。
もしここでうまく接続が作成できない場合は、2.セキュリティAzure AD の設定がうまくいっていない可能性がありますので、見直してください。
image.png
正常に接続が作成できると、GetReports[テスト操作] がクリック可能になりますが、
画面右上の [コネクタの更新] をクリックしてから、[テスト操作] をクリックしてください。
コネクタの更新をしておくことで、定義した最新の状態でテストをすることが可能です。
image.png
状態が 200 であれば 正常終了 です。ボディを見ると、自身の [マイワークスペース] のレポート一覧が取得できていることがわかります。

これでまずは Get Reports の定義は完了です。
ようやく Export Reports を定義する準備が整いました。

Export Reports を定義する

画面左上のナビゲーションで [3.定義] に戻り、[新しいアクション] をクリックします。
image.png
image.png
それぞれの項目に以下の様に値を入力してください

No. 項目名
1 概要 Export Report
2 説明 Export Report
3 操作 ID ExportReport

[要求][+サンプルからのインポート] をクリックします。
image.png
Export Reports の公式ドキュメントに

ExportReports
GET https://api.powerbi.com/v1.0/myorg/reports/{reportId}/Export

とあるので
動詞: GET
URL: GET https://api.powerbi.com/v1.0/myorg/reports/{reportId}/Export
これをそのまま入力して、[インポート] をクリックします。
image.png
URL 欄に {パラメーター名} と入力するとパラメーターとして認識し、Path で認識されます。
Power Automate のフローで使用する際にレポート名を選択してレポートIDを指定したいから Get Reports を先に定義したのでした。それをこれから設定します。

赤枠で囲んだ [reportId] をクリック - [編集] をクリックしてください
image.png
image.png
パラメーター設定の画面に遷移するので ドロップダウンの種類[ダイナミック] を選択してください。下に 操作ID値の表示名 が出てくるので、以下のように選択します。

No. 項目名
1 操作 ID GetReports
2 value[id]
3 値の表示名 value[name]

こうすることでフロー作成時に レポート名 を選んで、裏では レポートID を設定するということが可能になります。
パラメーターの設定が終わったら画面左上の [←戻る] で戻ってください。

後はレスポンス(応答)の設定です。[応答][+既定の応答を追加する] をクリックしてください。
image.png

さて公式ドキュメントの Responses を見てみると…
image.png
あれ? JSON がない...
そう、ないのです。この APIpbix ファイルをエクスポートしダウンロードさせるので JSON 形式では返ってきません。

「でも、Medea Types: "application/zip" って書いてあるけど…?」

って思った人、鋭い。
答えは簡単で、pbix ファイルは zip ファイルです。試しにお手元の pbix ファイルの拡張子を zip に変えて、展開してみてください。ね、展開できたでしょ?
Microsoft Office の各種ファイル (docx, pptx, xlsx など) と同様です。

なので application/zip で OK です。
というわけで、ヘッダーに Content-Type application/zip だけ設定しておきましょう
image.png
インポートをクリックします。

はい、これで Export Report の定義は完了ですので、画面右下 [テスト→] でテスト画面に遷移します。
image.png
テスト画面でいざテスト!って思ったら Export Report がない?
はい、カスタムコネクタを作ってると、これよくあります。ご安心ください。
画面上部にちゃんとメッセージが出てますね、
「変更をテストするためにコネクタを更新する必要があります」と。

というわけで、[コネクタの更新] をクリックします。
image.png
はい、ちゃんと操作のところに ExportReport が出てきましたね。
早速テストをしてみましょう。
残念ながらテスト時は直に レポートID を入力する必要がありますので、[マイワークスペース] にある適当なレポートの URL を見てください。

URL
https://app.powerbi.com/groups/me/reports/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx/ReportSection

URL の /reports の後ろの xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxxレポートID です。これをコピーして、reportId に張り付けます。
image.png
無事に動作すれば、こんな感じで値が返ってきます。ボディはバイナリファイルですので、わけわかんなくて 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/

12
Help us understand the problem. What is going on with this article?
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
12
Help us understand the problem. What is going on with this article?