如何使用Python从PowerBI报表中获取KPI指标?
解决PowerBI API获取KPI指标的方案
你当前调用的/reports接口仅用于获取报表的基础元数据(名称、ID、数据集关联信息等),本身不会返回KPI这类业务指标数据。要获取具体的KPI,需要使用PowerBI REST API的其他接口,以下是两种可行方案:
方案一:直接从数据集查询KPI(推荐)
KPI本质是基于数据集的度量值或计算逻辑,通过Execute Queries API可以直接用DAX语句查询数据集,获取目标指标,步骤如下:
- 从你当前调用
/reports的返回结果中,提取目标报表对应的datasetId(数据集ID)。 - 调用数据集查询接口,传入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:
- 获取报表的页面ID
- 定位页面上的KPI可视化组件ID
- 导出该组件的底层数据
代码示例:
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
相关产品推荐
相关产品推荐

