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

如何从Power BI数据集读取数据至Python并导出为Pandas DataFrame

解决思路:从Power BI数据集导出到Pandas DataFrame

方案1:使用Power BI REST API + Pandas

通过Power BI官方REST API直接查询数据集,无需依赖adodbapi,步骤如下:

  • 先在Azure AD注册应用,分配Dataset.Read.All权限,获取租户ID、客户端ID和密钥
  • 调用接口获取访问令牌,再用DAX查询目标数据集
  • 将返回的JSON结果解析为Pandas DataFrame

示例代码:

import requests
import pandas as pd

# 替换为你的实际参数
tenant_id = "你的租户ID"
client_id = "Azure AD应用ID"
client_secret = "应用密钥"
dataset_id = "目标数据集ID"
group_id = "工作区ID(数据集在工作区时必填)"

# 获取访问令牌
token_url = f"https://login.microsoftonline.com/{tenant_id}/oauth2/v2.0/token"
token_payload = {
    "grant_type": "client_credentials",
    "client_id": client_id,
    "client_secret": client_secret,
    "scope": "https://analysis.windows.net/powerbi/api/.default"
}
token_res = requests.post(token_url, data=token_payload)
access_token = token_res.json()["access_token"]

# 构造DAX查询(替换为你的表名)
dax_query = """
EVALUATE
    '目标数据表'
"""

# 调用API查询数据
api_url = f"https://api.powerbi.com/v1.0/myorg/groups/{group_id}/datasets/{dataset_id}/executeQueries"
headers = {"Authorization": f"Bearer {access_token}", "Content-Type": "application/json"}
query_payload = {
    "queries": [{"query": dax_query}],
    "serializerSettings": {"includeNulls": True}
}
res = requests.post(api_url, json=query_payload, headers=headers)
result = res.json()

# 转换为DataFrame
table_rows = result["results"][0]["tables"][0]["rows"]
df = pd.DataFrame(table_rows)

方案2:Windows环境下用pywin32操控Power BI Desktop

如果你的环境是Windows,可通过COM接口直接操作Power BI Desktop导出数据:

  • 确保安装Power BI Desktop和pywin32库
  • 打开目标pbix文件,通过COM对象读取数据集表数据

示例代码:

import win32com.client
import pandas as pd

# 启动Power BI Desktop
pbi_app = win32com.client.Dispatch("PowerBI.Application")
# 打开本地pbix文件
pbix_path = r"C:\你的文件路径\目标文件.pbix"
report = pbi_app.Open(pbix_path)

# 获取目标表数据(替换为你的表名)
model = report.Model
target_table = model.Tables("目标数据表")
columns = [col.Name for col in target_table.Columns]

# 转换为DataFrame
data_rows = []
for row in target_table.Rows:
    data_rows.append([row[col] for col in columns])
df = pd.DataFrame(data_rows, columns=columns)

# 关闭Power BI Desktop
pbi_app.Quit()

方案3:直接从Dataflows导出文件后读取

如果是低频取数需求,可直接在Power BI服务端操作:

  • 进入Dataflows页面,找到目标实体(表)
  • 点击「导出」选择CSV或Parquet格式下载
  • 用Pandas直接读取本地文件:
import pandas as pd

# 读取CSV
df = pd.read_csv("下载的文件路径.csv")
# 读取Parquet(需安装pyarrow或fastparquet)
# df = pd.read_parquet("下载的文件路径.parquet")

方案4:借助Microsoft Fabric Lakehouse(需对应订阅)

如果有Power BI Premium或Microsoft Fabric订阅,可将Dataflows数据同步到Lakehouse的Delta表,再通过Fabric API或直接连接Lakehouse读取数据,适合长期高频取数场景。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.25 01:36:59