如何在Power BI Embedded中配置关联userprincipalname()的多SCHEMECODE RLS?
Power BI Embedded 多值SCHEMECODE的RLS配置方案
核心需求
基于Web应用返回的逗号分隔SCHEMECODE(示例:"16856,39760"),在指定表格上配置行级别安全(RLS),限制用户仅能查看自身权限范围内的SCHEMECODE对应数据,权限值与USERPRINCIPALNAME()关联。
配置步骤
1. 创建RLS角色
- 打开Power BI Desktop,切换到建模选项卡,点击管理角色。
- 新建角色(例如命名为
SchemeAccess),选中需要配置RLS的目标表格。
2. 编写DAX过滤表达式
在角色的表格过滤规则框中,输入以下DAX代码(根据Power BI版本选择适配方案):
方案一:使用SPLIT函数(适用于较新版本Power BI)
SCHEMECODE IN SELECTCOLUMNS( SPLIT(USERPRINCIPALNAME(), ","), "AllowedScheme", [Value] )
方案二:兼容旧版本的PATH系列函数
SCHEMECODE IN SELECTCOLUMNS( GENERATESERIES(1, PATHLENGTH(USERPRINCIPALNAME())), "AllowedScheme", PATHITEM(USERPRINCIPALNAME(), [Value], TEXT) )
处理带空格的权限值
如果Web应用返回的字符串包含空格(例如"16856, 39760"),需要添加TRIM函数清理格式:
TRIM(SCHEMECODE) IN SELECTCOLUMNS( SPLIT(USERPRINCIPALNAME(), ","), "AllowedScheme", TRIM([Value]) )
3. 验证配置
- 在Power BI Desktop中,点击查看为角色,选择
SchemeAccess角色,输入模拟的权限字符串(如"16856,39760"),确认表格仅显示对应SCHEMECODE的数据。 - 发布到Power BI服务后,确保Web应用在嵌入时将用户的权限字符串正确传递为
USERPRINCIPALNAME()的值。
注意事项
- 确保目标表格的
SCHEMECODE列与权限字符串中的值格式一致(如均为文本类型,无格式差异)。 - 若权限传递逻辑使用
CustomData而非USERPRINCIPALNAME(),只需将表达式中的USERPRINCIPALNAME()替换为CUSTOMDATA()即可。
内容的提问来源于stack exchange,提问作者Vinay Kurmi
相关产品推荐
相关产品推荐

