Power BI レポート

PowerBIReport Power BIライセンスを持っていないユーザーに対しては、ポータル内でPower BIレポートを表示します。各ビューアは自分の行のみを表示します。これは独自のパッケージに含まれており、Blazorは PowerPortalsPro.Web.Blazor.PowerBI 、ReactはReact @powerportalspro/react-powerbi 、レポートがないポータルにはPower BIのスクリプトは含まれません。

React Blazor

仕組み

コンポーネントはキーでレポートに名前を付けます。ポータルはキーを調べ、ビューアがレポートを見られるかどうかを判断し、Power BIにトークンを求めます。これはすでにDataverseに接続されているアイデンティティなので、ポータルで設定する必要はなくなります。トークンにはビューアのIDがユーザー名として記載されます。連絡先IDや、スタッフがポータルにサインインしている場合はユーザーID。サインインしていない訪問者はユーザー名をその anonymous受け取ります。コンポーネントはトークンが期限切れになる数分前に更新し、期限切れ後もレポートの状態を維持します。

各ビューアは1分間に30回、アカウントでサインインしたユーザー、アドレスで訪問者を報告トークンの要求をし、429で拒否されます。トークンは実行時間がある間に再利用されるため、ページが近づくことはありません。この制限により、繰り返しのリクエストをポータルやPower BIに負荷に変えるのを防ぎます。設定 PowerPortalsPro:PowerBIRateLimit:PermitLimit と Window で変更してください。 PermitLimit 0になると停止します。

報告の登録

どのレポートをポータルで誰に表示するかは、コードではなくDataverse内のデータです。なぜなら、各環境が独自のワークスペースからレポートを埋め込んでいるからです。Power Portals Proソリューションの2つのテーブルにこのレポートが収録されています:

  • ポータルPower BIレポート — コンポーネント名のキーと、それが代表するPower BIワークスペースとレポートです。 「行レベルのセキュリティなしに許可 」はデフォルトでオフです。行レベルのセキュリティがないモデルのレポートは拒否されます。なぜなら、すべてのビューアがすべての行を視認してしまうからです。
  • ポータルPower BIレポートアクセス — 誰がレポートを見ることができるか、そしてそのモデルの役割がどのものか。各行はポータル役割の保持者、サインイン済みユーザー、匿名の訪問者、または内部ユーザー(スタッフは連絡先ではなく自分自身としてサインイン)用で、モデルの役割をカンマで区切ってPower BIの役割に記載しています。

ビューアは、アクセス行のいずれかが適用されるときにレポートを目にします。すべての役割は名前を適用する行です。レポートを含まないキーとビューア向けでないレポートは同じように見えます:レポートが利用可能でないというメッセージです。登録は15分ごとに読み込まれます。 PowerBIReports キャッシュをクリアして、一度に変更を適用してください。

行レベルのセキュリティ

Power BIはレポートの行レベルのセキュリティをトークンのユーザー名に適用します。各ビューアを自分の行に保つために、モデルに連絡先IDを持つ列を USERNAME()と比較する役割を与えます。

ポータルはトークンを求める前にモデルを確認します。行レベルのセキュリティを持つモデルは、すべてのトークンにビューアのIDとロールを取得し、ロール名のないアクセス行は拒否されます。Power BIはロール名をチェックしないため、スペルミスロールはレポート作成時にのみ失敗します。MCPサーバーはアクセス行を書き込む際にモデルと照合します。

カスタムデータ

ロールはDAXのCUSTOMDATA()を通じてビューアが誰であるか、つまりアカウント番号や地域以外のものでフィルタリングできます。サーバーのProgram.csに登録IPowerBICustomDataProvider:ビューアーとアイテムの行レベルのセキュリティを持つモデルのアイテムに対してポータルが発行するすべてのトークンを要求し、返すものはトークンに格納されます。サーバー上で動作し、ブラウザからは削除されません。なぜならビューアがどの行を見るかを決めるからです。ビューア自身のPower BIアクセスで表示されたアイテムを要求されることもありません。

MCPサーバーの add_powerbi_rls_role は、テキストカラムや数字カラムを比較する filter: "customdata"でこのような役割を書き込みます。また、フィルターはトークンにカスタムデータが必要なため、空欄のすべての行が空の代わりに、行がありません。

MCPサーバーでのセットアップ

MCPサーバーはレポート自体以外のすべてを設定し、Power BIアカウントとして機能し、フォルダごとに dnx PowerPortalsPro.Mcp powerbi loginで一度だけサインインします。そのアカウントにはPower BI Proライセンスが必要です。アシスタントにレポートの設定を依頼するか、自分でツールに連絡してください:

  1. create_powerbi_workspace Power BI Desktopからレポートを公開するワークスペースを作成します。
  2. grant_powerbi_workspace_access ポータルのアイデンティティをそのメンバーにします。
  3. add_powerbi_rls_role レポートのモデルに役割を書き込む:ビューアを自分の連絡先の行、会社、会社およびその子会社の行、マッピングテーブルがリストする行、固定値、あるいはすべての行を示す役割を保持する役割。また、レポートを再度公開するとモデルが置き換えられるため、DAXにPower BI Desktopでも同じ役割を追加できる。
  4. register_powerbi_report そして set_powerbi_report_access 2つのDataverseテーブルを書きます。
  5. check_powerbi ポータル自体としてサインインしたチェーン全体を確認した。

Power BIのテナント設定のうち2つはFabric管理者が変更可能です。 サービスプリンシパルはFabricの公開APIを呼び出し 、 アプリにコンテンツを埋め込むことができます。新しいテナントは両方をオンにします。どちらかがオフになると、 check_powerbi どちらをオンにするか指示されます。

ページを開き、記録にフィルターをかけて

PageName レポートをページ上で開き、 Filters 詳細ページが対象となるカラムの行に絞り込む。どちらかを変更すると、既に表示されているレポートに適用され、再読み込みせずに済みます。フィルターは利便性のためであり、セキュリティではありません。閲覧者はブラウザで削除できます。閲覧者が見るものは行レベルのセキュリティによって決まります。

React Blazor

ダッシュボードと単一タイル

登録はダッシュボード、またはダッシュボードのタイルの一つにレポートではなく名前を付けることができます。レポートには「 アイテムタイプ」とダッシュボードのIDとタイルが記載されています。同じコンポーネントが表示します: PowerBIReport はキーの登録名に埋め込まれます。ダッシュボードは幅に合わせてフィットし、 OnTileClicked (onTileClicked)はタイルをクリックしたタイミングとその先を示します。ページ、フィルター、ペイン、ポータルの色はレポートにのみ適用されます:ダッシュボードやタイルは作成時の様子を表示します。

ダッシュボードのタイルは複数のセマンティックモデルから来ることができ、それぞれレポートと同じルールに従います。行レベルのセキュリティを持つモデルはビューアのアイデンティティと役割を取得し、持たないモデルは登録が許可しない限り拒否されます。テキストや画像のタイルは行を読み取らず、どちらも必要ありません。 register_powerbi_report は dashboardを取り、 tile のタイルを1つに取り、ワークスペースのダッシュボードやタイルを一覧 list_powerbi_reports します。タイルはPower BIサービス内でピン留めされています。外部からタイアリングする方法はありません。

各ビューアのPower BIアクセス権

登録の 埋め込みモードで は、各ビューアのPower BIアクセス権でアイテムを表示できます。これはPower BIで見るものとは異なります。Power BIは独自の共有とモデルの行レベルのセキュリティを適用します( USERPRINCIPALNAME() がサインイン名です)。したがって、各ビューアは職場または学校のアカウント、Power BIライセンス、そして共有されたアイテムが必要です。アクセス行には「誰が質問してもよいか」が記載されています。彼らのPower BIの役割は使われていません。これはすでにPower BIを使っているスタッフやパートナーに適しています。顧客にとっては、ポータル自身のアクセスにはライセンスが不要です。

最初は、コンポーネントがビューアの仕事用アカウントをPower BIに接続することを提案します。ビューアはMicrosoftにサインインし、ポータルにPower BIレポートやダッシュボードを読み取らせてからページに戻ります。ポータルに与えるものはサーバー上に残り、ホストの IDistributedCacheで暗号化され、ブラウザは短期間しかアクセストークンを受け取りません。インメモリキャッシュがあれば、ポータル再起動後にビューアは再び接続でき、共有キャッシュ(Redis、SQL Server)で接続が保たれます。サインアウトすると接続が解除されます。個人のMicrosoftアカウント、Google、パスワードは接続できず、誰かがなりすますセッションも接続できません。

ビューアはポータルのMicrosoftサインインアプリ登録を通じて接続し、Power BIの委任されたReport.Read.AllとDashboard.Read.All、Microsoft Graphのopenidとoffline_access、そしてリダイレクトURIhttps://<portal host>/signin-powerbiが必要です。MCPサーバーのadd_powerbi_signin_permissionsがそれらすべてを追加し、register_powerbi_reportembedMode: "user"かかります。管理者のみの同意を許可するテナントは、一度だけ許可を得る必要があります。テナントのゲストも入れたい場合は、ワークスペースを保持するテナントにPowerBIOptions.TenantId設定してください。

カラーとダークモード

デフォルトではレポートはポータルの色、すなわち明暗のテーマ、アクセントカラー、ポータル自身のチャートが使うシリーズパレットを使います。訪問者がテーマを切り替えると、リロードせずにそのテーマに従います。色はレポートが置かれたFluentテーマから読み取られ、Power BIレポートテーマとして適用されます。このテーマはレポートのページ、テキスト、軸、フィルターペイン、シリーズを設定します。レポートの著者が設定した色は設定通りに維持され、Power BIはテーマに関わらずレポートの下にあるページのタブを独自の色で描画します。

ThemeJson 代わりにレポートに独自のテーマを与え、Power BIのテーマJSON形式で設定します。埋め込みレポートに適用されるテーマと同様に、レポートに付け加えるのではなく、保存されたテーマを置き換えます。 UsePortalTheme="false" レポートに保存されたテーマを保持します。

React Blazor

開発と生産

容量がないワークスペースはPower BIのトライアル埋め込みトークンを受け取り、数に制限があり、バナーが表示され、開発やテスト用です。本番環境では、ワークスペースをFabric容量に設定してください。 create_powerbi_capacity 価格表示後にAzureサブスクリプションにFabricを作成し、 set_powerbi_capacity_state 一時停止します。一時停止された容量はレポートを受け取りません。Premiumユーザーごとのワークスペースではポータル訪問者への埋め込みはサポートされていません。

反応してください ブレイザー

PowerBIReport クラス

パラメータ

名称
種類
デフォルト
概要
FilterPaneVisiblebool
False
FiltersIReadOnlyList<PowerBIFilter>?
Heightstring
600px
PageNamestring?
PageNavigationVisiblebool
True
ReportKey*string
ThemeJsonstring?
TransparentBackgroundbool
False
UsePortalThemebool
True
Widthstring
100%
名称: FilterPaneVisible
種類: bool
デフォルト: False
名称: Filters
種類: IReadOnlyList<PowerBIFilter>?
名称: Height
種類: string
デフォルト: 600px
名称: PageName
種類: string?
名称: PageNavigationVisible
種類: bool
デフォルト: True
名称: ReportKey*
種類: string
名称: ThemeJson
種類: string?
名称: TransparentBackground
種類: bool
デフォルト: False
名称: UsePortalTheme
種類: bool
デフォルト: True
名称: Width
種類: string
デフォルト: 100%

イベント

名称
種類
概要
OnDataSelectedEventCallback<PowerBIDataSelection>
OnErrorEventCallback<string>
OnLoadedEventCallback
OnPageChangedEventCallback<PowerBIPage>
OnRenderedEventCallback
OnTileClickedEventCallback<PowerBITileClick>
名称: OnDataSelected
種類: EventCallback<PowerBIDataSelection>
名称: OnError
種類: EventCallback<string>
名称: OnLoaded
種類: EventCallback
名称: OnPageChanged
種類: EventCallback<PowerBIPage>
名称: OnRendered
種類: EventCallback
名称: OnTileClicked
種類: EventCallback<PowerBITileClick>

方法

名称
パラメータ
種類
概要
NotifyDataSelectedAsyncPowerBIDataSelection selection
Task
NotifyErrorAsyncstring message
Task
NotifyLoadedAsyncTask
NotifyPageChangedAsyncPowerBIPage page
Task
NotifyRenderedAsyncTask
NotifyTileClickedAsyncPowerBITileClick click
Task
RenewTokenAsyncTask<PowerBIEmbedTokenResponse>
名称: NotifyDataSelectedAsync
パラメータ: PowerBIDataSelection selection
種類: Task
名称: NotifyErrorAsync
パラメータ: string message
種類: Task
名称: NotifyLoadedAsync
種類: Task
名称: NotifyPageChangedAsync
パラメータ: PowerBIPage page
種類: Task
名称: NotifyRenderedAsync
種類: Task
名称: NotifyTileClickedAsync
パラメータ: PowerBITileClick click
種類: Task
名称: RenewTokenAsync
種類: Task<PowerBIEmbedTokenResponse>