Да, абсолютно! Както @David Browne каза в отговора си, това е просто въпрос на зареждане на нещо в уеб браузър. По принцип няма значение какви са вашите източници на данни - SQL Server или плоски файлове, всичко е едно и също. Можете да видите как изглежда в Power BI Embedded Playground.
Имате два начина да вградите отчети на Power BI (или табла за управление или плочки, по същество е едно и също):
-
Използвайте Power BI Report Server, инсталиран на място. За да вградите отчет, просто добавете
iframe
в уеб страница и задайте източника й на URL адреса на отчета, но добавете?rs:embed=true
към него. Въпреки това, Power BI Reporting Server е доста скъп. Имате нужда от лиценз за SQL Server Enterprise със софтуерна гаранция или абонаменти за Power BI Premium. Предимство в този случай може да бъде фактът, че данните се съхраняват на място, тъй като в някои случаи публикуването на данни в облака може да бъде забранено или трудно за сертифициране и гарантиране на поверителност на данните. -
Публикувайте отчетите си в услугата Power BI (т.е. онлайн в уеб сайта на Power BI). Предимството на този сценарий е неговата цена. Можете да внедрите решения с един акаунт в Power BI Pro, т.е. $10 на месец. Недостатъкът може да бъде, че вашите данни трябва да са достъпни за услугата Power BI (т.е. извън вашата вътрешна мрежа) и е малко по-сложно за вграждане.
Когато вградите Power BI в приложението си, има два сценария, от които да избирате – потребителят притежава данни и приложението притежава данни. С първия всеки потребител се нуждае от собствен акаунт в Power BI Pro и го използва, за да види вградения отчет. При втория сценарий се нуждаете само от един „главен“ акаунт в Power BI Pro (възможно е също да го вградите, като удостоверявате с принципала на услугата, но нека засега да го простим).
Не споменахте дали сте уеб приложение на vb.net или десктоп. Ето много хубава демонстрация как да вградите Power BI в WPF приложение и ето официалните примери на Microsoft как да направите това в уеб приложение.
Ще обясня по-подробно как да го вградите в настолно приложение, но с уеб приложенията по същество е същото.
Първо трябва да публикувате отчета си в Power BI Service. Ще бъде по-добре да използвате специално работно пространство за това. Уверете се, че Pro акаунтът, който ще използвате като "главен" акаунт в приложението си, има права за това работно пространство. Не е добра идея да използвате своя (вероятно администраторски) акаунт, защото той има много повече привилегии, отколкото е необходимо. Можете, но ако $10/месец не са проблем, тогава ги изразходвайте за специален акаунт (или използвайте главница на услугата).
След това трябва да регистрирате приложение. Въведете някакво описателно име на приложението, задайте типа на приложението да бъде местно приложение. Изберете разрешенията, които ще са необходими за вашето приложение, т.е. ако ще чете само данни, не му предоставяйте разрешения за четене и запис. Или да ги предостави на всички. Това е твое решение. Регистрирайте приложението и копирайте ръководството, което ще получите. Нарича се "идентификатор на приложението" или "идентификатор на клиента". Ще ви трябва по-късно.
Следващата стъпка е да удостоверите приложението си срещу Azure AD. Използвайте библиотеки за удостоверяване на Azure Active Directory (ADAL) за това. Добавете ADAL към вашия проект (например с помощта на NuGet) и използвайте следния код, за да получите токен за достъп (кодът е на C#, защото не съм писал във vb от много години, но не би трябвало да имате проблеми с превода), но задайте ръководството, което сте получили до clientId
и предоставя стойности за masterAccountName
и 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;
}
В края authenticationResult.AccessToken
ще съдържа токена за достъп, който ще ви е необходим. Ако ви е любопитно какво има вътре в него, отидете на https://jwt.io/ и го поставете, за да го декодирате.
Извикайте Get Report в Group Power BI REST API, за да получите embedUrl
на отчета . Използвайте код като този (използва Newtonsoft.Json), предоставяйки действителен groupId
(workspaceId), reportId
(можете да ги получите от URL адреса на вашия отчет, когато се показва в уеб браузър) и 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"];
}
}
Тук идва трудната част. Имате нужда от Power BI JavaScript клиент, за да използвате URL адреса, който получавате с кода по-горе. Най-лесният начин е да получите ReportLoader.html
, ReportLoader.js
и powerbi.js
от извадката на WPF по-горе. Можете да прочетете подробности за тези файлове тук, но като цяло HTML файлът съдържа празен <div>
, където ще бъде зареден отчетът и извиквате код в ReportLoader.js
, предавайки някои параметри (кой отчет, токен за достъп, тип токен за достъп и т.н.) и ще извика Power BI JavaScript клиента, за да свърши тежката работа вместо вас.
Параметрите, които ще предадете на кода за зареждане, с код като този:
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
е компонент на уеб браузър, в който зареждате ReportLoader.html
. embedUrl
и accessToken
са стойностите, които сте придобили преди, идентификационният номер на отчета, типът на вграден елемент (отчет ли е, плочка или табло), тип токен за достъп (дали е AAD, който използвахме в този случай, или вграждане) и засега оставете последният празен (за повече подробности относно това вижте Подробности за конфигурацията за вграждане). Разликата между AAD
и Embed
токени е, че вградените токени са валидни за конкретен елемент (например отчет), докато AAD токените могат да се използват за удостоверяване на себе си в много различни повиквания. Това означава, че е по-безопасно да се използват токени за вграждане, тъй като те могат да се използват само за вграждане на този конкретен отчет и не могат да се използват за извършване на други извиквания на REST API. Имайте предвид, че този маркер за достъп се вижда от страна на клиента (намира се в кода на JavaScript). Ако искате да използвате маркери за вграждане, тогава използвайте маркера AAD от страната на сървъра, за да се обадите на GenerateTokenInGroup, но това изисква специален капацитет, присвоен на това работно пространство (т.е. Power BI Premium или Power BI Embedded) и без капацитет, вашият акаунт Pro е ограничен брой токени, които можете да използвате само за разработка.
След това отчетът ви трябва да бъде успешно зареден в webBrowser
.
Ще ви препоръчам също да гледате този видеоклип с помощта на удостоверяване само за приложение с вграждане на Power BI с Тед Патисън.