はじめに
Power Apps では Power BI で作成したレポートを、キャンバスアプリへ埋め込むことができるPower BI タイル
コントロールが用意されています。
これを使用することで Power Apps 内で簡単に Power BI のレポートを表示することができます。
やりたいこと
Power Apps に埋め込んだ Power BI タイルにフィルターをかけて Power Apps側からPower BI にクエリをかけてみます。
やりかた
前提
Power BI はURLパラメーターによるフィルタリングをサポートしており、以下のような形でリクエストを行うとフィルタをかけることができます。
https://app.powerbi.com/groups/me/reports/xxxxxxxxxxxxxxxx/ReportSection1?filter={Table}/{Column} eq 'Hoge'
Power Apps で埋め込み URL を取得する
Power BI タイルコントロールをクリックして「プロパティ」→「データ」の「データがありません」をクリックして埋め込むデータを選択します。(この時までに Power BI で埋め込み対象のレポートを作成してダッシュボードにピン止めしておく必要があります)
再び Power BI タイルコントロールをクリックして「詳細情報」→「TileUri」の URL をメモ帳等にコピーしておきます。
クエリを追加する
コピーした TileURL は以下の形式になっているはずです。
https://app.powerbi.com/embed?dashboardId={DashboardID}&tileId={TileID}&config={SomeHash}
この URL の末尾にフィルタークエリを追加します。
https://app.powerbi.com/embed?dashboardId={DashboardID}&tileId={TileID}&config={SomeHash}&filter={TableName}/{ColumnName} eq '{Value}'
当たり前ですが、この時フィルターに指定することができるのは埋め込んでいるレポートに存在するテーブル名とカラム名に限られます。
filter の値を動的に変更する
TileURL の値を以下のようにします。
If(mode=0,
"https://app.powerbi.com/embed?dashboardId={DashboardID}&tileId={TileID}&config={SomeHash}&filter=WebsiteSocialAnalytics/Browser eq 'Edge'",
"https://app.powerbi.com/embed?dashboardId={DashboardID}&tileId={TileID}&config={SomeHash}&filter=WebsiteSocialAnalytics/Browser eq 'Chrome'"
)
これでコンテキスト変数mode
が 0 の時は WebsiteSocialAnalytics テーブルの Browser 列が[Edge]で、それ以外は[Chrome]のデータが表示されるようにフィルタがかかります。
AllowNewAPI を true に設定する
Power BI タイルコントロールのAllowNewAPI
フラグにtrue
を設定します。これは Power BI API の新しいバージョンを使用するかどうかというフラグですが、false(古いAPI)だとフィルタの数が1個まで、などといった制限があるので特段の理由がない限りはtrue
に設定しておきます。
mode 変数を切り替えるボタンを作る
キャンバスにボタンを追加して OnSelect プロパティでmode変数を toggle する処理を書きます。
If(mode=0,
UpdateContext({mode:1}),
UpdateContext({mode:0})
)
完成!
グラフのレイアウトは同じなのでわかりづらいですが、[Number of visits]の数字をみてみるとボタンが押されるたびに数字が変わるのがわかります。