如何在PoweBI C#SDK中传递过滤参数

问题描述 投票:0回答:1

我正在使用C#SDK生成Power BI嵌入式令牌。

        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;
        }

我需要传递参数进行过滤。但是找不到一种简单的方法来做到这一点。我该如何完成?

c# powerbi powerbi-embedded
1个回答
0
投票

您可以在通过EffectiveIdentity生成此报告的访问令牌时传递GenerateTokenInGroup信息,从而在通过应用拥有数据场景(用于身份验证的单个主帐户)实现的嵌入式报告中使用RLS。

要在报表本身中实现RLS,您需要useUSERPRINCIPALNAME()DAX function来过滤数据,或者需要define roles并基于它们来过滤数据。如果您使用角色来实现,则在发布报告后转到数据集的安全设置并将用户添加到角色。

要通过提供有效的身份和角色成员资格来生成令牌,请使用如下代码:

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('[email protected]', datasets, roles);
    var r = new GenerateTokenRequest("view", effectiveIdentity);
    var token = client.Reports.GenerateTokenInGroup(groupId, reportId, r).Token;
}
© www.soinside.com 2019 - 2024. All rights reserved.