Power BI行级别安全性(数据权限管理)
自从PowerBI 的DAX 函数 支持username() 或 userprincipalname()的函数后,我们就可以在Power BI中实现根据用户的行级数据权限的控制。
username() 将返回采用域\用户格式的用户. ReportServer 的PowerBI上有坑,username()返回的还是 user@contoso.com 格式。
userprincipalname() 将返回采用 user@contoso.com 格式的用户
实现方式
1、权限的表的定义
权限表结构定义如下,如下图所以a用户可看ABC的数据,b用户可看CD的数据。另外增加所有客户与admin的关联关系。
其中LoginID是AD用户名 格式为【域\用户】
2、Power BI Desktop 中的处理
a)可以访问所有数据的用户。
针对此类用户,我们添加一个admin的角色。
设置DAX表达式 :LogonID] = "admin"
b) 带有数据控制的用户。
针对此类用户,我们添加一个right_conrtl的角色。
设置DAX表达式:[LogonID] = username()
3、Power BI Report Server 中将用户添加进角色中。
4、筛选器数据控制
多对多关系
[dept_id] IN SELECTCOLUMNS( GENERATE(FILTER(OLAP_Dim_Task_Right,OLAP_Dim_Task_Right[UserPrincipalName]=USERPRINCIPALNAME()),RELATEDTABLE (OLAP_Dim_Dept)),"OLAP_Dim_Dept",OLAP_Dim_Dept[dept_id])