从Microsoft Graph API导入Power BI遇URI错误及凭证配置问题
Power BI通过M函数调用Microsoft Graph API的错误解决与凭证配置指南
一、解决URI错误
- 错误原因:你在M函数里误用了需要相对URI的函数(比如
Uri.Combine),但传入了完整的绝对URL(https://graph.microsoft.com/v1.0/users),导致系统无法生成相对URI触发报错。 - 修复方法:直接将完整URL作为请求地址使用,不要嵌套到需要相对路径的函数中。比如之前如果写了
Uri.Combine("https://graph.microsoft.com", "https://graph.microsoft.com/v1.0/users"),改成直接用"https://graph.microsoft.com/v1.0/users"即可。
二、正确的凭证配置与API请求流程
你手里的Client ID、Tenant ID、Secret Key需要通过客户端凭证流获取访问令牌,再用令牌调用Graph API,具体步骤如下:
1. 编写M函数获取访问令牌
在Power BI高级编辑器中创建一个查询(比如命名为GetAccessToken),代码如下:
let // 替换成你的实际凭证 TenantID = "你的Tenant ID", ClientID = "你的Client ID", ClientSecret = "你的Secret Key", // Azure AD令牌请求端点 TokenEndpoint = "https://login.microsoftonline.com/" & TenantID & "/oauth2/v2.0/token", // 构建令牌请求体 TokenRequestBody = [ grant_type = "client_credentials", client_id = ClientID, client_secret = ClientSecret, scope = "https://graph.microsoft.com/.default" ], // 发送POST请求获取令牌 TokenResponse = Web.Contents(TokenEndpoint, [ Headers = [#"Content-Type" = "application/x-www-form-urlencoded"], Content = Text.ToBinary(Uri.BuildQueryString(TokenRequestBody)) ]), // 解析响应得到访问令牌 TokenJson = Json.Document(TokenResponse), AccessToken = TokenJson[access_token] in AccessToken
2. 调用Graph API获取用户数据
再创建一个新查询,复用上面的令牌来请求用户数据:
let // 获取之前生成的访问令牌 AccessToken = GetAccessToken, // Graph API用户端点 GraphEndpoint = "https://graph.microsoft.com/v1.0/users", // 发送带令牌的GET请求 GraphResponse = Web.Contents(GraphEndpoint, [ Headers = [ #"Authorization" = "Bearer " & AccessToken, #"Content-Type" = "application/json" ] ]), // 解析JSON响应为表格 UsersJson = Json.Document(GraphResponse), UsersTable = Table.FromRecords(UsersJson[value]) in UsersTable
3. 凭证参数说明
- 你提到的Secret Key Name、Secret ID是Azure门户中存储密钥时的标识,实际API请求中不需要用到,只需要填入Secret Key的具体值即可。
- 确保你的Azure AD应用已被授予Graph API的
User.Read.All权限(应用权限类型),否则会出现权限不足的错误。
内容的提问来源于stack exchange,提问作者Dhiraj D
相关产品推荐
相关产品推荐

