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


実装までのステップ

① Power BI レポートを用意する
② Power BIレポートを埋め込むメインフォームを含むソリューションを作成する
③ メインフォームにPower BIを埋め込むタブを追加してソリューションをエクスポートする
③ XMLファイルを編集してPowerBIパラメータとフィルタを挿入する
⑤ソリューションのインポートとカスタマイズの公開

参考ドキュメント

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

① Power BI レポートを用意する

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

全取引先企業の商談情報が反映されているPower BIレポートを、開いている取引先企業レコードに関連する商談のみに絞り込まれるよう実装していきます。

↑↑ 完成イメージ ↓↓

② Power BIレポートを埋め込むメインフォームを含むソリューションを作成する

それでは、ここからはソリューションをエクスポートしてXML編集を行うための下準備をしていきましょう。

新規でソリューションを作成し、Power BIを埋め込むテーブルとメインフォームを追加します。
(今回は取引先企業テーブルと既存取引先企業メインフォームを追加)

③ メインフォームにPower BIを埋め込むタブを追加してソリューションをエクスポートする

次に、今回のPower BIを埋め込むためのタブを作っておきましょう。
既存のメインフォームに以下のようにタブを追加しました。

この時、新しいタブに作成されたセクションのスキーマ名を確認しておきましょう。
(後ほどXML編集でPower BIを挿入するセクションを指定するのに必要)

最後に、作成したソリューションを。マネージドソリューションとしてエクスポートします。
メインフォームの編集時にカスタマイズの公開を実施していない場合はここですべての変更を公開するのをお忘れなく。

④XMLファイルを編集してPowerBIパラメータとフィルタを挿入する

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

まずはエクスポートしたZipファイルの中身を確認し、Customizationファイルを開きます。

エディタでスクリプトを表示し、Power BIを埋め込むタブを見つけてノードを編集していきます。
(ステップ③で確認したセクションのスキーマ名をCtrl+Fでページ検索して該当箇所にジャンプ)

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

<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"を挿入。

②Power BIレポートID:Power BI URLのreports/以降

③Power BIタイトルURL:Power BI URLのファイル>レポートの埋め込み>Webサイトまたはポータル

④~⑥:フィルターのロジックを作成

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

完成イメージ

⑤ソリューションのインポートとカスタマイズの公開

インポート前に、既存のソリューションを環境から削除する必要があります。
(既に一度インポート済みで、更新版をインポートする際は削除の必要なし)

実際のアプリケーション画面で反映を確認してみましょう。
Account Nameによってレポートのデータが絞り込まれているのが確認出来たら完了です!