Power BI レポートをPower Apps モデル駆動アプリ/Dynamics365 に埋め込んでコンテキストフィルターを適用する

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2392887/1d6fe500-f91b-42ab-ed36-de6525223d4c.png)
## 実装までのステップ
① Power BI レポートを用意する
② Power BIレポートを埋め込むメインフォームを含むソリューションを作成する
③ メインフォームにPower BIを埋め込むタブを追加してソリューションをエクスポートする
③ XMLファイルを編集してPowerBIパラメータとフィルタを挿入する
⑤ソリューションのインポートとカスタマイズの公開

## 参考ドキュメント
公式のDocは下記になります。
ソリューションエクスポートやXML/JSONの編集に慣れている方はこちらでも手順を確認できます。今回は**私のような市民開発者"にも分かるように一部内容を補填しながら手順を記載**していきます。

https://docs.microsoft.com/ja-jp/powerapps/maker/model-driven-apps/embed-powerbi-report-in-system-form#embed-with-contextual-filtering





## ① Power BI レポートを用意する
まず最初に、検証で使うPower BIレポートを用意しましょう。
今回はDynamics 365 Salesでの実装を想定して下記テンプレートを利用しますが、自由なものを使っていただいて構いません。

https://docs.microsoft.com/ja-jp/dynamics365/sales/configure-sales-template-apps

全取引先企業の商談情報が反映されているPower BIレポートを、**開いている取引先企業レコードに関連する商談のみ**に絞り込まれるよう実装していきます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2392887/545292c7-ae2e-ef08-9d82-e416ced56c1d.png)


↑↑ 完成イメージ ↓↓
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2392887/1d6fe500-f91b-42ab-ed36-de6525223d4c.png)


## ② Power BIレポートを埋め込むメインフォームを含むソリューションを作成する
ここからはソリューションをエクスポートしてXML編集を行うための下準備をしていきましょう。

新規でソリューションを作成し、Power BIを埋め込むテーブルとメインフォームを追加します。
（今回は取引先企業テーブルと既存取引先企業メインフォームを追加）
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2392887/3e1eb835-ee74-64da-da47-2ac6545f6f21.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2392887/15d7c670-5516-bed0-6b71-7526db07fd59.png)





## ③ メインフォームにPower BIを埋め込むタブを追加してソリューションをエクスポートする
次に、今回のPower BIを埋め込むためのタブを作っておきましょう。
既存のメインフォームに以下のようにタブを追加しました。

この時、**新しいタブに作成されたセクションのスキーマ名**を確認しておきましょう。
（後ほどXML編集でPower BIを挿入するセクションを指定するのに必要）
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2392887/7c3d5e96-a0e9-0a9b-c26d-6a9ee0d46cc8.png)



最後に、作成したソリューションを。**マネージドソリューションとしてエクスポート**します。
メインフォームの編集時にカスタマイズの公開を実施していない場合はここで**すべての変更を公開する**のをお忘れなく。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2392887/997daf49-5581-fce1-b761-2192b0b8604e.png)


## ④XMLファイルを編集してPowerBIパラメータとフィルタを挿入する
ここからがいよいよ本番、エディターでXMLファイルを開いて直接Power BIパラメータとフィルタを挿入する作業に入ります。PCにエディターをインストールしていない方は事前準備が必要です。

https://sukkiri.jp/technologies/devtools/vscode_win.html?msclkid=3e09336db0b811ecaaaf8961b0c2b302

https://sukkiri.jp/technologies/devtools/vscode_mac.html


まずはエクスポートしたZipファイルの中身を確認し、Customizationファイルを開きます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2392887/db9e3469-eb37-5790-9b0e-08b3137e5497.png)

エディタでスクリプトを表示し、Power BIを埋め込むタブを見つけてノードを編集していきます。
（ステップ③で確認したセクションのスキーマ名をCtrl+Fでページ検索して該当箇所にジャンプ）
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2392887/2cfade84-8f41-0188-73e8-a62fa02de7af.png)

まずはcellノードの値を丸ごと下記のコードで置き換えます。

```xml
<cell id="{7d18b61c-c588-136c-aee7-03e5e74a09a1}" showlabel="true" rowspan="20" colspan="1" auto="false" solutionaction="Added">
　 <labels>
  　　 <label languagecode="1033" description="Accounts (Parent Account)"/>
 　</labels>
 　<control id="unfilteredreport" classid="{8C54228C-1B25-4909-A12A-F2B968BB0D62}">
      <parameters>
         <PowerBIGroupId>[①PowerBI グループID]</PowerBIGroupId>
         <PowerBIReportId>[②PowerBI レポートID]</PowerBIReportId>
         <TileUrl>https://[③Power BI タイトルURL]</TileUrl>
         <PowerBIFilter>{"Filter": "[{\"$schema\":\"basic\",\"target\":{\"table\":\"[④Power BIのテーブル名]\",\"column\":\"[⑤Power BIのカラム名]\"},\"operator\":\"In\",\"values\":[$a],\"filterType\":1}]", "Alias": {"$a": "[⑥モデル駆動アプリのカラム名]"}}<font color="Red"></PowerBIFilter> </font>
      </parameters>
   </control>
</cell>
```

それでは、①～⑥の値をどこから取ってくるか説明します。

**①Power BIグループID：Power BI URLのgroup/以降**
※埋め込むレポートをマイワークスペースに格納している場合は"00000000-0000-0000-0000-000000000000"を挿入。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2392887/a0eb31e5-8264-1f39-f57e-23432b36b73d.png)

**②Power BIレポートID：Power BI URLのreports/以降**
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2392887/3d190575-10cd-a04c-c5be-0545251b3249.png)

**③Power BIタイトルURL：Power BI URLのファイル＞レポートの埋め込み＞Webサイトまたはポータル**
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2392887/16e70371-2ad6-40d5-025a-3af7f75974b0.png)

**④～⑥：フィルターのロジックを作成**
| 項目 | 内容 |
|:-:|:-:|
|④Power BIのテーブル名：  | フィルタリングの対象にしたい**Power BIレポートのテーブル名**を指定します。  |
|⑤Power BIのカラム名：   |フィルタリングの対象にしたいPower BI**レポートのカラム名**を指定します。   |
|⑥モデル駆動型アプリのカラム名：   |フィルタリングのロジックとして**モデル駆動型アプリのレコードから取得するカラム**を指定します。   

**完成イメージ**
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2392887/51d4440f-fa7e-b8e3-0cb6-ee77a4bf7c42.png)



## ⑤ソリューションのインポートとカスタマイズの公開
インポート前に、**既存のソリューションを環境から削除**する必要があります。
（既に一度インポート済みで、更新版をインポートする際は削除の必要なし）
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2392887/f523e9ff-dcd7-b2af-2ec6-24b2c8f58d4c.png)



実際のアプリケーション画面で反映を確認してみましょう。
Account Nameによってレポートのデータが絞り込まれているのが確認出来たら完了です！
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2392887/1d6fe500-f91b-42ab-ed36-de6525223d4c.png)