关于 rest-api-automation
面向 Power BI 自动化与管理工作的 REST API 技能,整理身份验证、语义模型和报表操作、嵌入及租户管理示例。
主要功能
- 01服务主体身份验证说明
- 02语义模型刷新与参数管理
- 03导入 PBIX 和导出报表
- 04嵌入令牌生成示例
- 05工作区扫描与活动审计
适用场景
- 01自动刷新语义模型并查看历史
- 02将 PBIX 导入指定工作区
- 03生成报表嵌入令牌
- 04扫描工作区资产并审计活动
安装
复制下面的命令,在终端中运行。
$
npx skills add https:/ / github.com/ josiahsiegel/ claude-plugin-marketplace --skill rest-api-automation安装后在 Claude Code 中输入/rest-api-automation确认已加载。
附带文件references/api-endpoints-complete.md
详细介绍
Power BI REST API 和自动化
概述
Power BI REST API 提供编程访问能力,支持嵌入、管理、语义模型管理和自动化。用户上下文的基 URL 为 https://api.powerbi.com/v1.0/myorg/,工作区上下文的基 URL 为 https://api.powerbi.com/v1.0/myorg/groups/{workspaceId}/。
身份验证
服务主体(推荐用于自动化)
- 在 Azure AD 中注册应用: Azure 门户 > 应用注册 > 新注册
- 创建客户端机密: 证书和机密 > 新建客户端机密
- 授予 Power BI 权限: API 权限 > 添加 > Power BI Service
- 在 Power BI 管理员中启用: 租户设置 > 允许服务主体使用 API > 添加安全组
- 将 SP 添加到工作区: 工作区 > 访问权限 > 将应用添加为成员或参与者
获取访问令牌:
curl -X POST "https://login.microsoftonline.com/{tenantId}/oauth2/v2.0/token" \
-H "Content-Type: application/x-www-form-urlencoded" \
-d "grant_type=client_credentials&client_id={clientId}&client_secret={secret}&scope=https://analysis.windows.net/powerbi/api/.default"
PowerShell:
$body = @{
grant_type = "client_credentials"
client_id = $clientId
client_secret = $clientSecret
scope = "https://analysis.windows.net/powerbi/api/.default"
}
$token = (Invoke-RestMethod -Uri "https://login.microsoftonline.com/$tenantId/oauth2/v2.0/token" `
-Method Post -Body $body).access_token
主用户(旧版,不推荐)
使用真实用户帐户,通过用户名/密码授权。需要 Pro/PPU 许可证。可能受 MFA 和条件访问问题影响。请勿用于生产环境。
API 操作组
| 组 | 基础路径 | 用途 |
|---|---|---|
| 语义模型 | /datasets | 管理语义模型、刷新和参数 |
| 报表 | /reports | 获取、克隆、导出和重新绑定报表 |
| 仪表板 | /dashboards | 获取仪表板和磁贴 |
| 组(工作区) | /groups | 工作区 CRUD 和成员关系 |
| 导入 | /imports | 上传 PBIX/XLSX 文件 |
| 管道 | /pipelines | 部署管道自动化 |
| 管理 | /admin | 租户范围的操作(扫描器、活动) |
| 嵌入令牌 | /GenerateToken | 创建嵌入令牌 |
| 网关 | /gateways | 网关和数据源管理 |
| 数据流 | /dataflows | 数据流管理 |
| 应用 | /apps | 应用管理 |
| 容量 | /capacities | 容量管理 |
| 目标 | /goals | 记分卡和目标 |
常见 API 操作
刷新语义模型
POST https://api.powerbi.com/v1.0/myorg/groups/{workspaceId}/datasets/{datasetId}/refreshes
Authorization: Bearer {token}
Content-Type: application/json
{
"notifyOption": "MailOnFailure",
"retryCount": 2,
"type": "Full",
"commitMode": "transactional",
"applyRefreshPolicy": true
}
增强型刷新(选择性表/分区):
{
"type": "Full",
"commitMode": "transactional",
"objects": [
{ "table": "Sales", "partition": "Sales_Current" },
{ "table": "Products" }
]
}
获取刷新历史记录
GET https://api.powerbi.com/v1.0/myorg/groups/{workspaceId}/datasets/{datasetId}/refreshes?$top=10
导入 PBIX 文件
POST https://api.powerbi.com/v1.0/myorg/groups/{workspaceId}/imports?datasetDisplayName=SalesReport&nameConflict=CreateOrOverwrite
Authorization: Bearer {token}
Content-Type: multipart/form-data
[PBIX file as form data]
Python:
import requests
url = f"https://api.powerbi.com/v1.0/myorg/groups/{workspace_id}/imports"
params = {"datasetDisplayName": "SalesReport", "nameConflict": "CreateOrOverwrite"}
headers = {"Authorization": f"Bearer {token}"}
with open("SalesReport.pbix", "rb") as f:
response = requests.post(url, params=params, headers=headers,
files={"file": ("SalesReport.pbix", f, "application/octet-stream")})
将报表导出为文件
# Initiate export
POST https://api.powerbi.com/v1.0/myorg/groups/{workspaceId}/reports/{reportId}/ExportTo
{
"format": "PDF",
"powerBIReportConfiguration": {
"pages": [
{ "pageName": "ReportSection1" }
],
"defaultBookmark": { "name": "BookmarkName" }
}
}
# Poll for completion
GET https://api.powerbi.com/v1.0/myorg/groups/{workspaceId}/reports/{reportId}/exports/{exportId}
# Download when status is "Succeeded"
GET https://api.powerbi.com/v1.0/myorg/groups/{workspaceId}/reports/{reportId}/exports/{exportId}/file
支持的格式: PDF、PPTX、PNG、XLSX、CSV、XML、MHTML、IMAGE、ACCESSIBLEPDF
更新语义模型参数
POST https://api.powerbi.com/v1.0/myorg/groups/{workspaceId}/datasets/{datasetId}/Default.UpdateParameters
{
"updateDetails": [
{ "name": "ServerName", "newValue": "prod-server.database.windows.net" },
{ "name": "DatabaseName", "newValue": "ProdDB" }
]
}
接管语义模型
POST https://api.powerbi.com/v1.0/myorg/groups/{workspaceId}/datasets/{datasetId}/Default.TakeOver
更新数据源凭据
PATCH https://api.powerbi.com/v1.0/myorg/gateways/{gatewayId}/datasources/{datasourceId}
{
"credentialDetails": {
"credentialType": "OAuth2",
"credentials": "{\"credentialData\":[{\"name\":\"accessToken\",\"value\":\"...\"}]}",
"encryptedConnection": "Encrypted",
"encryptionAlgorithm": "None",
"privacyLevel": "Organizational"
}
}
推送语义模型(实时)
通过 API 创建语义模型并向其推送数据,以支持实时仪表板:
# Create push dataset
POST https://api.powerbi.com/v1.0/myorg/groups/{workspaceId}/datasets
{
"name": "RealTimeMetrics",
"defaultMode": "Push",
"tables": [
{
"name": "Metrics",
"columns": [
{ "name": "Timestamp", "dataType": "DateTime" },
{ "name": "Sensor", "dataType": "String" },
{ "name": "Value", "dataType": "Double" },
{ "name": "Status", "dataType": "String" }
]
}
]
}
# Push rows
POST https://api.powerbi.com/v1.0/myorg/groups/{workspaceId}/datasets/{datasetId}/tables/Metrics/rows
{
"rows": [
{ "Timestamp": "2026-04-03T10:30:00Z", "Sensor": "Temp-01", "Value": 23.5, "Status": "Normal" },
{ "Timestamp": "2026-04-03T10:30:00Z", "Sensor": "Temp-02", "Value": 45.2, "Status": "Warning" }
]
}
# Clear table
DELETE https://api.powerbi.com/v1.0/myorg/groups/{workspaceId}/datasets/{datasetId}/tables/Metrics/rows
嵌入令牌(Power BI Embedded)
为报表生成嵌入令牌
POST https://api.powerbi.com/v1.0/myorg/groups/{workspaceId}/reports/{reportId}/GenerateToken
{
"accessLevel": "View",
"identities": [
{
"username": "[email protected]",
"roles": ["RegionManager"],
"datasets": ["{datasetId}"]
}
]
}
为多个项目生成令牌
POST https://api.powerbi.com/v1.0/myorg/GenerateToken
{
"datasets": [
{ "id": "{datasetId}" }
],
"reports": [
{ "id": "{reportId}", "allowEdit": false }
],
"targetWorkspaces": [
{ "id": "{workspaceId}" }
],
"identities": [
{
"username": "[email protected]",
"roles": ["ViewerRole"],
"datasets": ["{datasetId}"]
}
]
}
使用 JavaScript SDK 嵌入
<div id="reportContainer" style="height:600px;"></div>
<script src="https://cdn.jsdelivr.net/npm/powerbi-client/dist/powerbi.min.js"></script>
<script>
const embedConfig = {
type: 'report',
id: reportId,
embedUrl: embedUrl,
accessToken: embedToken,
tokenType: models.TokenType.Embed, // Use Embed for app-owns-data
settings: {
panes: {
filters: { visible: false },
pageNavigation: { visible: true }
},
bars: { statusBar: { visible: false } }
}
};
const container = document.getElementById('reportContainer');
const report = powerbi.embed(container, embedConfig);
// Token refresh handler
report.on('tokenExpired', async () => {
const newToken = await fetchNewToken(); // Call your backend
await report.setAccessToken(newToken);
});
// Event handlers
report.on('loaded', () => console.log('Report loaded'));
report.on('rendered', () => console.log('Report rendered'));
report.on('error', (event) => console.error(event.detail));
</script>
管理 API
扫描工作区(清单)
# Initiate scan
POST https://api.powerbi.com/v1.0/myorg/admin/workspaces/getInfo
{
"workspaces": ["{workspaceId1}", "{workspaceId2}"],
"datasetExpressions": true,
"datasetSchema": true,
"datasourceDetails": true,
"getArtifactUsers": true
}
# Get scan results
GET https://api.powerbi.com/v1.0/myorg/admin/workspaces/scanResult/{scanId}
活动事件(审计)
GET https://api.powerbi.com/v1.0/myorg/admin/activityevents?startDateTime='2026-04-01T00:00:00Z'&endDateTime='2026-04-02T00:00:00Z'&$filter=Activity eq 'ViewReport'
列出租户中的所有语义模型
GET https://api.powerbi.com/v1.0/myorg/admin/datasets?$top=100
更多资源
参考文件
references/api-endpoints-complete.md-- 完整的 API 端点参考,包含所有参数、响应架构和错误代码
评论
支持 Markdown