Как передать параметры фильтрации в PoweBI C# SDK - PullRequest
0 голосов
/ 28 мая 2020

Я генерирую встраиваемый токен Power BI с помощью C# SDK.

        using (var client = new PowerBIClient(new Uri(apiUrl), tokenCredentials))
        {
            var workspaceId = groupId.ToString(); 
            var report = await client.Reports.GetReportInGroupAsync(workspaceId, reportId);
            var generateTokenRequestParameters = new GenerateTokenRequest(accessLevel: "view");

            var tokenResponsex = await client.Reports.GenerateTokenAsync(workspaceId, reportId, generateTokenRequestParameters);

            result.EmbedToken = tokenResponsex;
            result.EmbedUrl = report.EmbedUrl;
            result.Id = report.Id;
        }

Мне нужно передать параметр для фильтрации. Но простого способа сделать это не удалось. Как мне это сделать?

1 Ответ

1 голос
/ 29 мая 2020

Вы можете использовать RLS во встроенных отчетах, реализованных со сценарием данных, принадлежащих приложению (одна главная учетная запись для аутентификации), передавая информацию EffectiveIdentity при создании токена доступа для этого отчета с помощью GenerateTokenInGroup .

Чтобы реализовать RLS в самом отчете, вам необходимо: использовать USERPRINCIPALNAME() функцию DAX для фильтрации данных или определить роли и фильтровать данные на их основе. Если вы реализуете его с ролями, после публикации отчета go в настройках безопасности набора данных и добавления пользователей к ролям.

Чтобы сгенерировать токен, предоставив действующий идентификатор и членство в ролях, используйте следующий код:

var credentials = new TokenCredentials(accessToken, "Bearer");

using (var client = new PowerBIClient(new Uri("https://api.powerbi.com"), credentials))
{
    var datasets = new List<string>() { datasetId }; // Dataset's GUID as a string
    var roles = new List<string>();
    roles.Add('ROLE1');
    roles.Add('ROLE2');
    roles.Add('ROLE3');
    var effectiveIdentity = new EffectiveIdentity('user@example.com', datasets, roles);
    var r = new GenerateTokenRequest("view", effectiveIdentity);
    var token = client.Reports.GenerateTokenInGroup(groupId, reportId, r).Token;
}
...