web-dev-qa-db-ja.com

プログラムでPower BIフィルターにパラメーターを渡す

私のアプリケーションでは、Power BIレポートを表示しています。すでに機能しているため、ID(ガイド)ごとにレポートを表示しても問題はありません。

ただし、たとえば、現在の年やレポートを表示する人など、パラメータ化する必要のあるレポートがあります。 それが私の質問です:どうすればいいですか?

具体的には、レポートをHTML _<iframe>_要素内に埋め込みます。 iframe URLをレポート定義のembedUrl(REST API)から受信)から受信したURLに設定します。postMessage()を呼び出すJavaScriptコードで制御しています。

レポート定義:

_{
  "id":"12345678-6418-4b47-ac7c-f8ac7791a0aa",
  "name":"Retail Analysis Sample",
  "webUrl":"https://app.powerbi.com/reports/12345678-6418-4b47-ac7c-f8ac7791a0aa",
  "embedUrl":"https://app.powerbi.com/reportEmbed?reportId=12345678-6418-4b47-ac7c-f8ac7791a0aa"
}
_

レポートをロードするJavaScriptコード:

_function onFrameLoaded() {
    var m = {
        action: "loadReport",
        reportId: reportId,
        accessToken: accessToken
    };

    iframe.contentWindow.postMessage(JSON.stringify(m), "*");
}
_

次に、カスタムアプリケーションのパラメーターでレポートをフィルター処理します。レポートのデータセットをフィルターするために値を送信または渡す方法はありますか?

25
andrew.fox

まず、レポートでフィルターを定義する必要があるため、ユーザーは手動でフィルターを設定できます。

外部ソースからPower BIレポートにパラメーターを渡す(したがってフィルターを設定する)には、2つの方法があります。

a)Power BIアプリケーションの場合

レポートURL(ブラウザーのアドレスバー)でfilterパラメーターを設定することにより、フィルターを指定できます。パラメーターはカスタムフィルタークエリを受け取ります。

_https://app.powerbi.com/groups/me/reports/12345678-6418-4b47-ac7c-f8ac7791a0a7?filter=Store/PostalCode eq '15012'_

「12345678-6418-4b47-ac7c-f8ac7791a0a7」はレポートID、「Store」はデータセット、PostalCodeは除外するパラメーターです。 「eq」は等値演算子です。

URLはエンコードされる必要があるため、最終的なURLは次のようになります。

_https://app.powerbi.com/groups/me/reports/12345678-6418-4b47-ac7c-f8ac7791a0a7?filter=Store/PostalCode%20eq%20%2715012%27_

b)JavaScript sendMessage oDataFilterパラメーター

JavaScript(ブラウザークライアント側)は、パラメーターを使用したpostMessage()呼び出し(上記の質問と同様)によって、ロードされたBIレポートを制御します。レポートをフィルタリングするために設定できる追加オプションoDataFilterがあります。

次のように設定します:_oDataFilter: "Store/PostalCode eq '15012'"_

完全なコードは次のようになります。

_function onFrameLoaded() {
    var m = {
        action: "loadReport",
        reportId: reportId,
        accessToken: accessToken,
        oDataFilter: "Store/PostalCode eq '15012'"
    };

    iframe.contentWindow.postMessage(JSON.stringify(m), "*");
}
_

備考

  • Power BIコードがそれを拒否するため、フィルターパラメーター(データソースまたはパラメーター名)にドットを含めることはできませんsilently無効な名前として。
31
andrew.fox

Microsoftはpowerbi-clientを作成しました。これを使用すると、1つのフィルターを適用するだけでなく、さらに多くのことができます。必要な数のフィルターを適用できます。また、デフォルトページ、デフォルトフィルター、フィルターペインの非表示、ページナビゲーションの非表示などを選択できます。

クライアントはここで見つけることができます: https://Microsoft.github.io/PowerBI-JavaScript/

デモアプリケーションを次に示します。 https://Microsoft.github.io/PowerBI-JavaScript/demo/index.html

ドキュメントは次のとおりです。 https://github.com/Microsoft/PowerBI-JavaScript/wiki

7
Silko