Rapport Power BI

PowerBIReport affiche un rapport Power BI dans le portail aux utilisateurs sans licence Power BI, chaque spectateur ne voyant que ses propres lignes. Il est dans son propre package — PowerPortalsPro.Web.Blazor.PowerBI pour Blazor, @powerportalspro/react-powerbi pour React — donc un portail qui n’affiche aucun rapport ne porte pas le script de Power BI.

React Blazor

Comment ça fonctionne

Le composant nomme un rapport par une clé. Le portail recherche la clé, décide si le spectateur peut voir le rapport, et demande à Power BI un jeton pour lui — en tant qu’identité qu’il est déjà connectée à Dataverse, il n’y a donc rien d’autre à configurer dans le portail. Le jeton porte l’identifiant du visiteur comme nom d’utilisateur : son identifiant de contact, ou son identifiant utilisateur lorsqu’il est connecté au portail par le personnel. Les visiteurs qui ne sont pas connectés obtiennent le nom anonymousd’utilisateur. Le composant renouvelle le jeton quelques minutes avant son expiration, et le rapport conserve son état lorsqu’il le fait.

Chaque spectateur peut demander des jetons de rapport 30 fois par minute — un utilisateur connecté par son compte, un visiteur par son adresse — et se voit refuser avec un 429 au-delà de cela. Un jeton est réutilisé pendant qu’il a le temps de s’exécuter, donc une page ne s’en approche jamais ; cette limite empêche un visionneur de transformer des requêtes répétées en charge sur le portail ou Power BI. Changez-le avec PowerPortalsPro:PowerBIRateLimit:PermitLimit et Window en configuration ; un PermitLimit résultat de 0 l’éteint.

Enregistrement d’un rapport

Quels rapports un portail peut afficher, et à qui, sont des données dans Dataverse plutôt que du code, car chaque environnement intègre des rapports depuis son propre espace de travail. Deux tables dans la solution Power Portals Pro la contiennent :

  • Portail Power BI Report — la clé qu’un composant nomme, et l’espace de travail Power BI ainsi que le rapport qu’il représente. Permettre sans sécurité au niveau ligne est désactivé par défaut : un rapport dont le modèle n’a pas de sécurité au niveau ligne est refusé, car chaque visualiseur verrait chaque ligne.
  • Accès au rapport Power BI du portail — qui peut voir le rapport, et quels rôles de son modèle ils obtient. Chaque ligne est destinée aux détenteurs d’un rôle de portail, à chaque utilisateur connecté, aux visiteurs anonymes ou aux utilisateurs internes — le personnel connecté sous le nom d’eux-mêmes plutôt que de contact — et nomme les rôles du modèle en Power BI Roles, séparés par des virgules.

Un visualiseur voit le rapport lorsque l’une de ses lignes d’accès s’applique à lui, chaque rôle étant nommé par les lignes concernées. Une clé qui ne nomme aucun rapport et un rapport qui n’est pas destiné au spectateur leur semblent identiques : un message indiquant que le rapport n’est pas disponible. Les inscriptions sont lues toutes les quinze minutes ; videz le PowerBIReports cache pour appliquer un changement immédiatement.

Sécurité au niveau des lignes

Power BI applique la sécurité au niveau ligne du rapport au nom d’utilisateur du jeton. Pour garder chaque visualiseur à ses propres lignes, attribuez au modèle un rôle qui compare la colonne contenant un identifiant de contact avec USERNAME():

Le portail vérifie le modèle avant de demander un jeton. Un modèle avec une sécurité au niveau des lignes obtient l’identifiant et les rôles du spectateur dans chaque jeton, et une ligne d’accès qui ne nomme aucun rôle est refusée. Power BI ne vérifie pas les noms de rôles, donc un rôle mal orthographié ne se produit que lorsque le rapport est dessiné : le serveur MCP les compare au modèle lors de l’écriture des lignes d’accès.

Données personnalisées

Un rôle peut filtrer sur autre chose que le spectateur — le numéro de son compte, sa région — via le fichier DAX CUSTOMDATA(). Inscrivez-vous dans IPowerBICustomDataProvider le Program.csserveur : il est demandé pour chaque jeton émis par le portail pour un élément dont le modèle utilise la sécurité au niveau des lignes, avec le visionneur et l’élément, et ce qu’il retourne va dans le jeton. Il s’exécute sur le serveur et n’est jamais extrait du navigateur, car il décide quelles lignes un spectateur voit. Il n’est pas demandé pour un élément affiché avec l’accès Power BI du spectateur.

Le serveur add_powerbi_rls_role MCP écrit ce rôle avec filter: "customdata", en comparant une colonne de texte ou de nombre. Son filtre nécessite également des données personnalisées dans le jeton, donc un jeton sans aucun jeton n’affiche aucune ligne, plutôt que chaque ligne dont la colonne est vide.

Configuration avec le serveur MCP

Le serveur MCP configure tout sauf le rapport lui-même, agissant comme un compte Power BI auquel vous vous connectez une fois par dossier avec dnx PowerPortalsPro.Mcp powerbi login. Ce compte nécessite une licence Power BI Pro. Demandez à votre assistant de créer un rapport, ou appelez vous-même les outils :

  1. create_powerbi_workspace crée l’espace de travail dans lequel vous publiez le rapport depuis Power BI Desktop.
  2. grant_powerbi_workspace_access fait de l’identité du portail un membre de celui-ci.
  3. add_powerbi_rls_role Écrit un rôle dans le modèle du rapport : un rôle qui garde un spectateur sur les lignes de son propre contact, celles de son entreprise, de son entreprise et de ses filiales, ceux qu’une table de cartographie liste sur eux, ou des valeurs fixes — ou un autre affichant chaque ligne. Cela donne au DAX le droit d’ajouter le même rôle dans Power BI Desktop, car la publication du rapport remplace son modèle.
  4. register_powerbi_report et set_powerbi_report_access écrivez les deux tables Dataverse.
  5. check_powerbi vérifie toute la chaîne, connecté en tant que portail lui-même.

Deux paramètres de tenant Power BI sont à modifier pour les administrateurs Fabric : les responsables de service peuvent appeler des API publiques Fabric et intégrer du contenu dans les applications. Les nouveaux locataires activent les deux. Quand l’un ou l’autre est désactivé, check_powerbi indique lequel activer.

Ouverture sur une page, filtrée vers un enregistrement

PageName ouvre le rapport sur une page, puis Filters le resserre aux lignes dont la colonne contient une des valeurs — par exemple, le compte dont parle une page de détails. Changer l’un ou l’autre s’applique au rapport déjà affiché, sans le recharger. Un filtre est une commodité, pas une sécurité : le spectateur peut le supprimer dans son navigateur. Ce qu’il peut voir est décidé par la sécurité au niveau des lignes.

React Blazor

Tableaux de bord et tuiles simples

Un enregistrement peut nommer un tableau de bord, ou une tuile d’un tableau de bord, au lieu d’un rapport — son type d’article, avec l’id du tableau de bord et celui de la tuile. Le même composant l’affiche : PowerBIReport intègre les noms d’enregistrement de la clé. Un tableau de bord indique ajusté à sa largeur, et OnTileClicked (onTileClicked) indique quand une tuile est cliquée et où elle mène. Une page, des filtres, des panneaux et les couleurs du portail ne s’appliquent qu’à un rapport : un tableau de bord ou une tuile indique tel qu’il a été créé.

Les tuiles d’un tableau de bord peuvent provenir de plusieurs modèles sémantiques, et chacun est soumis aux mêmes règles qu’un rapport : un modèle avec une sécurité au niveau des lignes obtient l’identité et les rôles du spectateur, et un autre sans tableau est refusé sauf si l’enregistrement le permet. Une tuile de texte ou une image ne lit aucune ligne et n’a besoin de l’un ou de l’autre.register_powerbi_report prend , et tile pour l’une de ses tuiles, et list_powerbi_reports liste les tableaux de bord et tuiles d’un espace de travail. Les tuiles sont épinglées dans le service Power BI ; il n’y a aucun moyen d’en épingler une depuis dashboardl’extérieur.

Chaque accessoire Power BI de chaque visionneur

Le mode Embed d’un enregistrement peut afficher l’élément avec l’accès Power BI de chaque visiteur au lieu de celui du portail, comme ils le verraient dans Power BI. Power BI applique son propre partage et la sécurité au niveau des lignes des modèles — USERPRINCIPALNAME() c’est le nom avec lequel ils se connectent — donc chaque spectateur a besoin d’un compte professionnel ou scolaire, d’une licence Power BI, et de l’élément partagé avec lui. Les lignes d’accès indiquent toujours qui peut demander ; leurs rôles Power BI ne sont pas utilisés. Cela convient au personnel et aux partenaires qui utilisent déjà Power BI. Pour les clients, l’accès propre au portail ne nécessite aucune licence.

La première fois, le composant propose de connecter le compte professionnel du visionneur à Power BI. Ils se connectent à Microsoft, acceptent que le portail lit leurs rapports et tableaux de bord Power BI, puis reviennent à la page. Ce que cela donne au portail reste sur le serveur, chiffré dans celui de l’hôte IDistributedCache; le navigateur ne reçoit jamais qu’un jeton d’accès éphémère. Avec le cache en mémoire, les spectateurs se reconnectent après le redémarrage du portail, et un cache partagé (Redis, SQL Server) les maintient connectés. Se déconnecter les déconnecte. Un compte Microsoft personnel, Google ou un mot de passe ne peuvent pas se connecter, et une session que quelqu’un usurpe non plus.

Les spectateurs se connectent via l’enregistrement de l’application de connexion Microsoft du portail, qui nécessite les données déléguées Report.Read.All de Power BI et Dashboard.Read.All, Microsoft Graph openid et offline_access, ainsi que l’URI https://<portal host>/signin-powerbide redirection . Le serveur add_powerbi_signin_permissions MCP les ajoute toutes, et register_powerbi_report prend embedMode: "user". Un locataire qui ne permet que le consentement des administrateurs doit qu’un locataire l’accorde une fois. Pour laisser entrer aussi les invités du locataire, définissez PowerBIOptions.TenantId sur le locataire qui détient les espaces de travail.

Couleurs et mode sombre

Par défaut, le rapport prend les couleurs du portail : son thème clair ou sombre, sa couleur d’accent, et la palette de séries utilisées par les propres graphiques du portail. Il suit le thème lorsque le visiteur le change, sans recharger. Les couleurs sont lues depuis le thème Fluent où se trouve le rapport, et appliquées comme thème de rapport Power BI, qui définit la page du rapport, le texte, les axes, le panneau de filtres et la série du rapport. Une couleur que l’auteur du rapport a définie sur un visuel reste telle qu’il l’a définie, et Power BI dessine les onglets de pages sous le rapport dans ses propres couleurs, quel que soit le thème.

ThemeJson donne au rapport un thème à vous à la place, dans le format JSON du thème Power BI ; comme tout thème appliqué à un rapport intégré, il remplace le thème sauvegardé du rapport plutôt que d’y ajouter. UsePortalTheme="false" conserve le thème avec lequel le rapport a été sauvegardé.

React Blazor

Développement et production

Un espace de travail sans capacité reçoit les tokens d’essai d’intégration de Power BI, qui sont en nombre limité, affichent une bannière, et sont destinés au développement et aux tests. En production, mettez l’espace de travail sur une capacité Fabric : create_powerbi_capacity créez-en un dans votre abonnement Azure après avoir indiqué son prix, puis set_powerbi_capacity_state mettez-le en pause. Une capacité en pause ne génère aucun signal. L’intégration pour les visiteurs du portail n’est pas prise en charge dans un espace de travail Premium par utilisateur.

Réagir Blazor

PowerBIReport Classe

Paramètres

Nom
Type
Par défaut
Description
FilterPaneVisiblebool
False
FiltersIReadOnlyList<PowerBIFilter>?
Heightstring
600px
PageNamestring?
PageNavigationVisiblebool
True
ReportKey*string
ThemeJsonstring?
TransparentBackgroundbool
False
UsePortalThemebool
True
Widthstring
100%
Nom: FilterPaneVisible
Type: bool
Par défaut: False
Nom: Filters
Type: IReadOnlyList<PowerBIFilter>?
Nom: Height
Type: string
Par défaut: 600px
Nom: PageName
Type: string?
Nom: PageNavigationVisible
Type: bool
Par défaut: True
Nom: ReportKey*
Type: string
Nom: ThemeJson
Type: string?
Nom: TransparentBackground
Type: bool
Par défaut: False
Nom: UsePortalTheme
Type: bool
Par défaut: True
Nom: Width
Type: string
Par défaut: 100%

Événements

Nom
Type
Description
OnDataSelectedEventCallback<PowerBIDataSelection>
OnErrorEventCallback<string>
OnLoadedEventCallback
OnPageChangedEventCallback<PowerBIPage>
OnRenderedEventCallback
OnTileClickedEventCallback<PowerBITileClick>
Nom: OnDataSelected
Type: EventCallback<PowerBIDataSelection>
Nom: OnError
Type: EventCallback<string>
Nom: OnLoaded
Type: EventCallback
Nom: OnPageChanged
Type: EventCallback<PowerBIPage>
Nom: OnRendered
Type: EventCallback
Nom: OnTileClicked
Type: EventCallback<PowerBITileClick>

Méthodes

Nom
Paramètres
Type
Description
NotifyDataSelectedAsyncPowerBIDataSelection selection
Task
NotifyErrorAsyncstring message
Task
NotifyLoadedAsyncTask
NotifyPageChangedAsyncPowerBIPage page
Task
NotifyRenderedAsyncTask
NotifyTileClickedAsyncPowerBITileClick click
Task
RenewTokenAsyncTask<PowerBIEmbedTokenResponse>
Nom: NotifyDataSelectedAsync
Paramètres: PowerBIDataSelection selection
Type: Task
Nom: NotifyErrorAsync
Paramètres: string message
Type: Task
Nom: NotifyLoadedAsync
Type: Task
Nom: NotifyPageChangedAsync
Paramètres: PowerBIPage page
Type: Task
Nom: NotifyRenderedAsync
Type: Task
Nom: NotifyTileClickedAsync
Paramètres: PowerBITileClick click
Type: Task
Nom: RenewTokenAsync
Type: Task<PowerBIEmbedTokenResponse>