Relatório Power BI

PowerBIReport mostra um relatório do Power BI no portal para usuários que não possuem licença do Power BI, com cada visualizador vendo apenas suas próprias linhas. Ele está em seu próprio pacote — PowerPortalsPro.Web.Blazor.PowerBI para Blazor, @powerportalspro/react-powerbi para React — então um portal que não mostra relatórios não carrega o script do Power BI.

React Blazor

Como funciona

O componente nomeia um relatório por uma chave. O portal pesquisa a chave, decide se o espectador pode ver o relatório e pede ao Power BI um token para ele — como a identidade que já está conectado ao Dataverse, então não há mais nada para configurar no portal. O token carrega o ID do visualizador como nome de usuário: seu contato ou seu ID de usuário quando ele está conectado ao portal pela equipe. Visitantes que não estão logados recebem o nome anonymousde usuário. O componente renova o token alguns minutos antes de ele expirar, e o relatório mantém seu estado quando expira.

Cada visualizador pode pedir tokens de relatório 30 vezes por minuto — um usuário logado pela conta dele, um visitante pelo endereço — e é recusado com um 429 além disso. Um token é reutilizado enquanto tem tempo para rodar, então uma página nunca chega perto dele; o limite impede que um visualizador transforme requisições repetidas em um carregamento no portal ou no Power BI. Mude-o com PowerPortalsPro:PowerBIRateLimit:PermitLimit e Window na configuração; a PermitLimit de 0 desliga o token.

Registrando um relatório

Quais relatórios um portal pode mostrar, e para quem, são dados no Dataverse em vez de código, porque cada ambiente incorpora relatórios de seu próprio espaço de trabalho. Duas tabelas na solução Power Portals Pro o mantêm:

  • Portal Power BI Report — a chave que um componente nomeia, e o espaço de trabalho e relatório Power BI que ele representa. Permitir Sem Segurança em Nível de Linha está desativado por padrão: um relatório cujo modelo não possui segurança em nível de linha é recusado, porque todo visualizador veria todas as linhas.
  • Portal Power BI Report Access — quem pode ver o relatório e quais funções do modelo recebe. Cada linha é para detentores de um papel no portal, todos os usuários logados, visitantes anônimos ou usuários internos — funcionários que entraram como eles mesmos em vez de como contatos — e nomeia os papéis do modelo em Power BI Roles, separados por vírgulas.

Um visualizador vê o relatório quando qualquer uma de suas linhas de acesso se aplica a ele, com cada função que as linhas que se aplicam nomeiam. Uma chave que não nomeia nenhum relatório e um relatório que não é para o visualizador parecem iguais para eles: uma mensagem informando que o relatório não está disponível. Os registros são lidos a cada quinze minutos; limpe o PowerBIReports cache para aplicar uma alteração imediatamente.

Segurança em nível de linha

O Power BI aplica a segurança em nível de linha do relatório ao nome de usuário do token. Para manter cada visualizador em suas próprias linhas, dê ao modelo um papel que compare a coluna que contém um id de contato com USERNAME():

O portal verifica o modelo antes de pedir um token. Um modelo com segurança em nível de linha recebe o id e os papéis do visualizador em cada token, e uma linha de acesso que não nomeia nenhum papel é recusada. O Power BI não verifica nomes de papéis, então um papel com erro de ortografia falha apenas quando o relatório é desenhado: o servidor MCP os verifica contra o modelo ao escrever linhas de acesso.

Dados personalizados

Um papel pode filtrar algo diferente de quem é o espectador — o número da conta, sua região — através do CUSTOMDATA()DAX. Registre-se no IPowerBICustomDataProvider servidor Program.cs: é solicitado por cada token que o portal emite para um item cujo modelo usa segurança em nível de linha, junto com o visualizador e o item, e o que ele retorna vai para o token. Ele roda no servidor e nunca é retirado do navegador, porque decide quais linhas o visualizador vê. Não é solicitado um item mostrado com o acesso Power BI do visualizador.

O servidor add_powerbi_rls_role MCP escreve esse papel com filter: "customdata", comparando uma coluna de texto ou número. Seu filtro também requer dados personalizados no token, então um token sem nenhum mostra linhas, em vez de cada linha cuja coluna está em branco.

Configurando com o servidor MCP

O servidor MCP configura tudo, exceto o próprio relatório, atuando como uma conta Power BI na qual você faz login uma vez por pasta. dnx PowerPortalsPro.Mcp powerbi loginEssa conta precisa de uma licença Power BI Pro. Peça ao seu assistente para configurar um relatório, ou ligue para as ferramentas você mesmo:

  1. create_powerbi_workspace cria o espaço de trabalho onde você publica o relatório a partir do Power BI Desktop.
  2. grant_powerbi_workspace_access faz da identidade do portal um Membro dele.
  3. add_powerbi_rls_role Escreve um papel no modelo do relatório: um que mantém o visualizador nas linhas do seu próprio contato, na da empresa, da empresa e das subsidiárias, aqueles que uma tabela de mapeamento lista contra eles, ou valores fixos — ou um mostrando cada linha. Isso dá ao DAX a possibilidade de adicionar o mesmo papel no Power BI Desktop, porque publicar o relatório novamente substitui seu modelo.
  4. register_powerbi_report e set_powerbi_report_access escrever as duas tabelas do Dataverse.
  5. check_powerbi Verifica toda a cadeia, logado como o próprio portal.

Duas configurações de tenant do Power BI dependem de um administrador do Fabric para mudar: os principais de serviço podem chamar APIs públicas do Fabric e incorporar conteúdo nos apps. Novos locatários têm ambos ativados. Quando qualquer um deles está desligado, check_powerbi diz qual ativar.

Abrir em uma página, filtrado para um registro

PageName abre o relatório em uma página e Filters o restringe a linhas cuja coluna contém um dos valores — a conta sobre a qual uma página de detalhes está, por exemplo. Alterar qualquer um se aplica ao relatório já mostrado, sem recarregá-lo. Um filtro é uma conveniência, não segurança: o visualizador pode removê-lo no navegador. O que eles podem ver é decidido pela segurança em nível de linha.

React Blazor

Painéis e placas simples

Um registro pode nomear um painel, ou um tile de um dashboard, em vez de um relatório — seu Tipo de Item, com o id do painel e o do tile. O mesmo componente mostra: PowerBIReport incorpora o nome do registro da chave. Um painel mostra ajustado à sua largura e OnTileClicked (onTileClicked) diz quando um tile é clicado e para onde ele leva. Uma página, filtros, painéis e as cores do portal se aplicam apenas a um relatório: um painel ou tile mostra como foi criado.

Os tiles de um dashboard podem vir de vários modelos semânticos, e cada um é sujeito às mesmas regras de um relatório: um modelo com segurança em nível de linha recebe a identidade e os papéis do visualizador, e outro sem é recusado, a menos que o registro permita. Um tile de texto ou imagem não lê linhas e não precisa de nenhum dos dois. register_powerbi_report pega dashboard, e tile para um de seus tiles, e list_powerbi_reports lista os dashboards e tiles de um workspace. Tiles são fixados no serviço Power BI; não há como fixar um de fora dele.

Acesso próprio ao Power BI de cada visualizador

O Modo Embed de um registro pode mostrar o item com o acesso Power BI de cada visualizador em vez do portal, como eles veriam no Power BI. O Power BI aplica seu próprio compartilhamento e a segurança em nível de linha dos modelos — USERPRINCIPALNAME() é o nome com o qual eles fazem login — então cada visualizador precisa de uma conta de trabalho ou escola, uma licença Power BI e o item compartilhado com eles. As linhas de acesso ainda indicam quem pode perguntar; seus papéis no Power BI não são utilizados. Ele serve para funcionários e parceiros que já usam Power BI. Para os clientes, o acesso próprio do portal não precisa de licença.

Na primeira vez, o componente oferece conectar a conta de trabalho do visualizador ao Power BI. Eles fazem login com a Microsoft, concordam em permitir que o portal leia seus relatórios e dashboards do Power BI, e voltam para a página. O que isso dá ao portal permanece no servidor, criptografado no host IDistributedCache; o navegador só recebe um token de acesso de curta duração. Com o cache em memória, os espectadores se conectam novamente após o portal reiniciar, e um cache compartilhado (Redis, SQL Server) os mantém conectados. Sair da sessão os desconecta. Uma conta pessoal da Microsoft, Google ou uma senha não conseguem conectar, e nem uma sessão que alguém está se passando.

Os visualizadores se conectam pelo aplicativo de login do portal para registro, que precisa do Power BI Report.Read.All delegado e Dashboard.Read.All, Microsoft Graphs openid e offline_access, e o URI https://<portal host>/signin-powerbide redirecionamento . O servidor add_powerbi_signin_permissions MCP adiciona todos eles e register_powerbi_report aceita embedMode: "user". Um locatário que permite o consentimento dos administradores só precisa que um conceda uma vez. Para permitir que os convidados do tenant também entrem, defina PowerBIOptions.TenantId para o tenant que mantém os workspaces.

Cores e modo escuro

Por padrão, o relatório pega as cores do portal: seu tema claro ou escuro, sua cor de destaque e a paleta de séries que os próprios gráficos do portal usam. Ele segue o tema quando o visitante o troca, sem recarregar. As cores são lidas do tema Fluent, onde o relatório está localizado, e aplicadas como um tema de relatório do Power BI, que define a página, texto, eixos, painel de filtro e série do relatório. Uma cor definida pelo autor do relatório em um visual permanece conforme ele a definiu, e o Power BI desenha as abas de página abaixo do relatório com suas próprias cores, independentemente do tema.

ThemeJson dá ao relatório um tema próprio, no formato JSON de tema do Power BI; como qualquer tema aplicado a um relatório incorporado, ele substitui o tema salvo do relatório em vez de adicioná-lo. UsePortalTheme="false" mantém o tema com o qual o relatório foi salvo.

React Blazor

Desenvolvimento e produção

Um espaço de trabalho sem capacidade recebe os tokens de teste de embed do Power BI, que são limitados em número, exibem um banner e são para desenvolvimento e testes. Em produção, coloque o espaço de trabalho em capacidade Fabric: create_powerbi_capacity crie um na sua assinatura Azure após mostrar o preço e set_powerbi_capacity_state o pausa. Uma capacidade pausada não gera relatórios. Incorporação para visitantes de portal não é suportada em um espaço de trabalho Premium Per Usuário.

React Blazor

PowerBIReport Classe

Parâmetros

Nome
Tipo
Padrão
Descrição
FilterPaneVisiblebool
False
FiltersIReadOnlyList<PowerBIFilter>?
Heightstring
600px
PageNamestring?
PageNavigationVisiblebool
True
ReportKey*string
ThemeJsonstring?
TransparentBackgroundbool
False
UsePortalThemebool
True
Widthstring
100%
Nome: FilterPaneVisible
Tipo: bool
Padrão: False
Nome: Filters
Tipo: IReadOnlyList<PowerBIFilter>?
Nome: Height
Tipo: string
Padrão: 600px
Nome: PageName
Tipo: string?
Nome: PageNavigationVisible
Tipo: bool
Padrão: True
Nome: ReportKey*
Tipo: string
Nome: ThemeJson
Tipo: string?
Nome: TransparentBackground
Tipo: bool
Padrão: False
Nome: UsePortalTheme
Tipo: bool
Padrão: True
Nome: Width
Tipo: string
Padrão: 100%

Eventos

Nome
Tipo
Descrição
OnDataSelectedEventCallback<PowerBIDataSelection>
OnErrorEventCallback<string>
OnLoadedEventCallback
OnPageChangedEventCallback<PowerBIPage>
OnRenderedEventCallback
OnTileClickedEventCallback<PowerBITileClick>
Nome: OnDataSelected
Tipo: EventCallback<PowerBIDataSelection>
Nome: OnError
Tipo: EventCallback<string>
Nome: OnLoaded
Tipo: EventCallback
Nome: OnPageChanged
Tipo: EventCallback<PowerBIPage>
Nome: OnRendered
Tipo: EventCallback
Nome: OnTileClicked
Tipo: EventCallback<PowerBITileClick>

Métodos

Nome
Parâmetros
Tipo
Descrição
NotifyDataSelectedAsyncPowerBIDataSelection selection
Task
NotifyErrorAsyncstring message
Task
NotifyLoadedAsyncTask
NotifyPageChangedAsyncPowerBIPage page
Task
NotifyRenderedAsyncTask
NotifyTileClickedAsyncPowerBITileClick click
Task
RenewTokenAsyncTask<PowerBIEmbedTokenResponse>
Nome: NotifyDataSelectedAsync
Parâmetros: PowerBIDataSelection selection
Tipo: Task
Nome: NotifyErrorAsync
Parâmetros: string message
Tipo: Task
Nome: NotifyLoadedAsync
Tipo: Task
Nome: NotifyPageChangedAsync
Parâmetros: PowerBIPage page
Tipo: Task
Nome: NotifyRenderedAsync
Tipo: Task
Nome: NotifyTileClickedAsync
Parâmetros: PowerBITileClick click
Tipo: Task
Nome: RenewTokenAsync
Tipo: Task<PowerBIEmbedTokenResponse>