我正在使用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生成此报告的访问令牌时传递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;
}