Есть ли способ встроить мощные отчеты и информационные панели в настольное приложение vb.net или C # с базой данных SQL Server 2008? - PullRequest
0 голосов
/ 01 июня 2019

У меня есть настольное приложение vb.net с базой данных SQL Server 2008. В настоящее время я использую SSRS для отчетов, но мой клиент хочет иметь визуальное представление данных. Поэтому я хочу использовать инструментальные панели Power BI. Итак, каковы шаги для встраивания power bi dashboards в приложение vb.net.

Ответы [ 2 ]

1 голос
/ 03 июня 2019

Да, абсолютно! Как сказал @David Browne в своем ответе, это просто вопрос загрузки чего-либо в веб-браузер. Как правило, не имеет значения, какие у вас источники данных - SQL Server или простые файлы, все одинаково. Вы можете посмотреть, как это выглядит на Power BI Embedded Playground .

У вас есть два способа встраивать отчеты Power BI (или информационные панели или листы, по сути, это одно и то же):

  1. Использование Сервер отчетов Power BI , установленный в помещении. Чтобы встроить отчет , просто добавьте iframe на веб-страницу и установите для его источника URL-адрес отчета, но добавьте к нему ?rs:embed=true. Однако сервер отчетов Power BI стоит довольно дорого . Вам нужна лицензия на SQL Server Enterprise с программным обеспечением или подписки Power BI Premium. Преимуществом в этом случае может быть тот факт, что данные хранятся в помещении, поскольку в некоторых случаях публикация данных в облаке может быть запрещена или затруднительна для сертификации и гарантии конфиденциальности данных.

  2. Публикация отчетов в службе 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, но у вас не должно возникнуть проблем с его переводом), но назначьте Guid, который вы получили на 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/ и вставьте его, чтобы расшифровать.

Позвоните Получить отчет в группе 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, передавая некоторые параметры (которыеотчет, доступ к токену, доступ к типу токена и т. д.), и он будет вызывать JavaScript-клиент Power BI для выполнения тяжелой работы за вас.

Параметры, которые вы передадите в код загрузчика, с кодомвот так:

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 могут использоваться для аутентификации во многих различных вызовах.Это означает, что безопаснее использовать токены встраивания, потому что они могут использоваться только для встраивания этого конкретного отчета и не могут использоваться для выполнения других вызовов API REST.Имейте в виду, что этот токен доступа виден на стороне клиента (он находится в коде JavaScript).Если вы хотите использовать токены для встраивания, используйте токен AAD на стороне сервера для вызова GenerateTokenInGroup , но для этого требуется выделенная емкость, назначенная этому рабочему пространству (то есть Power BI Premium или Power BI Embedded) и без емкости, ваша учетная запись Pro имеет ограниченное количество токенов, которые вы можете использовать только для разработки.

После этого ваш отчет должен быть успешно загружен в webBrowser.

Я также рекомендую вамсмотреть это видео Использование аутентификации только для приложений с Power BI Embedded с Тедом Паттисоном .

1 голос
/ 01 июня 2019

Power BI Embedded всегда использует веб-браузер и IFrame.Таким образом, вы должны начать с встраивания элемента управления браузером в настольное приложение, а затем выполнить обычное Power BI Embedding .

...