Kurz: Vložení sestavy Power BI do aplikace pro vaši organizaci
Tento kurz vysvětluje, jak vložit sestavu Power BI do aplikace .NET 5.0 jako součást vložení pro vaši organizaci (označované také jako řešení pro uživatele vlastní data). Ve vložení pro řešení vaší organizace musí uživatelé vaší aplikace provést ověření v Power BI pomocí vlastních přihlašovacích údajů.
V tomto kurzu se dozvíte, jak vložit:
- Sestava Power BI
- Vložení pro aplikaci vaší organizace
- Použití .NET 5.0
- S knihovnou
Microsoft.Identity.Web
(tato knihovna se podporuje také v .NET Core)
Poznámka:
Úplné řešení použité v tomto kurzu je dostupné v úložišti GitHubu DOTNET5-UserOwnsData-Tutorial .
Požadavky
Licence Power BI Pro nebo Premium na uživatele (PPU).
Poznámka:
Vložení pro řešení vaší organizace se nepodporuje na kapacitách založených na skladových posílacích A . Skladovou položku A je možné použít pouze pro vložení pro vaše řešení pro zákazníky .
Pracovní prostor Power BI se sestavou
Vlastního tenanta Microsoft Entra.
Aplikace kontroleru zobrazení modelu .NET Core 5 (MVC).
.NET Core 5 SDK (nebo vyšší).
Integrované vývojové prostředí (IDE). Doporučujeme použít jedno z následujících prostředí:
- Visual Studio.
- Visual Studio Code (s rozšířením jazyka C#).
Zdroje informací
V tomto kurzu použijete:
- Rozhraní REST Reports API Power BI – k vložení adresy URL a načtení tokenu pro vložení
- Microsoft Identity Web Authentication Library.
- Klientská rozhraní API vložených analýz Power BI – k vložení sestavy.
metoda
Pokud chcete vložit obsah Power BI do řešení pro vložení pro vaši organizaci , postupujte takto:
- Konfigurace aplikace Microsoft Entra
- Získání hodnot parametrů vkládání
- Přidání požadovaných balíčků NuGet
- Povolení ověřování na straně serveru
- Sestavení klientské strany aplikace
- Spuštění aplikace
Krok 1 : Konfigurace aplikace Microsoft Entra
Když webová aplikace volá Power BI, potřebuje token Microsoft Entra pro volání rozhraní REST API Power BI a vložení položek Power BI, jako jsou sestavy, řídicí panely nebo dlaždice.
Pokud nemáte aplikaci Microsoft Entra, vytvořte ji podle pokynů v části Registrace aplikace Microsoft Entra pro použití s Power BI.
Pokud chcete nakonfigurovat aplikaci Microsoft Entra, postupujte podle pokynů v části Konfigurace aplikace Microsoft Entra.
Krok 2 – získání hodnot vložených parametrů
K vložení sestavy potřebujete následující hodnoty:
ID domény a tenanta
Pokud neznáte svoji doménu nebo ID tenanta, přečtěte si téma Vyhledání ID tenanta Microsoft Entra a název primární domény.
Poznámka:
Pokud chcete vložit obsah pro uživatele do jiného tenanta (uživatele typu host), musíte upravit authorityUri
parametr.
Client ID
Pokud chcete získat identifikátor GUID ID klienta (označovaný také jako ID aplikace), postupujte takto:
Přihlaste se k Microsoft Azure.
Vyhledejte Registrace aplikací a vyberte odkaz Registrace aplikací.
Vyberte aplikaci Microsoft Entra, kterou používáte pro vložení obsahu Power BI.
V části Přehled zkopírujte identifikátor GUID ID aplikace (klienta).
Tajný klíč klienta
Tajný klíč klienta získáte takto:
Přihlaste se k Microsoft Azure.
Vyhledejte Registrace aplikací a vyberte odkaz Registrace aplikací.
Vyberte aplikaci Microsoft Entra, kterou používáte pro vložení obsahu Power BI.
V části Spravovat vyberte Certifikáty a tajné kódy.
V části Tajné kódy klienta vyberte Nový tajný klíč klienta.
V automaticky otevírané okně Přidat tajný klíč klienta zadejte popis tajného kódu aplikace, vyberte, kdy vyprší platnost tajného kódu aplikace, a vyberte Přidat.
V části Tajné kódy klienta zkopírujte řetězec ve sloupci Hodnota nově vytvořeného tajného kódu aplikace. Hodnota tajného klíče klienta je VAŠE ID klienta.
Poznámka:
Ujistěte se, že při prvním zobrazení zkopírujete hodnotu tajného klíče klienta. Po přechodu mimo tuto stránku bude tajný klíč klienta skrytý a nebudete moct načíst jeho hodnotu.
ID pracovního prostoru
Pokud chcete získat identifikátor GUID ID pracovního prostoru, postupujte takto:
Přihlaste se ke službě Power BI.
Otevřete sestavu, kterou chcete vložit.
Zkopírujte identifikátor GUID z adresy URL. Identifikátor GUID je číslo mezi /groups/ a /reports/.
Poznámka:
K získání ID pracovního prostoru prostřednictvím kódu programu použijte rozhraní API Získat skupiny .
ID sestavy
Pokud chcete získat identifikátor GUID ID sestavy, postupujte takto:
Přihlaste se ke službě Power BI.
Otevřete sestavu, kterou chcete vložit.
Zkopírujte identifikátor GUID z adresy URL. Identifikátor GUID je číslo mezi /reports/ a /ReportSection.
Poznámka:
Id sestavy získáte programově pomocí rozhraní API Získat sestavy ve skupině .
Krok 3 : Přidání požadovaných balíčků NuGet
Než začnete, musíte do aplikace přidat Microsoft.Identity.Web
balíčky NuGet a Microsoft.PowerBI.Api
.
Do aplikace přidejte následující balíčky NuGet:
Ve VS Code otevřete terminál a zadejte následující kód.
V sadě Visual Studio přejděte na Nástroje>NuGet Správce balíčků> Správce balíčků konzolu a zadejte následující kód.
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
Pokud se vaše aplikace dříve používala Microsoft.AspNetCore
k ověření, odeberte tento balíček z projektu zadáním:
dotnet remove package Microsoft.AspNetCore.Authentication.AzureAD.UI
Krok 4 – Povolení ověřování na straně serveru
Povolte ověřování na straně serveru v aplikaci vytvořením nebo úpravou souborů v následující tabulce.
Soubor | Používání |
---|---|
Startup.cs | Inicializace Microsoft.Identity.Web ověřovací služby |
appsettings.json | Podrobnosti o ověřování |
PowerBiServiceApi.cs | Získání tokenu Microsoft Entra a vkládání metadat |
HomeController.cs | Předání dat vložení jako modelu do zobrazení |
Konfigurace spouštěcího souboru pro podporu Microsoft.Identity.Web
Upravte kód v Startup.cs tak, aby správně inicializoval ověřovací službu poskytovanou Microsoft.Identity.Web
.
Do souboru Startup.cs vaší aplikace přidejte následující fragment kódu.
Poznámka:
Kód v ConfigureServices
rámci provádění několika důležitých věcí:
- Volání
AddMicrosoftWebAppCallsWebApi
konfiguruje knihovnu Microsoft Authentication Library pro získání přístupových tokenů (tokeny Microsoft Entra). - Volání
AddInMemoryTokenCaches
konfigurace mezipaměti tokenů, kterou bude knihovna Microsoft Authentication Library používat k ukládání přístupových tokenů do mezipaměti a obnovovacích tokenů na pozadí - Volání konfiguruje
services.AddScoped(typeof(PowerBiServiceApi))
PowerBiServiceApi
třídu jako třídu služby, kterou lze přidat do jiných tříd pomocí injektáže závislostí.
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();
}
}
}
Vytvoření souboru s podrobnostmi o ověřování
V tomto kurzu soubor obsahuje citlivé informace, appsettings.json
jako je ID klienta a tajný klíč klienta. Z bezpečnostních důvodů nedoporučujeme tyto informace uchovávat v souboru nastavení. Při vkládání do aplikace zvažte bezpečnější metodu, jako je Azure Key Vault , která tyto informace uchovává.
V projektu vytvořte nový soubor a zavolejte ho appsettings.json.
Do appsettings.json přidejte následující kód:
{ "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": "*" }
Vyplňte hodnoty vložených parametrů získané z kroku 2 – Získání hodnot vložených parametrů.
Domain
- ID domény a tenantaTenantId
- ID domény a tenantaClientId
- ID klientaClientSecret
- Tajný klíč klienta
Poznámka:
V předchozím fragmentu PowerBi:ServiceRootUrl
kódu se parametr přidá jako vlastní hodnota konfigurace pro sledování základní adresy URL služba Power BI. Při programování proti služba Power BI ve veřejném cloudu Microsoftu je https://api.powerbi.com/
adresa URL . Kořenová adresa URL služba Power BI se ale bude lišit v jiných cloudech, jako je cloud státní správy. Proto je tato hodnota uložena jako hodnota konfigurace projektu, takže je v případě potřeby snadné ji změnit.
Získání přístupového tokenu Microsoft Entra a volání služba Power BI
Aby bylo možné vkládat obsah Power BI (například sestavy a řídicí panely), musí vaše aplikace získat token Microsoft Entra. K získání tokenu potřebujete objekt konfigurace.
Kód v této části používá model injektáže závislostí .NET Core. Pokud vaše třída potřebuje použít službu, můžete přidat parametr konstruktoru pro tuto službu a modul runtime .NET Core se postará o předání instance služby za běhu. V tomto případě konstruktor vloží instanci konfigurační služby .NET Core pomocí parametru IConfiguration
, který se používá k načtení PowerBi:ServiceRootUrl
hodnoty konfigurace z appsettings.json. Parametr ITokenAcquisition
, který má název tokenAcquisition
, obsahuje odkaz na ověřovací službu Microsoftu poskytovanou knihovnou Microsoft.Identity.Web
a slouží k získání přístupových tokenů z Microsoft Entra ID.
Pole RequiredScopes
obsahuje pole řetězců obsahující sadu delegovaných oprávnění podporovaných rozhraním SLUŽBA POWER BI API. Když vaše aplikace volá přes síť k získání tokenu Microsoft Entra, předá tuto sadu delegovaných oprávnění, aby je Microsoft Entra ID mohl zahrnout do přístupového tokenu, který vrátí.
Poznámka:
Ověřte, že je vaše aplikace Microsoft Entra nakonfigurovaná s obory vyžadovanými vaší webovou aplikací. Další informace najdete v tématu Změna oprávnění aplikace Microsoft Entra.
V projektu aplikace vytvořte novou složku s názvem Služby.
Ve složce Služby vytvořte nový soubor s názvem PowerBiServiceApi.cs.
Do PowerBiServiceApi.cs přidejte následující kód.
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() }; } } }
Úprava souboru HomeController.cs
V tomto příkladu kódu použijete injektáž závislostí. Při registraci PowerBiServiceApi
třídy jako služby voláním services.AddScoped
v ConfigureServices
metodě. Do konstruktoru můžete přidat PowerBiServiceApi
parametr a modul runtime .NET Core se postará o vytvoření PowerBiServiceApi
instance a jeho předání konstruktoru.
Ve složce Kontrolery otevřete soubor HomeController.cs a přidejte ho do následujícího fragmentu kódu:
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 });
}
}
}
Krok 5 : Sestavení klientské strany aplikace
Pro implementaci na straně klienta je potřeba vytvořit nebo upravit soubory v následující tabulce.
Soubor | Používání |
---|---|
embed.js | Obsahuje kód JavaScriptu na straně klienta. |
Embed.cshtml | Obsahuje objektový model dokumentu vaší aplikace (DOM) a div pro vložení sestavy. |
Vytvoření kontejneru pro vloženou sestavu
Vytvořte soubor Embed.cshtml, který má div
element použitý jako kontejner pro vloženou sestavu a tři skripty.
Ve složce Domů zobrazení>vytvořte soubor s názvem Embed.cshtml.
Do souboru Embed.cshtml přidejte následující fragment kódu.
@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> }
Přidání JavaScriptu na straně klienta pro vložení sestavy
Pokud chcete vložit obsah Power BI, musíte vytvořit objekt konfigurace. Další informace o vytvoření objektu konfigurace najdete v tématu Vložení sestavy.
V této části vytvoříte soubor JavaScriptu s názvem embed.js s objektem konfigurace pro vložení sestavy pomocí proměnné models
.
models
inicializuje pomocí volání window['powerbi-client'].models
. Proměnná models
se používá k nastavení konfiguračních hodnot, jako models.Permissions.All
je , models.TokenType.Aad
a models.ViewMode.View
.
Funkce powerbi.embed
používá models
objekt konfigurace k vložení sestavy.
Ve složce wwwroot>js vytvořte soubor s názvem embed.js.
Do souboru embed.js přidejte následující fragment kódu.
$(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); }); });
Krok 6 : Spuštění aplikace
Po provedení všech úprav uvedených v tomto kurzu jste připraveni spustit aplikaci. Spusťte aplikaci a experimentujte se způsobem, jakým je sestava Power BI vložená. Pomocí rozhraní API klienta vložených analytických nástrojů Power BI můžete aplikaci vylepšit pomocí rozhraní API na straně klienta.
Až bude vaše aplikace připravená, můžete vloženou aplikaci přesunout do produkčního prostředí.