#PowerAutomate で #PowerBI サービスから pbixファイル を自動取得する

2020年4月25日（日）にオンライン開催された「[Power BI 勉強会 @ 東京 #17](https://powerbi.connpass.com/event/174039/)」で下記のような質問がありました。

Q：Power BI のレポートを自動更新するように設定しているが、オフライン状態でも解析したいタイミングがある。そのため自動更新とあわせて Power BI サービスから .pbix ファイルを自動で取得することはできないか？

なるほど、自動化と言えば Power Automate の出番でしょ。と思ってセミナーを聴きながら別画面で調査に入ったのですが・・・

# Power Shell で実施する方法
当方が調査している間に [@kenakamu](https://qiita.com/kenakamu) さんが速攻でPower Shellを利用して実現する手順を Qiita にまとめておりました。

[PowerShell で Power BI サービスから pbix をダウンロードする](https://qiita.com/kenakamu/items/69bb19b01e607a5de55d)

Ken さん、仕事早すぎです。
皆さん、参考になったと思ったらLGTM（いいね！）をクリックしましょうね。

# Power BI サービス から .pbix ファイルを入手する方法
前述で紹介した記事でも紹介されておりますが、Power BI サービスから .pbix ファイルを入手する方法は2つあります。

■方法１：Webブラウザー上でダウンロードする
[Power BI サービスから Power BI Desktop にレポートをダウンロードする (プレビュー)](https://docs.microsoft.com/ja-jp/power-bi/service-export-to-pbix)

なお、権限の関係や Power BI サービス上でサンプルから生成したレポートは上記”ダウンロード”が選択できない状態になっている場合があります。その場合は、現状で対応策が見当たらないのであきらめましょう。

■方法２：Power BI REST APIs を利用する
[Reports - Export Report](https://docs.microsoft.com/en-us/rest/api/power-bi/reports/exportreport)

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

{reportId} にはエクスポートしたいレポートのIDを指定します。

Docsのページで「Try It」をクリックすると、画面上でAPIの実行テストが可能です。自分が発行したレポートを指定すれば問題なく動作することが確認できると思います。また、前述”ダウンロードがクリックできない”レポートを指定するとエラーになるのでお試しくださいｗ
そうなのです。APIであっても、画面上でダウンロードできないレポートは出力することができません。Docsに注意書きありますのでご確認ください。

# Power Automate で自動化してみる
よし！APIがあるなら”やれる”だろう、ということで。Automate で自動化するための手順をざっくりとまとめます。なお、記事投稿時点の内容となりますので、その点ご認識のうえ続きを確認ください。

## 0．Azure AD アプリケーション登録をする
記事投稿時点で Power Automate の Power BI 関連アクションには期待するモノがありません。Automate で今回の目的を達成するには、紹介した Power BI REST APIs を利用する必要があります。加えて、今回利用するAPIはカスタムコネクタを作成する必要があります。そのため、下記URLの手順を参考に Azure AD(以降、AAD)へアプリケーション登録を実施してください。

[Azure AD アプリケーションを登録して Power BI とともに使用する](https://docs.microsoft.com/ja-jp/power-bi/developer/embedded/register-app)

AAD へのアプリケーション登録を実施するには、管理者権限が必要になります。

## 1．レポートIDの確認
Kenさんの記事でもありましたが、念のため。対象のレポートを Power BI サービスで開いてURLから確認できます。

![図0.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/215892/5ddb492f-6733-9f60-a741-810d235ab266.png)

## 2．カスタムコネクター作成
Power Automate を起動して[データ] → [カスタムコネクタ]を選択。右上の[カスタムコネクタの新規作成] → [一から作成] をクリック。
カスタムコネクタの名前を決めて「続行」ボタンをクリック。
![図1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/215892/5253604e-9c7b-1961-b4b3-6c60c63abd42.png)
※OpenAPI ファイル等で既に定義作成済みの方は、適宜そちらをご利用ください。当記事はゼロベースで作成する手順を紹介します。

## 3．全般情報の設定
「全般」の設定を実施します。
![図2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/215892/54cfdd80-12f6-ef33-30c9-0a74e06bfd30.png)


| 項目     | 設定値             |
|--------|-----------------|
| スキーマ   | HTTPS           |
| ホスト    | api.powerbi.com |
| ベースURL | /               |

## 4．セキュリティの設定
「認証タイプ」として「OAuth 2.0」を選択して、その下にある項目に下記を設定します。

| 項目             | 設定                                       |
|----------------|------------------------------------------|
| ID プロバイダー      | Azure Ative Directory                    |
| Client id      | AAD に登録したアプリのアプリケーション ID                 |
| Client securet | AAD に登録したアプリのシークレット                      |
| Login URL      | https://login.windows.net（※自動で設定されるハズ）   |
| Tenant ID      | AAD に登録したアプリのテナントID                      |
| Resource URL   | https://analysis.windows.net/powerbi/api |
| スコープ           | ””（空白）                                   |

設定が完了したら、画面上部にある「コネクタの更新」をクリックします。

## AAD アプリ登録に リダイレクトURI の追加
前述の手順でコネクタの更新が完了すると、リダイレクトURLが作成されます。そのURLをコピーして、AADでアプリ登録した対象の「リダイレクトURI」へ追加してください。

## 定義の設定
Power Automate の画面に戻って「定義」の設定へ進みます。ここで「アクション」を追加して Web API を登録することでフロー上からカスタムコネクタ経由で API をアクションとして利用可能にできます。

「全般」ブロックの概要、説明、操作IDは分かりやすい名前を設定してください。なお、操作IDはスペースが利用できないようです。今回の場合[表示]は"none”で問題なさそうです。

「要求」ブロックの「サンプルからインポート」をクリックして、下記を設定し「インポート」ボタンをクリックするとアクションが自動的に生成されるハズです。
![図3.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/215892/e3bc9858-a9a1-136d-b751-4ac25f5ca28a.png)

| 項目  | 設定                                                           |
|-----|--------------------------------------------------------------|
| 動詞  | GET                                                          |
| URL | https://api.powerbi.com/v1.0/myorg/reports/{reportId}/Export |

問題なければ「コネクタの更新」をクリックして上書き保存しましょう。

## テストの実施
テストの画面で動作確認が可能です。「接続」ブロックで「新しい接続」をクリックすると認証を求められます。設定が間違っていなければ、認証が完了して[選択された接続]にユーザー情報が表示されるハズです。
ここで失敗する場合は、設定が何かしら誤っているので再確認してください。

「操作」ブロックに[reportId]入力欄があるハズです。そこに、エクスポートしたいレポートIDを入力して「テスト操作」をクリックします。「状態 (200)」が返却されてくれば成功です。おめでとうございます。

※ここで認証に失敗を繰り返すと、Power Automate の画面へ再度アクセスした際に「認証の失敗」のような警告が表示される場合があります。その際は、画面の指示に従って設定画面へ遷移し、不要な認証情報を削除してください。

テストで問題がなければカスタムコネクタの作成は完了です。

## フローの作成
作成したカスタムコネクタを利用して、フローを作るだけです。トリガーボタンで作成すると下記のイメージです。

![図4.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/215892/4472593b-1099-9148-d056-3674e298f12f.png)


カスタムコネクタでエクスポートしたいレポートIDを指定しています。

pbix ファイルの保存は「OneDrive for Business」の「ファイルの作成」アクションで実施しています。出力したいパスを指定し、ファイル名を指定します。作成したカスタムコネクタは”.pbix”の状態でエクスポートしてきますので、拡張子を必ず指定してください。

| 項目        | 設定                               |
|-----------|----------------------------------|
| フォルダーのパス  | 出力したいフォルダー                       |
| ファイル名     | 拡張子を”.pbix”でファイル名指定（例：test.pbix） |
| ファイルコンテンツ | カスタムコネクタで取得した[本文]                |

Automate のトリガーやアクションは現時点で Power BI 関連のモノが殆どありません。そのため、Power BI サービス上のデータ更新とあわせて自動化をするのであれば、概ねの時間を予測してタイマーでのトリガーにするのが簡単な対応策かな、と考える次第です。ここまでくれば、改造は簡単ですよね！

# まとめ
- Power BI サービスから REST API で .pbix ファイルがエクスポート可能
- Power Automate で自動化する場合は現状カスタムコネクタ作成が必要
- Power Automate の Power BI 関連アクションは発展途上

厳密には手元にあるPCのローカルに保存できているワケではありません。とはいえ、Power BI が利用できる＝組織アカウントを保有しているので、OneDrive for Businessの同期ツールを利用して「あたかもローカルに保存した」かのように運用することは可能だと考えています。他にもアイディア次第で発展は可能ですので、目的にあわせてデザインしていただければ、ですね。

Automate で Microsoft Graph API を利用する際は HTTP アクションを利用する方法が個人的には主流なのですが、今回利用する Power BI REST APIs を HTTP アクションで上手く処理できませんでした・・・。なので、カスタムコネクタを作成する方法を紹介しました。

もうね、全部AADへの認証を通してトークンとれれば、後はよろしく動作するようになってくれると嬉しいなぁ。もっと言うと、同じMicrosoft ソリューションなんだから、Automate や Power Apps のアクションやコネクターが手厚くなってほしいなぁ、と思った次第です。

それでは、皆さま、素晴らしい Power Platform Life を！