你可以通过两种方式实现这一点 - 在嵌入报告时定义
筛选器,或使用
行级安全性。
在嵌入Power BI元素时,您正在初始化一个
配置。此对象的属性之一是在加载报告时要预应用的筛选器。目前支持以下筛选器类型:
export enum FilterType {
Advanced = 0,
Basic = 1,
Unknown = 2,
IncludeExclude = 3,
RelativeDate = 4,
TopN = 5,
Tuple = 6
}
这些类型对应于筛选器,当在浏览器或Power BI Desktop中显示报告时,您可以应用这些筛选器。有关每种筛选器类型具有哪些属性以及如何使用它的更多信息,请参见文档中的
Filters页面。例如,基本筛选器需要定义表格和列,应用筛选器的比较运算符,以及相应的值,例如:
const basicFilter: pbi.models.IBasicFilter = {
$schema: "http://powerbi.com/product/schema#basic",
target: {
table: "Store",
column: "Count"
},
operator: "In",
values: [1,2,3,4],
filterType: 1
}
或者
const basicFilter = {
$schema: "http://powerbi.com/product/schema#basic",
target: {
table: "Store",
column: "Count"
},
operator: "In",
values: [1,2,3,4],
filterType: 1
}
然后在嵌入之前,在配置中设置此过滤器:
var config = {
type: embedType,
accessToken: accessToken,
tokenType: tokenType,
embedUrl: embedUrl,
id: embedId,
dashboardId: dashboardId,
permissions: permissions,
settings: {
filterPaneEnabled: false,
navContentPaneEnabled: true
},
filters: [basicFilter]
};
请注意,这种情况下,您应该隐藏筛选器窗格,通过设置
filterPaneEnabled: false
,否则用户将在筛选器窗格中看到预先应用的筛选器,并能够更改或删除它!但是,如果隐藏筛选器窗格,则只能使用报告本身提供的滑块和其他选项来分析数据,这将限制用户的选项。因此,使用RLS可能是一个更好的选择,但这需要为工作区购买专用容量(即购买Power BI Premium或Power BI Embedded)。
要使用
RLS,您必须在报告中定义一个或多个角色。为每个角色定义一个 DAX 表达式来过滤数据。然后对于每个用户,您可以决定授予哪些角色,并且报告将仅显示这些角色可访问的数据。然后使用获取的 AAD 令牌,调用
GenerateTokenInGroup REST API,并在请求正文中
传递角色 给您想要的用户。
{
"accessLevel": "View",
"identities": [
{
"username": "john@contoso.com",
"roles": [
"sales",
"marketing"
],
"datasets": [
"cfafbeb1-8037-4d0c-896e-a46fb27ff229"
]
}
]
}
然后使用上述获取的令牌来嵌入报告,不要忘记在需要时将配置中
tokenType
属性的值从0(AAD)更改为1(嵌入),这样您就可以保留筛选器窗格的可见性,因为安全策略将在引擎下自动应用。