Informe de Power BI

PowerBIReport muestra un informe de Power BI en el portal a usuarios que no tienen licencia de Power BI, y cada espectador solo ve sus propias filas. Está en su propio paquete — PowerPortalsPro.Web.Blazor.PowerBI para Blazor, @powerportalspro/react-powerbi para React — por lo que un portal que no muestra informes no lleva el script de Power BI.

React Blazor

Cómo funciona

El componente nombra un informe mediante una clave. El portal busca la clave, decide si el espectador puede ver el informe y pide a Power BI un token para ellos — como la identidad que ya tiene con Dataverse, así que no hay nada más que configurar en el portal. El token lleva el ID del espectador como nombre de usuario: su ID de contacto, o su ID de usuario cuando el personal inicia sesión en el portal. Los visitantes que no están conectados reciben el nombre anonymousde usuario. El componente renueva el token unos minutos antes de que caduque y el informe mantiene su estado cuando lo hace.

Cada visor puede pedir tokens de informe 30 veces por minuto — un usuario iniciado sesión por su cuenta, un visitante por su dirección — y se le rechaza con un 429 más allá de esa cifra. Un token se reutiliza mientras tiene tiempo para ejecutarse, por lo que una página nunca se acerca a él; el límite impide que un visor convierta solicitudes repetidas en una carga en el portal o Power BI. Cámbialo con PowerPortalsPro:PowerBIRateLimit:PermitLimit y Window en configuración; una PermitLimit cantidad de 0 lo apaga.

Registro de un informe

Qué informes puede mostrar un portal, y a quién, son datos en Dataverse en lugar de código, porque cada entorno incrusta informes desde su propio espacio de trabajo. Dos tablas en la solución Power Portals Pro lo mantienen:

  • Portal Power BI Report — la clave que un componente nombra, y el espacio de trabajo y el informe de Power BI que representa. Permitir sin seguridad a nivel de fila está desactivado por defecto: un informe cuyo modelo no tiene seguridad a nivel de fila es rechazado, porque todos los espectadores verían cada fila.
  • Portal Power BI Report Access — quién puede ver el informe y qué roles de su modelo tienen. Cada fila es para titulares de un rol en el portal, todos los usuarios iniciados sesión, visitantes anónimos o usuarios internos — el personal iniciado sesión como él mismo en lugar de como contacto — y nombra los roles del modelo en Power BI Roles, separados por comas.

Un espectador ve el informe cuando cualquiera de sus filas de acceso se aplica a él, y en cada rol se nombran las filas que se aplican. Una clave que no nombra ningún informe y un informe que no es para el visor se ven igual: un mensaje de que el informe no está disponible. Los registros se leen cada quince minutos; borra la PowerBIReports caché para aplicar un cambio de inmediato.

Seguridad a nivel de fila

Power BI aplica la seguridad a nivel de fila del informe al nombre de usuario del token. Para mantener cada visor en sus propias filas, asigna al modelo un rol que compare la columna que contiene un id de contacto con USERNAME():

El portal comprueba el modelo antes de pedir un token. Un modelo con seguridad a nivel de fila obtiene el id y los roles del espectador en cada token, y una fila de acceso que no nombra ningún rol es rechazada. Power BI no comprueba los nombres de roles, así que un rol mal escrito falla solo cuando se dibuja el informe: el servidor MCP los comprueba con el modelo al escribir filas de acceso.

Datos personalizados

Un rol puede filtrar algo distinto a quién es el espectador — el número de su cuenta, su región — a través de CUSTOMDATA()DAX. Regístrate en IPowerBICustomDataProvider el Program.csservidor : se le pide cada token que el portal emite para un elemento cuyo modelo utiliza seguridad a nivel de fila, con el visor y el elemento, y lo que devuelva va al token. Se ejecuta en el servidor y nunca se extrae del navegador, porque decide qué filas ve un espectador. No se le pide un elemento mostrado con el acceso propio de Power BI del espectador.

El servidor add_powerbi_rls_role MCP escribe dicho rol con filter: "customdata", comparando una columna de texto o número. Su filtro también requiere datos personalizados en el token, por lo que un token sin ninguno muestra filas, en lugar de cada fila cuya columna está en blanco.

Configurándolo con el servidor MCP

El servidor MCP configura todo menos el propio informe, actuando como una cuenta de Power BI con la que inicias sesión una vez por carpeta con dnx PowerPortalsPro.Mcp powerbi login. Esa cuenta necesita una licencia Power BI Pro. Pide a tu asistente que configure un informe, o llama tú mismo a las herramientas:

  1. create_powerbi_workspace crea el espacio de trabajo en el que publicas el informe desde Power BI Desktop.
  2. grant_powerbi_workspace_access convierte la identidad del portal en un miembro de él.
  3. add_powerbi_rls_role Escribe un rol en el modelo del informe: uno que mantiene al espectador en las filas de su propio contacto, en las de su empresa, en las de su empresa y sus filiales, en los que una tabla de mapeo lista contra ellos, o en valores fijos — o uno que muestre cada fila. Le da al DAX la oportunidad de añadir el mismo papel en Power BI Desktop, porque publicar el informe de nuevo reemplaza su modelo.
  4. register_powerbi_report y set_powerbi_report_access escribir las dos tablas Dataverse.
  5. check_powerbi Revisa toda la cadena, iniciada como el propio portal.

Dos configuraciones de tenant de Power BI son algo que un administrador de Fabric debe cambiar: los principales de servicio pueden llamar a las APIs públicas de Fabric e incrustar contenido en las aplicaciones. Los nuevos tenants tienen ambos activados. Cuando cualquiera está apagado, check_powerbi indica cuál activar.

Abrir en una página, filtrado a un registro

PageName abre el informe en una página y Filters lo reduce a filas cuya columna contiene uno de los valores — por ejemplo, la cuenta sobre la que trata una página de detalles. Cambiar cualquiera de los dos se aplica al informe ya mostrado, sin recargarlo. Un filtro es una comodidad, no una seguridad: el espectador puede eliminarlo en su navegador. Lo que pueden ver se decide por la seguridad a nivel de fila.

React Blazor

Salpicaderos y azulejos simples

Un registro puede nombrar un panel de control, o una casilla de un panel, en lugar de un informe — su tipo de artículo, con el id del panel y el del mosaico. El mismo componente lo muestra: PowerBIReport incrusta los nombres de registro de la clave. Un panel muestra ajustado a su ancho y OnTileClicked (onTileClicked) indica cuándo se hace clic en una casilla y hacia dónde conduce. Una página, filtros, paneles y los colores del portal solo se aplican a un informe: un panel o mosaico muestra tal como fue creado.

Los mosaicos de un panel pueden provenir de varios modelos semánticos, y cada uno se somete a las mismas reglas que el de un informe: un modelo con seguridad a nivel de fila obtiene la identidad y los roles del espectador, y uno sin ellos es rechazado a menos que el registro lo permita. Un mosaico de texto o una imagen no lee filas y no necesita ninguno.register_powerbi_report toma , y tile para uno de sus mosaicos, y list_powerbi_reports lista los paneles y mosaicos de un espacio de trabajo. Los mosaicos se fijan en el servicio Power BI; no hay forma de fijar uno dashboarddesde fuera.

El acceso propio a Power BI de cada visor

El Modo de Incrustación de un registro puede mostrar el elemento con el acceso propio a Power BI de cada espectador en lugar del portal, como lo verían en Power BI. Power BI aplica su propio modo de compartir y la seguridad a nivel de fila de los modelos — USERPRINCIPALNAME() es el nombre con el que inician sesión — por lo que cada visitante necesita una cuenta de trabajo o escolar, una licencia de Power BI y el elemento compartido con ellos. Las filas de acceso siguen indicando quién puede preguntar; sus roles en Power BI no se utilizan. Es adecuado para el personal y socios que ya usan Power BI. Para los clientes, el acceso propio del portal no necesita licencia.

La primera vez, el componente ofrece conectar la cuenta de trabajo del visor a Power BI. Inician sesión con Microsoft, aceptan que el portal lea sus informes y paneles de Power BI, y vuelven a la página. Lo que eso da al portal permanece en el servidor, cifrado en el IDistributedCachedel anfitrión; el navegador solo recibe un token de acceso de corta duración. Con la caché en memoria, los espectadores se reconectan tras el reinicio del portal, y una caché compartida (Redis, SQL Server) los mantiene conectados. Cerrar sesión los desconecta. Una cuenta personal de Microsoft, Google o una contraseña no pueden conectarse, ni tampoco una sesión que alguien esté suplantando.

Los espectadores se conectan a través del registro de la app de inicio de sesión de Microsoft del portal, que necesita Power BI Report.Read.All delegado y Dashboard.Read.All, Microsoft Graph openid y offline_access, y el URI https://<portal host>/signin-powerbide redirección . El servidor add_powerbi_signin_permissions MCP los añade todos y register_powerbi_report toma embedMode: "user". Un tenant que solo permite el consentimiento de los administradores necesita uno para concederlo una vez. Para dejar entrar también a los invitados del inquilino, se asigna PowerBIOptions.TenantId al tenant que mantiene los espacios de trabajo.

Colores y modo oscuro

Por defecto, el informe toma los colores del portal: su tema claro o oscuro, su color de acento y la paleta de series que usan los propios gráficos del portal. Sigue el tema cuando el visitante lo cambia, sin necesidad de recargar. Los colores se leen desde el tema Fluent donde está el informe, y se aplican como un tema de informe de Power BI, que establece la página, el texto, los ejes, el panel de filtro y la serie del informe. Un color que el autor del informe ha establecido en un visual permanece como lo ha configurado, y Power BI dibuja las pestañas de página debajo del informe con sus propios colores, sea cual sea el tema.

ThemeJson le da al informe un tema propio, en formato JSON de temas de Power BI; como cualquier tema aplicado a un informe incrustado, sustituye al tema guardado del informe en lugar de añadirlo. UsePortalTheme="false" mantiene el tema con el que se guardó el informe.

React Blazor

Desarrollo y producción

Un espacio de trabajo sin capacidad recibe los tokens de prueba de Power BI, que son limitados en número, muestran un banner y son para desarrollo y prueba. En producción, pon el espacio de trabajo en capacidad de Fabric: create_powerbi_capacity crea uno en tu suscripción a Azure tras mostrar su precio y set_powerbi_capacity_state pausa. Una capacidad pausada no genera informes. No se soporta incrustar para visitantes de portales en un espacio de trabajo Premium Por Usuario.

Reaccionar Blazor

PowerBIReport Clase

Parámetros

Nombre
Tipo
Default
Descripción
FilterPaneVisiblebool
False
FiltersIReadOnlyList<PowerBIFilter>?
Heightstring
600px
PageNamestring?
PageNavigationVisiblebool
True
ReportKey*string
ThemeJsonstring?
TransparentBackgroundbool
False
UsePortalThemebool
True
Widthstring
100%
Nombre: FilterPaneVisible
Tipo: bool
Default: False
Nombre: Filters
Tipo: IReadOnlyList<PowerBIFilter>?
Nombre: Height
Tipo: string
Default: 600px
Nombre: PageName
Tipo: string?
Nombre: PageNavigationVisible
Tipo: bool
Default: True
Nombre: ReportKey*
Tipo: string
Nombre: ThemeJson
Tipo: string?
Nombre: TransparentBackground
Tipo: bool
Default: False
Nombre: UsePortalTheme
Tipo: bool
Default: True
Nombre: Width
Tipo: string
Default: 100%

Eventos

Nombre
Tipo
Descripción
OnDataSelectedEventCallback<PowerBIDataSelection>
OnErrorEventCallback<string>
OnLoadedEventCallback
OnPageChangedEventCallback<PowerBIPage>
OnRenderedEventCallback
OnTileClickedEventCallback<PowerBITileClick>
Nombre: OnDataSelected
Tipo: EventCallback<PowerBIDataSelection>
Nombre: OnError
Tipo: EventCallback<string>
Nombre: OnLoaded
Tipo: EventCallback
Nombre: OnPageChanged
Tipo: EventCallback<PowerBIPage>
Nombre: OnRendered
Tipo: EventCallback
Nombre: OnTileClicked
Tipo: EventCallback<PowerBITileClick>

Métodos

Nombre
Parámetros
Tipo
Descripción
NotifyDataSelectedAsyncPowerBIDataSelection selection
Task
NotifyErrorAsyncstring message
Task
NotifyLoadedAsyncTask
NotifyPageChangedAsyncPowerBIPage page
Task
NotifyRenderedAsyncTask
NotifyTileClickedAsyncPowerBITileClick click
Task
RenewTokenAsyncTask<PowerBIEmbedTokenResponse>
Nombre: NotifyDataSelectedAsync
Parámetros: PowerBIDataSelection selection
Tipo: Task
Nombre: NotifyErrorAsync
Parámetros: string message
Tipo: Task
Nombre: NotifyLoadedAsync
Tipo: Task
Nombre: NotifyPageChangedAsync
Parámetros: PowerBIPage page
Tipo: Task
Nombre: NotifyRenderedAsync
Tipo: Task
Nombre: NotifyTileClickedAsync
Parámetros: PowerBITileClick click
Tipo: Task
Nombre: RenewTokenAsync
Tipo: Task<PowerBIEmbedTokenResponse>