evento
Campeonato Mundial do Power BI DataViz
14/02, 16 - 31/03, 16
Com 4 chances de participar, você pode ganhar um pacote de conferência e chegar ao LIVE Grand Finale em Las Vegas
Mais informaçõesEste browser já não é suportado.
Atualize para o Microsoft Edge para tirar partido das mais recentes funcionalidades, atualizações de segurança e de suporte técnico.
Este tutorial explica como incorporar um relatório do Power BI em um aplicativo .NET 5.0, como parte da solução de incorporação para sua organização (também conhecida como dados de propriedade do usuário). Em uma solução de incorporação para sua organização , os usuários do aplicativo precisam se autenticar no Power BI com suas próprias credenciais.
Neste tutorial, você aprenderá a incorporar:
Microsoft.Identity.Web
no .NET Core)Nota
A solução completa usada neste tutorial está disponível no repositório GitHub DOTNET5-UserOwnsData-Tutorial .
Uma licença do Power BI Pro ou Premium por usuário (PPU).
Nota
A incorporação para a solução da sua organização não é suportada em capacidades baseadas em SKUs A . Um SKU A só pode ser usado para a solução de incorporação para seus clientes .
Um espaço de trabalho do Power BI com um relatório.
Seu próprio locatário do Microsoft Entra.
Um aplicativo Microsoft Entra.
Um aplicativo MVC (Model View Controller) do .NET Core 5.
SDK do .NET Core 5 ( ou superior).
Um ambiente de desenvolvimento integrado (IDE). Recomendamos o uso de um dos seguintes ambientes:
Neste tutorial, você usa:
Para incorporar conteúdo do Power BI em uma solução incorporada para sua organização , siga estas etapas:
Quando seu aplicativo Web chama o Power BI, ele precisa de um token do Microsoft Entra para chamar APIs REST do Power BI e incorporar itens do Power BI, como relatórios, painéis ou blocos.
Se você não tiver um aplicativo Microsoft Entra, crie um usando as instruções em Registrar um aplicativo Microsoft Entra para usar com o Power BI.
Para configurar seu aplicativo Microsoft Entra, siga as instruções em Configurar seu aplicativo Microsoft Entra.
Para incorporar seu relatório, você precisa dos seguintes valores:
Se não souber o seu domínio ou ID de inquilino, consulte Localizar o ID de inquilino do Microsoft Entra e o nome de domínio principal.
Nota
Para incorporar conteúdo para um usuário em um locatário diferente (um usuário convidado), você precisa ajustar o authorityUri
parâmetro.
Para obter o GUID da ID do cliente (também conhecido como ID do aplicativo), siga estas etapas:
Faça logon no Microsoft Azure.
Pesquise por Registos de aplicações e selecione a ligação Registos de aplicações.
Selecione o aplicativo Microsoft Entra que você está usando para incorporar seu conteúdo do Power BI.
Na seção Visão geral, copie o GUID do ID do aplicativo (cliente).
Para obter o segredo do cliente, siga estes passos:
Faça logon no Microsoft Azure.
Pesquise por Registos de aplicações e selecione a ligação Registos de aplicações.
Selecione o aplicativo Microsoft Entra que você está usando para incorporar seu conteúdo do Power BI.
Em Gerenciar, selecione Certificados & segredos.
Em Segredos do cliente, selecione Novo segredo do cliente.
Na janela pop-up Adicionar um segredo do cliente, forneça uma descrição para o segredo do aplicativo, selecione quando o segredo do aplicativo expira e selecione Adicionar.
Na seção Segredos do cliente, copie a cadeia de caracteres na coluna Valor do segredo do aplicativo recém-criado. O valor secreto do cliente é o ID do cliente.
Nota
Certifique-se de copiar o valor secreto do cliente quando ele aparecer pela primeira vez. Depois de navegar para fora desta página, o segredo do cliente será oculto e você não poderá recuperar seu valor.
Para obter o GUID do ID do espaço de trabalho, siga estas etapas:
Iniciar sessão no serviço Power BI.
Abra o relatório que pretende incorporar.
Copie o GUID do URL. O GUID é o número entre /groups/ e /reports/.
Nota
Para obter a ID do espaço de trabalho programaticamente, use a API Obter Grupos .
Para obter o GUID de ID de relatório, siga estas etapas:
Iniciar sessão no serviço Power BI.
Abra o relatório que pretende incorporar.
Copie o GUID do URL. O GUID é o número entre /reports/ e /ReportSection.
Nota
Para obter a ID do relatório programaticamente, use a API Obter relatórios em grupo .
Antes de começar, você precisa adicionar os Microsoft.Identity.Web
pacotes e Microsoft.PowerBI.Api
NuGet ao seu aplicativo.
Adicione os seguintes pacotes NuGet ao seu aplicativo:
No VS Code, abra um terminal e digite o código a seguir.
No Visual studio, navegue até Tools>NuGet Package Manager Package Manager>Console e digite o código a seguir.
dotnet add package Microsoft.Identity.Web -v 0.3.0-preview
dotnet add package Microsoft.Identity.Web.UI -v 0.3.0-preview
dotnet add package Microsoft.PowerBI.Api
Se o seu aplicativo usado Microsoft.AspNetCore
anteriormente para autenticar, remova este pacote do seu projeto digitando:
dotnet remove package Microsoft.AspNetCore.Authentication.AzureAD.UI
Habilite a autenticação do lado do servidor em seu aplicativo, criando ou modificando os arquivos na tabela a seguir.
Ficheiro | Utilizar |
---|---|
Startup.cs | Inicializar o Microsoft.Identity.Web serviço de autenticação |
appsettings.json | Detalhes de autenticação |
PowerBiServiceApi.cs | Obter o token do Microsoft Entra e incorporar metadados |
HomeController.cs | Passar dados incorporados como um modelo para a exibição |
Modifique o código no Startup.cs para inicializar corretamente o serviço de autenticação fornecido pelo Microsoft.Identity.Web
.
Adicione o seguinte trecho de código ao arquivo Startup.cs do seu aplicativo.
Nota
O código em ConfigureServices
realiza várias coisas importantes:
AddMicrosoftWebAppCallsWebApi
configurar a Biblioteca de Autenticação da Microsoft para adquirir tokens de acesso (tokens do Microsoft Entra).AddInMemoryTokenCaches
configurar um cache de token que a Biblioteca de Autenticação da Microsoft usará para armazenar tokens de acesso em cache e atualizar tokens nos bastidoresservices.AddScoped(typeof(PowerBiServiceApi))
configurar a PowerBiServiceApi
classe como uma classe de serviço que pode ser adicionada a outras classes usando injeção de dependência.using Microsoft.Identity.Web;
using Microsoft.Identity.Web.TokenCacheProviders;
using Microsoft.Identity.Web.TokenCacheProviders.InMemory;
using Microsoft.Identity.Web.UI;
using UserOwnsData.Services;
namespace UserOwnsData {
public class Startup {
public Startup (IConfiguration configuration) {
Configuration = configuration;
}
public IConfiguration Configuration { get; }
// This method gets called by the runtime. Use this method to add services to the container.
public void ConfigureServices (IServiceCollection services) {
services
.AddMicrosoftIdentityWebAppAuthentication(Configuration)
.EnableTokenAcquisitionToCallDownstreamApi(PowerBiServiceApi.RequiredScopes)
.AddInMemoryTokenCaches();
services.AddScoped (typeof (PowerBiServiceApi));
var mvcBuilder = services.AddControllersWithViews (options => {
var policy = new AuthorizationPolicyBuilder()
.RequireAuthenticatedUser()
.Build();
options.Filters.Add (new AuthorizeFilter (policy));
});
mvcBuilder.AddMicrosoftIdentityUI();
services.AddRazorPages();
}
}
}
Neste tutorial, o arquivo contém informações confidenciais, como ID do appsettings.json
cliente e segredo do cliente. Por motivos de segurança, não recomendamos manter essas informações no arquivo de configurações. Ao incorporar em seu aplicativo, considere um método mais seguro, como o Azure Key Vault , para manter essas informações.
Em seu projeto, crie um novo arquivo e chame-o de appsettings.json.
Adicione o seguinte código a appsettings.json:
{
"AzureAd": {
"Instance": "https://login.microsoftonline.com/",
"Domain": "",
"TenantId": "",
"ClientId": "",
"ClientSecret": "",
"CallbackPath": "/signin-oidc",
"SignedOutCallbackPath": "/signout-callback-oidc"
},
"PowerBi": {
"ServiceRootUrl": "https://api.powerbi.com"
},
"Logging": {
"LogLevel": {
"Default": "Information",
"Microsoft": "Warning",
"Microsoft.Hosting.Lifetime": "Information"
}
},
"AllowedHosts": "*"
}
Preencha os valores dos parâmetros de incorporação obtidos na Etapa 2 - Obter os valores dos parâmetros de incorporação.
Domain
- ID do domínio e do inquilinoTenantId
- ID do domínio e do inquilinoClientId
- ID de ClienteClientSecret
- Segredo do clienteNota
No trecho de código anterior, o PowerBi:ServiceRootUrl
parâmetro é adicionado como um valor de configuração personalizado para controlar a URL base para o serviço do Power BI. Ao programar com base no serviço Power BI na nuvem pública da Microsoft, a URL é https://api.powerbi.com/
. No entanto, a URL raiz para o serviço do Power BI será diferente em outras nuvens, como a nuvem do governo. Portanto, esse valor é armazenado como um valor de configuração do projeto para que seja fácil de alterar quando necessário.
Para incorporar conteúdo do Power BI (como relatórios e painéis), seu aplicativo precisa obter um token do Microsoft Entra. Para obter o token, você precisa de um objeto de configuração.
O código nesta seção usa o padrão de injeção de dependência do .NET Core. Quando sua classe precisa usar um serviço, você pode adicionar um parâmetro de construtor para esse serviço e o tempo de execução do .NET Core cuida de passar a instância de serviço em tempo de execução. Nesse caso, o construtor está injetando uma instância do serviço de configuração .NET Core usando o IConfiguration
parâmetro, que é usado para recuperar o PowerBi:ServiceRootUrl
valor de configuração de appsettings.json. O ITokenAcquisition
parâmetro, que é nomeado tokenAcquisition
, contém uma referência ao serviço de autenticação da Microsoft fornecido pela Microsoft.Identity.Web
biblioteca e é usado para adquirir tokens de acesso do Microsoft Entra ID.
O RequiredScopes
campo contém uma matriz de cadeia de caracteres que contém um conjunto de permissões delegadas suportadas pela API de serviço do Power BI. Quando seu aplicativo chama pela rede para adquirir um token do Microsoft Entra, passa esse conjunto de permissões delegadas para que o ID do Microsoft Entra possa incluí-las no token de acesso retornado.
Nota
Verifique se seu aplicativo Microsoft Entra está configurado com os escopos exigidos pelo seu aplicativo Web. Para obter mais informações, consulte Alterar as permissões do aplicativo Microsoft Entra.
No projeto do seu aplicativo, crie uma nova pasta intitulada Serviços.
Na pasta Serviços, crie um novo arquivo intitulado PowerBiServiceApi.cs.
Adicione o seguinte código a PowerBiServiceApi.cs.
using Microsoft.Identity.Web;
using Microsoft.PowerBI.Api;
using Microsoft.PowerBI.Api.Models;
using Microsoft.Rest;
using Newtonsoft.Json;
namespace UserOwnsData.Services {
// A view model class to pass the data needed to embed a single report.
public class EmbeddedReportViewModel {
public string Id;
public string Name;
public string EmbedUrl;
public string Token;
}
public class PowerBiServiceApi {
private ITokenAcquisition tokenAcquisition { get; }
private string urlPowerBiServiceApiRoot { get; }
public PowerBiServiceApi(IConfiguration configuration, ITokenAcquisition tokenAcquisition) {
this.urlPowerBiServiceApiRoot = configuration["PowerBi:ServiceRootUrl"];
this.tokenAcquisition = tokenAcquisition;
}
public static readonly string[] RequiredScopes = new string[] {
"https://analysis.windows.net/powerbi/api/Report.Read.All"
};
// A method to get the Azure AD token (also known as 'access token')
public string GetAccessToken() {
return this.tokenAcquisition.GetAccessTokenForUserAsync(RequiredScopes).Result;
}
public PowerBIClient GetPowerBiClient() {
var tokenCredentials = new TokenCredentials(GetAccessToken(), "Bearer");
return new PowerBIClient(new Uri(urlPowerBiServiceApiRoot), tokenCredentials);
}
public async Task<EmbeddedReportViewModel> GetReport(Guid WorkspaceId, Guid ReportId) {
PowerBIClient pbiClient = GetPowerBiClient();
// Call the Power BI Service API to get embedding data
var report = await pbiClient.Reports.GetReportInGroupAsync(WorkspaceId, ReportId);
// Return report embedding data to caller
return new EmbeddedReportViewModel {
Id = report.Id.ToString(),
EmbedUrl = report.EmbedUrl,
Name = report.Name,
Token = GetAccessToken()
};
}
}
}
Neste exemplo de código, você usa a injeção de dependência. Como você registrou a PowerBiServiceApi
classe como um serviço chamando services.AddScoped
o ConfigureServices
método. Você pode adicionar um PowerBiServiceApi
parâmetro ao construtor, e o tempo de execução do .NET Core cuida de criar uma PowerBiServiceApi
instância e passá-la para o construtor.
Na pasta Controllers , abra o arquivo HomeController.cs e adicione-o ao seguinte trecho de código:
using Microsoft.AspNetCore.Authorization;
using Microsoft.AspNetCore.Mvc;
using Microsoft.Extensions.Logging;
using UserOwnsData.Models;
using UserOwnsData.Services;
namespace UserOwnsData.Controllers {
[Authorize]
public class HomeController : Controller {
private PowerBiServiceApi powerBiServiceApi;
public HomeController (PowerBiServiceApi powerBiServiceApi) {
this.powerBiServiceApi = powerBiServiceApi;
}
[AllowAnonymous]
public IActionResult Index() {
return View();
}
public async Task<IActionResult> Embed() {
Guid workspaceId = new Guid("11111111-1111-1111-1111-111111111111");
Guid reportId = new Guid("22222222-2222-2222-2222-222222222222");
var viewModel = await powerBiServiceApi.GetReport(workspaceId, reportId);
return View(viewModel);
}
[AllowAnonymous]
[ResponseCache (Duration = 0, Location = ResponseCacheLocation.None, NoStore = true)]
public IActionResult Error() {
return View (new ErrorViewModel { RequestId = Activity.Current?.Id ?? HttpContext.TraceIdentifier });
}
}
}
Para implementação do lado do cliente, você precisa criar ou modificar os arquivos na tabela a seguir.
Ficheiro | Utilizar |
---|---|
embed.js | Contém o código JavaScript do lado do cliente |
Incorporar.cshtml | Contém o DOM (modelo de objeto de documento) do aplicativo e um DIV para incorporar o relatório |
Crie o arquivo Embed.cshtml , que tem um div
elemento usado como contêiner para seu relatório incorporado e três scripts.
Na pasta View>Home, crie um arquivo chamado Embed.cshtml.
Adicione o seguinte trecho de código ao arquivo Embed.cshtml .
@model UserOwnsData.Services.EmbeddedReportViewModel;
<div id="embed-container" style="height:800px;"></div>
@section Scripts {
<!-- powerbi.min.js is the JavaScript file that loads the client-side Power BI JavaScript API library.
Make sure that you're working with the latest library version.
You can check the latest library available in https://cdnjs.com/libraries/powerbi-client -->
<script src="https://cdn.jsdelivr.net/npm/powerbi-client@2.21.0/dist/powerbi.min.js"></script>
<!-- This script creates a JavaScript object named viewModel which is accessible to the JavaScript code in embed.js. -->
<script>
var viewModel = {
reportId: "@Model.Id",
embedUrl: "@Model.EmbedUrl",
token: "@Model.Token"
};
</script>
<!-- This script specifies the location of the embed.js file -->
<script src="~/js/embed.js"></script>
}
Para incorporar conteúdo do Power BI, você precisa criar um objeto de configuração. Para saber mais sobre como criar o objeto de configuração, consulte Incorporar um relatório.
Nesta seção, você cria um arquivo JavaScript chamado embed.js com um objeto de configuração para incorporar seu relatório, usando a variável models
.
models
é inicializado usando uma chamada para window['powerbi-client'].models
. A models
variável é usada para definir valores de configuração como models.Permissions.All
, models.TokenType.Aad
e models.ViewMode.View
.
A powerbi.embed
função usa o models
objeto de configuração para incorporar seu relatório.
Na pasta wwwroot>js, crie um arquivo chamado embed.js.
Adicione o seguinte trecho de código ao arquivo embed.js .
$(function(){
// 1 - Get DOM object for div that is report container
let reportContainer = document.getElementById("embed-container");
// 2 - Get report embedding data from view model
let reportId = window.viewModel.reportId;
let embedUrl = window.viewModel.embedUrl;
let token = window.viewModel.token
// 3 - Embed report using the Power BI JavaScript API.
let models = window['powerbi-client'].models;
let config = {
type: 'report',
id: reportId,
embedUrl: embedUrl,
accessToken: token,
permissions: models.Permissions.All,
tokenType: models.TokenType.Aad,
viewMode: models.ViewMode.View,
settings: {
panes: {
filters: { expanded: false, visible: true },
pageNavigation: { visible: false }
}
}
};
// Embed the report and display it within the div container.
let report = powerbi.embed(reportContainer, config);
// 4 - Add logic to resize embed container on window resize event
let heightBuffer = 12;
let newHeight = $(window).height() - ($("header").height() + heightBuffer);
$("#embed-container").height(newHeight);
$(window).resize(function() {
var newHeight = $(window).height() - ($("header").height() + heightBuffer);
$("#embed-container").height(newHeight);
});
});
Depois de fazer todos os ajustes listados neste tutorial, você estará pronto para executar seu aplicativo. Execute seu aplicativo e experimente a maneira como seu relatório do Power BI é incorporado. Você pode usar as APIs de cliente de análise incorporada do Power BI para aprimorar seu aplicativo usando APIs do lado do cliente.
Quando o aplicativo estiver pronto, você poderá mover o aplicativo incorporado para a produção.
evento
Campeonato Mundial do Power BI DataViz
14/02, 16 - 31/03, 16
Com 4 chances de participar, você pode ganhar um pacote de conferência e chegar ao LIVE Grand Finale em Las Vegas
Mais informaçõesFormação
Percurso de aprendizagem
Use advance techniques in canvas apps to perform custom updates and optimization - Training
Use advance techniques in canvas apps to perform custom updates and optimization
Certificação
Certificado pela Microsoft: Power Platform Developer Associate - Certifications
Demonstre como simplificar, automatizar e transformar tarefas e processos de negócios usando o Microsoft Power Platform Developer.
Documentação
Saiba como incorporar um relatório do Power BI em um aplicativo de análise incorporado do Power BI para seus clientes com este tutorial.
Saiba como integrar o Power BI em seu aplicativo para fornecer informações para sua organização usando ferramentas e software de análise incorporados.
Incorporar conteúdo em seu aplicativo de análise incorporado do Power BI - Power BI
Saiba como incorporar um relatório, painel ou bloco em um exemplo de análise incorporada do Power BI.