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

Power BI中如何将USERNAME()度量值与表列值比较实现用户动态过滤

Power BI 用户级数据权限过滤实现方案

M语言获取当前用户名的方法

M语言中可以通过User.Identity()函数获取当前访问用户的身份信息,提取用户名/UPN的用法为:

User.Identity()[Name]

注意事项:

  • Power BI Desktop 本地调试时,该函数返回本地Windows账号名称
  • 发布到Power BI服务后,返回用户的工作/学校账号UPN(格式为xxx@企业域名.com),和DAX中USERNAME()函数的返回值完全一致
  • 仅DirectQuery模式下适合用M做用户过滤,导入模式下M的逻辑仅在数据集刷新时执行,无法实现不同访问用户动态过滤,优先推荐用DAX+RLS方案

DAX使用USERNAME()比较报错的解决方案

你遇到的「无法将度量值与多个值进行比较」报错,核心原因是没有在逐行计算的上下文里执行比较逻辑,系统识别为你要将整个用户列的多个值和USERNAME()返回的单个标量值做对比,才触发错误。

标准实现方案(行级别安全性RLS)

这是Power BI实现用户动态数据过滤的官方推荐方案,无需修改数据查询逻辑,配置步骤如下:

  • 确保Person表包含用户UPN列(存储和USERNAME()返回格式一致的用户账号),且Person表和业务表通过「办事处ID」「区域ID」等字段建立了一对多关联,筛选方向为从Person表指向业务表
  • 点击顶部菜单栏「建模」-「管理角色」,新建角色(例如命名为「普通访问用户」)
  • 选中Person表,在表筛选DAX输入框中填入:
[用户UPN列] = USERNAME()
  • 保存角色后,可通过「建模」-「以角色身份查看」功能,输入测试用户的UPN验证过滤效果
  • 发布到Power BI服务后,在对应数据集的「安全性」设置中,将需要访问报表的用户添加到「普通访问用户」角色即可

配置完成后,用户访问报表时,系统会自动用当前登录用户的UPN过滤Person表,筛选条件会通过关联关系自动传递到所有业务表,用户仅能看到自身所属办事处/区域的对应数据。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.07 04:09:00