如何基于用户GUID在Power BI/SQL Server查询中获取Azure AD用户名列表
Azure AD GUID转换为用户名的实现方案
SQL Server端实现(推荐用于Power BI大数据量场景)
SQL Server无内置直接查询Azure AD用户信息的函数,最稳定的实现方式是提前同步Azure AD用户映射表关联查询:
- 首先将Azure AD全量用户的对象ID(对应
ModifiedBy存储的GUID)、显示名、用户主体名(UPN)同步到SQL Server自定义表,例如表名为dbo.AzureADUserMapping,核心字段为UserObjectId(存储GUID)、DisplayName、UserPrincipalName - 关联查询语句示例:
SELECT 业务表.*, ad.DisplayName AS ModifiedByUserName, ad.UserPrincipalName AS ModifiedByUPN FROM 你的业务表名 业务表 LEFT JOIN dbo.AzureADUserMapping ad ON 业务表.ModifiedBy = ad.UserObjectId
该方案查询性能高,无接口调用频率限制,适配Power BI所有刷新模式。
Power BI端实现
如果无法在SQL Server端新增映射表,可直接在Power BI内完成转换:
- 方案1:Power Query调用Microsoft Graph拉取用户映射表关联
操作逻辑为在Power Query中拉取Azure AD全量用户数据,和业务表的ModifiedBy字段合并匹配,即可得到对应用户名,M函数示例如下(直接复制到Power Query高级编辑器即可使用,需用有Azure AD用户读取权限的账号做OAuth认证):
let 拉取AAD用户 = OData.Feed("https://graph.microsoft.com/v1.0/users?$select=id,displayName,userPrincipalName", null, [Implementation="2.0"]), 保留必要字段 = Table.SelectColumns(拉取AAD用户, {"id", "displayName", "userPrincipalName"}), 重命名匹配字段 = Table.RenameColumns(保留必要字段, {{"id", "ModifiedBy"}}) in 重命名匹配字段
将上述查询生成的表和你的业务表做合并查询,匹配ModifiedBy字段后即可提取displayName(用户名)字段。
- 方案2:如果仅需要识别当前报表查看人的
ModifiedBy对应名称,可直接用DAX函数USERPRINCIPALNAME()匹配当前登录用户的UPN,无需拉取全量用户数据。
注意:Power BI端调用Graph拉取用户数据受接口调用频率限制,若用户量超过1万建议优先使用SQL Server端映射表方案。
内容的提问来源于stack exchange,提问作者NBO
相关产品推荐
相关产品推荐

