如何将自定义应用用户关联至Power BI服务并传递用户数据?
解决方案:自定义应用用户与Power BI/Power Automate关联实现
一、正确传递用户标识到Power BI(修复EffectiveIdentity报错)
你之前的代码报错核心原因是EffectiveIdentity必须关联目标数据集——RLS身份绑定在数据集层面,不指定数据集会导致Power BI无法识别身份作用范围。修改后的代码如下:
// 构造有效身份,直接传入自定义应用的userId,关联对应数据集 var rlsIdentity = new EffectiveIdentity( username: userId, datasets: new List<string> { "你的目标数据集ID" } // 必填:关联仪表盘依赖的数据集ID ); // 生成嵌入令牌 var generateTokenRequestParameters = new GenerateTokenRequest( identities: new List<EffectiveIdentity> { rlsIdentity }, accessLevel: "view" ); var tokenResponse = await _client.Dashboards.GenerateTokenInGroupAsync( workSpaceID, dashboard.Id, generateTokenRequestParameters, cancellationToken );
关键注意事项:
- 无需额外定义RLS角色:如果只是传递用户标识而非过滤数据,不需要在Power BI数据集中创建RLS规则,只需传入EffectiveIdentity即可保留身份信息。
- 避免格式冗余:直接使用原始userId作为
username值,不要添加userId:前缀,防止USERPRINCIPALNAME()获取值时出现格式问题。
二、在Power BI中获取用户标识
在Power BI报表/仪表盘里,使用DAX函数USERPRINCIPALNAME()即可获取你传入的userId值:
- 可在卡片可视化中直接显示该值
- 在按钮、交互动作中可将其作为参数传递
三、同步用户标识到Power Automate Flow
方式1:Power BI按钮触发流时传递参数
- 在Power BI中添加“按钮”可视化
- 配置按钮动作为“触发流”,选择目标Power Automate流
- 在流的输入参数设置中,新增参数(如
AppUserId),值设置为USERPRINCIPALNAME() - 流中即可通过该参数获取自定义应用的用户ID,再推送至Amazon SQS队列
方式2:可视化交互触发流传递参数
对于图表、切片器等交互元素,可在“操作”设置中配置“触发流”,并将USERPRINCIPALNAME()作为参数传入流中,实现交互事件与用户身份的绑定。
四、权限验证
确保你的Service Principal具备以下权限:
- 目标工作区的“成员”或以上权限
- 目标数据集的“读取”或以上权限
内容的提问来源于stack exchange,提问作者Cory Koch
相关产品推荐
相关产品推荐

