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

How to pass filtering parameters in PoweBI C# SDK

我正在使用 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;
        }

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

通过传递 EffectiveIdentity information when generating access token for this report with GenerateTokenInGroup.

,您可以在使用应用拥有数据方案(用于身份验证的单个主帐户)实现的嵌入式报告中使用 RLS

要在报告本身中实施 RLS,您需要 use USERPRINCIPALNAME() DAX function to filter the data, or 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('user@example.com', datasets, roles);
    var r = new GenerateTokenRequest("view", effectiveIdentity);
    var token = client.Reports.GenerateTokenInGroup(groupId, reportId, r).Token;
}