You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

求Power BI中用于RLS过滤的DAX函数:按部门匹配数据

Power BI行级安全(RLS)按Division过滤实现

核心思路

先建立用户与部门的映射关系,通过当前登录用户的邮箱(USERPRINCIPLENAME()获取)找到对应的Division,再过滤主表中同Division的所有行,逻辑和你熟悉的SQL子查询一致。

步骤1:准备用户-部门映射数据

如果你的主表(假设名为业务数据表)中每个用户的Email对应唯一Division,可直接用主表作为映射源;如果存在重复数据,建议新建一张用户部门映射表,仅保留Email和Division列,确保每行对应唯一用户-部门关系。

步骤2:创建RLS角色

  1. 在Power BI Desktop中切换到建模选项卡
  2. 点击管理角色 → 点击创建,给角色命名(例如「按部门过滤」)
  3. 在角色设置界面,选择需要应用RLS的主表(业务数据表)

步骤3:编写DAX过滤规则

根据数据结构选择对应表达式:

场景1:直接使用主表作为映射源

对应SQL逻辑:SELECT * FROM 业务数据表 WHERE Division = (SELECT Division FROM 业务数据表 WHERE Email = 当前用户邮箱)
DAX表达式:

业务数据表[Division] = 
CALCULATE(
    VALUES(业务数据表[Division]),
    FILTER(
        ALL(业务数据表),
        业务数据表[Email] = USERPRINCIPLENAME()
    )
)

场景2:使用独立的用户部门映射表

对应SQL逻辑:SELECT * FROM 业务数据表 b JOIN 用户部门映射表 u ON b.Division = u.Division WHERE u.Email = 当前用户邮箱
DAX表达式:

业务数据表[Division] = 
LOOKUPVALUE(
    用户部门映射表[Division],
    用户部门映射表[Email], USERPRINCIPLENAME()
)

场景3:一个用户对应多个部门

对应SQL逻辑:SELECT * FROM 业务数据表 WHERE Division IN (SELECT Division FROM 用户部门映射表 WHERE Email = 当前用户邮箱)
DAX表达式:

业务数据表[Division] IN 
CALCULATETABLE(
    VALUES(用户部门映射表[Division]),
    用户部门映射表[Email] = USERPRINCIPLENAME()
)

步骤4:测试RLS规则

  1. 点击建模选项卡 → 查看为角色
  2. 选择你创建的「按部门过滤」角色,输入测试用户的邮箱(需在映射表中有对应Division记录)
  3. 验证报表是否仅显示该用户对应Division的所有行

注意事项

  • 确保USERPRINCIPLENAME()返回的邮箱格式和表中Email列完全一致(包括大小写、完整域名,比如user@company.com不能简写为user)
  • 发布到Power BI服务后,需确保报表访问用户的邮箱已在映射表中存在对应Division记录

内容的提问来源于stack exchange,提问作者SomekindaRazzmatazz

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.14 18:21:12