Ano absolutně! Jak uvedl ve své odpovědi @David Browne, jde jen o to, načíst něco do webového prohlížeče. Obecně nezáleží na tom, jaké jsou vaše zdroje dat – SQL Server nebo ploché soubory, vše je stejné. Můžete se podívat, jak to vypadá v Power BI Embedded Playground.
Máte dva způsoby, jak vložit sestavy Power BI (nebo řídicí panely nebo dlaždice, je to v podstatě totéž):
-
Použijte Power BI Report Server nainstalovaný na místě. Chcete-li vložit přehled, stačí přidat
iframe
na webovou stránku a nastavte její zdroj na adresu URL přehledu, ale přidejte?rs:embed=true
k tomu. Power BI Reporting Server je však poměrně drahý. Potřebujete licenci pro SQL Server Enterprise se softwarem Assurance nebo předplatná Power BI Premium. Výhodou by v tomto případě mohla být skutečnost, že data jsou uchovávána na premise, protože v některých případech může být publikování dat do cloudu zakázáno nebo obtížně certifikovatelné a garantované soukromí dat. -
Publikování sestav do služby Power BI (tj. online na web Power BI). Výhodou tohoto scénáře je jeho cena. Řešení můžete implementovat s jedním účtem Power BI Pro, tedy 10 $ měsíčně. Nevýhodou může být, že vaše data musí být přístupná pro službu Power BI (tj. mimo vaši interní síť) a jejich vkládání je o něco složitější.
Když Power BI vložíte do své aplikace, máte na výběr ze dvou scénářů – uživatel vlastní data a aplikace vlastní data. U prvního potřebuje každý uživatel svůj vlastní účet Power BI Pro a používá jej k zobrazení vložené sestavy. Ve druhém scénáři potřebujete pouze jeden „hlavní“ účet Power BI Pro (je také možné jej vložit pro ověřování pomocí instančního objektu, ale nyní to zjednodušíme).
Nezmínil jste se, že jste webovou aplikací nebo desktopem aplikace vb.net. Zde je velmi pěkná ukázka, jak vložit Power BI do aplikace WPF, a zde jsou oficiální ukázky společnosti Microsoft, jak to provést ve webové aplikaci.
Vysvětlím podrobněji, jak jej vložit do desktopové aplikace, ale s webovými aplikacemi je to v podstatě stejné.
Nejprve musíte publikovat sestavu ve službě Power BI. K tomu bude lepší použít vyhrazený pracovní prostor. Ujistěte se, že účet Pro, který budete ve své aplikaci používat jako „hlavní“ účet, má práva pro tento pracovní prostor. Není dobrý nápad používat svůj (pravděpodobně administrátorský) účet, protože má mnohem více práv, než je potřeba. Můžete, ale pokud vám 10 $ měsíčně nevadí, utraťte je za vyhrazený účet (nebo použijte hlavní službu).
Poté je třeba zaregistrovat aplikaci. Zadejte nějaký popisný název aplikace, nastavte typ aplikace na Nativní aplikaci. Vyberte oprávnění, která budou pro vaši aplikaci vyžadována, tj. pokud bude pouze číst data, neudělujte jí oprávnění „číst a zapisovat“. Nebo jim poskytněte všechny. Je to tvé rozhodnutí. Zaregistrujte aplikaci a zkopírujte průvodce, který získáte. Říká se tomu „ID aplikace“ nebo „ID klienta“. Budete to potřebovat později.
Dalším krokem je ověření aplikace proti Azure AD. K tomu použijte Azure Active Directory Authentication Libraries (ADAL). Přidejte ADAL do svého progectu (např. pomocí NuGet) a použijte následující kód k získání přístupového tokenu (kód je v C#, protože jsem mnoho let nepsal ve vb, ale neměli byste mít problémy s překladem), ale přiřaďte průvodce, který jste dostali do clientId
a zadejte hodnoty pro masterAccountName
a masterAccountPassword
:
using Microsoft.IdentityModel.Clients.ActiveDirectory;
private static string redirectUri = "https://login.live.com/oauth20_desktop.srf";
private static string resourceUri = "https://analysis.windows.net/powerbi/api";
private static string authorityUri = "https://login.windows.net/common/oauth2/authorize";
private static string clientId = "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx";
private static AuthenticationContext authContext = new AuthenticationContext(authorityUri, new TokenCache());
// First check is there token in the cache
try
{
authenticationResult = authContext.AcquireTokenSilentAsync(resourceUri, clientId).Result;
}
catch (AggregateException ex)
{
AdalException ex2 = ex.InnerException as AdalException;
if ((ex2 == null) || (ex2 != null && ex2.ErrorCode != "failed_to_acquire_token_silently"))
{
throw new ApplicationException(ex.Message);
}
}
if (authenticationResult == null)
{
var uc = new UserPasswordCredential(masterAccountName, masterAccountPassword);
authenticationResult = authContext.AcquireTokenAsync(resourceUri, clientId, uc).Result;
}
Na konci authenticationResult.AccessToken
bude obsahovat přístupový token, který budete potřebovat. Pokud vás zajímá, co je uvnitř, přejděte na https://jwt.io/ a vložte to, aby se to dekódovalo.
Zavolejte Get Report In Group Power BI REST API a získejte embedUrl
sestavy . Použijte kód jako tento (používá Newtonsoft.Json), který poskytne skutečné groupId
(workspaceId), reportId
(můžete je získat z adresy URL svého přehledu, když je zobrazen ve webovém prohlížeči) a accessToken
:
string powerBIDatasetsApiUrl = $"https://api.powerbi.com/v1.0/myorg/groups/{groupId}/reports/{reportId}";
var request = WebRequest.Create(powerBIDatasetsApiUrl) as HttpWebRequest;
request.KeepAlive = true;
request.Method = "GET";
request.ContentLength = 0;
request.ContentType = "application/json";
request.Headers.Add("Authorization", $"Bearer {accessToken}");
using (HttpWebResponse httpResponse = request.GetResponse() as System.Net.HttpWebResponse)
{
using (StreamReader reader = new System.IO.StreamReader(httpResponse.GetResponseStream()))
{
string responseContent = reader.ReadToEnd();
var responseJson = JsonConvert.DeserializeObject<dynamic>(responseContent);
return responseJson["embedUrl"];
}
}
Zde přichází ta záludná část. K použití adresy URL, kterou získáte s výše uvedeným kódem, potřebujete klienta JavaScriptu Power BI. Nejjednodušší způsob je získat ReportLoader.html
, ReportLoader.js
a powerbi.js
z výše uvedeného příkladu WPF. Podrobnosti o těchto souborech si můžete přečíst zde, ale obecně soubor HTML obsahuje prázdný <div>
, kde se přehled načte, a zavoláte kód v ReportLoader.js
, předání některých parametrů (která sestava, přístupový token, typ přístupového tokenu atd.) a zavolá JavaScriptového klienta Power BI, aby to udělal za vás.
Parametry, které předáte kódu zavaděče, s kódem jako je tento:
var parameters = new object[] { embedUrl, accessToken, reportId, "report" /* or "dashboard" or "tile"*/, 0 /* 0 - AAD, 1 - Embed */, string.Empty };
webBrowser.Document.InvokeScript("LoadEmbeddedObject", parameters);
webBrowser
je komponenta webového prohlížeče, do které načtete ReportLoader.html
. embedUrl
a accessToken
jsou hodnoty, které jste získali dříve, ID sestavy, typ prvku pro vložení (je to sestava, dlaždice nebo dashboard), typ přístupového tokenu (je to AAD, který jsme v tomto případě použili, nebo vložení) a prozatím nechte poslední prázdný (další podrobnosti o tom viz Podrobnosti konfigurace vložení). Rozdíl mezi AAD
a Embed
tokeny spočívá v tom, že tokeny pro vložení jsou platné pro konkrétní prvek (např. sestavu), zatímco tokeny AAD lze použít k autentizaci v mnoha různých voláních. To znamená, že je bezpečnější používat tokeny pro vložení, protože je lze použít pouze k vložení této konkrétní sestavy a nelze je použít k provádění jiných volání rozhraní REST API. Mějte na paměti, že tento přístupový token je viditelný na straně klienta (je v kódu JavaScript). Pokud chcete použít tokeny pro vložení, použijte token AAD na straně serveru k volání GenerateTokenInGroup, ale to vyžaduje vyhrazenou kapacitu přiřazenou tomuto pracovnímu prostoru (tj. Power BI Premium nebo Power BI Embedded) a bez kapacity má váš účet Pro omezenou kapacitu počet tokenů, které můžete použít pouze pro vývoj.
Poté by měl být váš přehled úspěšně načten do webBrowser
.
Doporučuji vám také zhlédnout toto video Používání ověřování pouze aplikací s vkládáním Power BI s Tedem Pattisonem.