Tak, absolutnie! Jak powiedział @David Browne w swojej odpowiedzi, to tylko kwestia załadowania czegoś w przeglądarce internetowej. Ogólnie rzecz biorąc, nie ma znaczenia, jakie są Twoje źródła danych — SQL Server lub płaskie pliki, wszystko jest takie samo. Możesz zobaczyć, jak to wygląda w Power BI Embedded Playground.
Masz dwa sposoby osadzania raportów usługi Power BI (lub pulpitów nawigacyjnych lub kafelków, zasadniczo jest to takie samo):
-
Użyj serwera raportów usługi Power BI zainstalowanego lokalnie. Aby osadzić raport, po prostu dodaj
iframe
na stronę internetową i ustaw jej źródło na adres URL raportu, ale dodaj?rs:embed=true
do niego. Serwer raportowania usługi Power BI jest jednak dość drogi. Potrzebujesz licencji na program SQL Server Enterprise z gwarancją oprogramowania lub subskrypcje usługi Power BI Premium. Zaletą w tym przypadku może być fakt, że dane są przechowywane lokalnie, ponieważ w niektórych przypadkach publikowanie danych w chmurze może być niedozwolone lub trudne do poświadczenia i zagwarantowania prywatności danych. -
Publikuj raporty w usłudze Power BI (tj. online w witrynie internetowej usługi Power BI). Zaletą tego scenariusza jest jego cena. Możesz wdrożyć rozwiązania z jednym kontem Power BI Pro, czyli 10 USD miesięcznie. Wadą może być to, że Twoje dane muszą być dostępne dla usługi Power BI (tj. poza siecią wewnętrzną), a osadzanie jest nieco bardziej skomplikowane.
Po osadzeniu usługi Power BI w aplikacji istnieją dwa scenariusze do wyboru — użytkownik jest właścicielem danych i aplikacja jest właścicielem danych. W przypadku pierwszego z nich każdy użytkownik potrzebuje własnego konta Power BI Pro i używa go, aby zobaczyć osadzony raport. W drugim scenariuszu potrzebujesz tylko jednego „nadrzędnego” konta Power BI Pro (możliwe jest również osadzenie go z uwierzytelnianiem za pomocą jednostki usługi, ale na razie zachowajmy prostotę).
Nie wspomniałeś, że jesteś aplikacją internetową lub aplikacją vb.net. Oto bardzo ładne demo, jak osadzić Power BI w aplikacji WPF, a oto oficjalne próbki Microsoftu, jak to zrobić w aplikacji internetowej.
Wyjaśnię bardziej szczegółowo, jak osadzić go w aplikacji komputerowej, ale z aplikacjami internetowymi zasadniczo jest tak samo.
Najpierw musisz opublikować raport w usłudze Power BI. Lepiej będzie użyć do tego dedykowanego obszaru roboczego. Upewnij się, że konto Pro, którego będziesz używać jako konto „główne” w swojej aplikacji, ma uprawnienia do tego obszaru roboczego. Używanie konta (prawdopodobnie administratora) nie jest dobrym pomysłem, ponieważ ma ono o wiele więcej uprawnień niż jest to potrzebne. Możesz, ale jeśli 10 USD miesięcznie nie stanowi problemu, wydaj je na dedykowane konto (lub użyj jednostki usługi).
Następnie musisz zarejestrować aplikację. Wpisz opisową nazwę aplikacji, ustaw typ aplikacji na Aplikacja natywna. Wybierz uprawnienia, które będą wymagane dla Twojej aplikacji, tj. jeśli chcesz tylko czytać dane, nie nadaj jej uprawnień „odczyt i zapis”. Lub przyznaj im wszystkie. To Twoja decyzja. Zarejestruj aplikację i skopiuj otrzymany przewodnik. Nazywa się to „identyfikatorem aplikacji” lub „identyfikatorem klienta”. Będziesz go potrzebować później.
Następnym krokiem jest uwierzytelnienie aplikacji w usłudze Azure AD. W tym celu użyj bibliotek uwierzytelniania usługi Azure Active Directory (ADAL). Dodaj ADAL do swojego progectu (np. za pomocą NuGet) i użyj poniższego kodu, aby uzyskać token dostępu (kod jest w C#, ponieważ nie pisałem w vb przez wiele lat, ale nie powinieneś mieć problemów z jego przetłumaczeniem), ale przypisz guid, który masz, do clientId
i podaj wartości dla masterAccountName
i 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 końcu authenticationResult.AccessToken
będzie zawierać token dostępu, którego będziesz potrzebować. Jeśli jesteś ciekawy, co jest w środku, przejdź do https://jwt.io/ i wklej go, aby go zdekodować.
Wywołaj Get Report In Group Power BI REST API, aby uzyskać embedUrl
raportu . Użyj kodu w ten sposób (używa Newtonsoft.Json), podając rzeczywisty groupId
(workspaceId), reportId
(możesz je uzyskać z adresu URL raportu, gdy jest on wyświetlany w przeglądarce internetowej) i 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"];
}
}
Nadchodzi trudna część. Aby użyć adresu URL otrzymanego z powyższym kodem, potrzebujesz klienta Power BI JavaScript. Najprostszym sposobem jest pobranie ReportLoader.html
, ReportLoader.js
i powerbi.js
z powyższego przykładu WPF. Możesz przeczytać szczegółowe informacje na temat tych plików tutaj, ale ogólnie plik HTML zawiera pusty <div>
, gdzie raport zostanie załadowany, i wywołasz kod w ReportLoader.js
, przekazując niektóre parametry (raport, token dostępu, typ tokenu dostępu itp.) i wywoła klienta Power BI JavaScript, aby wykonał za Ciebie zadanie.
Parametry, które przekażesz do kodu programu ładującego, z takim kodem:
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
to komponent przeglądarki internetowej, w którym ładujesz ReportLoader.html
. embedUrl
i accessToken
to wartości, które nabyłeś wcześniej, identyfikator raportu, typ elementu embed (czy jest to raport, kafelek czy dashboard), typ tokena dostępu (czy jest to AAD, którego użyliśmy w tym przypadku, czy embed) i na razie zostaw ostatnia pusta (aby uzyskać więcej informacji na ten temat, zobacz Szczegóły konfiguracji osadzania). Różnica między AAD
i Embed
tokens polega na tym, że tokeny embed są ważne dla konkretnego elementu (np. raportu), podczas gdy tokeny AAD mogą być używane do uwierzytelniania się w wielu różnych wywołaniach. Oznacza to, że bezpieczniej jest używać tokenów osadzania, ponieważ można ich używać tylko do osadzania tego konkretnego raportu i nie można ich używać do wykonywania innych wywołań interfejsu API REST. Pamiętaj, że ten token dostępu jest widoczny po stronie klienta (jest w kodzie JavaScript). Jeśli chcesz użyć tokenów osadzania, użyj tokena AAD po stronie serwera, aby wywołać GenerateTokenInGroup, ale wymaga to dedykowanej pojemności przypisanej do tego obszaru roboczego (tj. Power BI Premium lub Power BI Embedded) i bez pojemności Twoje konto Pro ma ograniczoną liczba tokenów, których możesz użyć tylko do rozwoju.
Następnie Twój raport powinien zostać pomyślnie załadowany do webBrowser
.
Polecam również obejrzenie tego filmu wideo Korzystanie z uwierzytelniania tylko przez aplikację z osadzaniem Power BI z Tedem Pattisonem.