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

如何使用Python从PowerBI报表中获取KPI指标?

解决PowerBI API获取KPI指标的方案

你当前调用的/reports接口仅用于获取报表的基础元数据(名称、ID、数据集关联信息等),本身不会返回KPI这类业务指标数据。要获取具体的KPI,需要使用PowerBI REST API的其他接口,以下是两种可行方案:

方案一:直接从数据集查询KPI(推荐)

KPI本质是基于数据集的度量值或计算逻辑,通过Execute Queries API可以直接用DAX语句查询数据集,获取目标指标,步骤如下:

  1. 从你当前调用/reports的返回结果中,提取目标报表对应的datasetId(数据集ID)。
  2. 调用数据集查询接口,传入DAX查询语句获取KPI数据:
import requests

# 替换为你的实际值
dataset_id = "你的数据集ID"
access_token = "你的访问令牌"

url = f'https://api.powerbi.com/v1.0/myorg/datasets/{dataset_id}/executeQueries'
headers = {'Content-Type':'application/json','Authorization': f'Bearer {access_token}'}

# 自定义DAX查询,替换为你实际的度量值名称或计算逻辑
payload = {
    "queries": [
        {
            "query": "EVALUATE { [总收入], [总成本], [收入同比变化率] }"
        }
    ],
    "serializerSettings": {
        "includeNulls": True
    }
}

response = requests.post(url, json=payload, headers=headers)
kpi_result = response.json()
print(kpi_result)

方案二:从报表的KPI可视化组件导出数据

如果需要获取报表页面上已配置好的KPI可视化组件的数据,需要分三步调用API:

  1. 获取报表的页面ID
  2. 定位页面上的KPI可视化组件ID
  3. 导出该组件的底层数据

代码示例:

import requests

# 替换为你的实际值
report_id = "你的报表ID"
access_token = "你的访问令牌"
headers = {'Content-Type':'application/json','Authorization': f'Bearer {access_token}'}

# 1. 获取报表所有页面
url_pages = f'https://api.powerbi.com/v1.0/myorg/reports/{report_id}/pages'
response_pages = requests.get(url_pages, headers=headers)
pages = response_pages.json()['value']
# 假设取第一个页面,可根据实际需求调整
target_page_id = pages[0]['id']

# 2. 获取页面上的所有可视化组件,筛选KPI类型
url_visuals = f'https://api.powerbi.com/v1.0/myorg/reports/{report_id}/pages/{target_page_id}/visuals'
response_visuals = requests.get(url_visuals, headers=headers)
visuals = response_visuals.json()['value']
# 筛选类型为KPI的可视化组件
kpi_visuals = [v for v in visuals if v['type'] == 'KPI']
# 取第一个KPI组件,可根据实际需求调整
target_kpi_id = kpi_visuals[0]['id']

# 3. 导出KPI组件的底层数据
url_export = f'https://api.powerbi.com/v1.0/myorg/reports/{report_id}/pages/{target_page_id}/visuals/{target_kpi_id}/exportData'
export_payload = {"exportDataType": "Underlying"}
response_export = requests.post(url_export, json=export_payload, headers=headers)
kpi_data = response_export.json()
print(kpi_data)

注意事项

  • 确保你的访问令牌(access_token)拥有足够权限:比如使用方案一需要Dataset.Read.All或Dataset.ReadWrite.All权限;方案二需要Report.Read.All或Report.ReadWrite.All权限。
  • DAX查询语句需要匹配你数据集中实际的度量值名称,若不熟悉DAX可参考PowerBI模型中的度量值定义。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.07 16:45:41