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

BI新手求助:Python调用Power BI REST API获取数据集时参数是否缺失?

Power BI REST API 获取数据集代码问题修正

你的代码存在几个关键问题,导致无法成功获取数据集,具体修正点和完整代码如下:

  • resource_url 参数错误:adal库的resource参数需要传入Power BI服务的根资源URI https://api.powerbi.com,而不是带GET方法的API请求地址。
  • client_id 赋值错误:你把工作区ID填到了client_id字段,这里应该是你在Azure AD中注册的应用程序的客户端ID,和工作区ID完全是两个东西。
  • 缺少实际API请求逻辑:当前代码只完成了获取token的步骤,没有发起真正的请求去拉取数据集;另外,如果你要获取特定工作区的数据集,API地址应该是https://api.powerbi.com/v1.0/myorg/groups/{workspace_id}/datasets,而不是全局的/datasets(后者是获取你个人工作区的数据集)。
  • 权限注意事项:要确保你注册的Azure AD应用已经配置了Power BI API的相关权限(比如Dataset.Read.All),同时你使用的账号对目标工作区有访问权限。

修正后的完整代码:

!pip install adal
import pandas as pd
import json
import requests
import adal

# 配置正确参数
authority_url = 'https://login.windows.net/common'
# 修正resource为Power BI服务根URI
resource_url = 'https://api.powerbi.com'
# 替换为你的Azure AD应用客户端ID
client_id = 'your_azure_ad_app_client_id'
username = 'BI_email'
password = 'BI_password'
# 替换为你要访问的工作区ID
workspace_id = 'your_target_workspace_id'

# 获取认证令牌
context = adal.AuthenticationContext(authority=authority_url,
                                     validate_authority=True,
                                     api_version=None)

token = context.acquire_token_with_username_password(resource=resource_url,
                                                     client_id=client_id,
                                                     username=username,
                                                     password=password)

# 发起请求获取特定工作区的数据集
api_endpoint = f'https://api.powerbi.com/v1.0/myorg/groups/{workspace_id}/datasets'
request_headers = {
    'Authorization': f'Bearer {token["accessToken"]}'
}

response = requests.get(api_endpoint, headers=request_headers)

# 处理响应结果
if response.status_code == 200:
    datasets_data = response.json()
    print("获取到的数据集信息:")
    print(json.dumps(datasets_data, indent=2))
    # 转为DataFrame方便查看
    datasets_df = pd.DataFrame(datasets_data['value'])
    print("\n数据集列表(表格形式):")
    print(datasets_df)
else:
    print(f"请求失败,状态码: {response.status_code}")
    print("错误信息:")
    print(response.text)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.19 00:05:21