本文介绍一种基于 power query m 语言的批量 api 调用方案,通过函数封装与表驱动方式一次性加载多个 web api 数据源,支持自动刷新,避免重复手动配置。
本文介绍一种基于 power query m 语言的批量 api 调用方案,通过函数封装与表驱动方式一次性加载多个 web api 数据源,支持自动刷新,避免重复手动配置。
在 Power BI 中,面对 10 个甚至更多结构相似的 REST API 端点(如 /api/v1/sales, /api/v1/users, /api/v1/orders),逐一手动“获取数据 → 从 Web”不仅效率低下,更难以统一维护和调度刷新。幸运的是,Power Query 提供了强大的函数式能力与表遍历机制,无需 Python 或外部脚本即可原生实现批量请求。
核心思路是:将所有 API URL 存储为表格(Table),定义一个可复用的获取函数(GetUrl),再用 Table.AddColumn 对每一行 URL 应用该函数,最终展开返回的数据表结构。
以下是一个完整、可直接复用的 M 查询示例:
let
// 定义安全、可复用的 API 获取函数
GetUrl = (url) =>
let
// 使用 Web.Contents 发起请求;可根据需要添加 headers 或 timeout
Response = Web.Contents(url, [
Headers = [#"Accept" = "application/json"],
Timeout = #duration(0,0,0,30)
]),
// 解析 HTML 页面内容(适用于返回 HTML 的 API);
// 若 API 返回标准 JSON,请改用 Json.FromValue(Response)
ParsedPage = Web.Page(Response),
// 取页面中第一个数据表(常见于嵌入式 HTML 表格)
Data0 = try ParsedPage{0}[Data] otherwise #table({}, {})
in
Data0,
// 构建 URL 列表(实际使用时替换为你的 10 个链接)
Source = Table.FromRecords({
[url = "https://jsonplaceholder.typicode.com/posts/1"],
[url = "https://jsonplaceholder.typicode.com/posts/2"],
[url = "https://jsonplaceholder.typicode.com/posts/3"]
// ... 继续添加其余 URL
}),
// 对每行 URL 调用 GetUrl 函数,生成含嵌套表的新列
#"Added Custom" = Table.AddColumn(Source, "Response", each GetUrl([url])),
// 展开嵌套表(自动检测列名,勾选“使用第一行作为标题”更佳)
#"Expanded Response" = Table.ExpandTableColumn(#"Added Custom", "Response",
{"id", "title", "body", "userId"}, // 示例字段名,请按实际 API 响应调整
{"id", "title", "body", "userId"}),
// 可选:添加来源标识便于追踪
#"Added Source Url" = Table.AddColumn(#"Expanded Response", "SourceUrl", each [url], type text),
// 清理中间列
#"Removed Columns" = Table.RemoveColumns(#"Added Source Url",{"url"})
in
#"Removed Columns"
✅ 关键优势说明:
- ✅ 支持数据刷新:全部逻辑在 Power Query 内完成,发布到 Power BI Service 后可配置网关并启用计划刷新;
- ✅ 错误隔离:单个 API 失败不会中断整个查询(配合 try ... otherwise 可自定义容错行为);
- ✅ 结构统一:若各 API 返回相同 Schema(如均为 JSON 数组),展开后可直接合并为一张宽表;
- ✅ 易于扩展:URL 列表可来自 Excel、SharePoint 或数据库,实现配置化管理。
⚠️ 注意事项:
- 若 API 返回 JSON,请将 Web.Page(...) 替换为 Json.FromValue(Web.Contents(...)),并确保响应为数组(如 [{"a":1},{"a":2}]),再用 Table.FromList(...) 或 Table.FromRecords(...) 转换;
- 部分 API 需认证(Bearer Token、API Key),请在 Web.Contents 的 Headers 参数中添加对应字段;
- 避免高频并发请求——Power BI 默认串行执行,如需并行请谨慎评估服务端限流策略;
- 生产环境建议增加日志列(如 Status, Timestamp, ErrorDetail),便于监控异常。
掌握此模式后,你不仅能批量拉取 API,还可进一步封装为参数化查询、构建动态 API 目录,真正实现低代码、高可控的数据集成自动化。
大量免费API接口:立即使用
涵盖生活服务API、金融科技API、企业工商API、等相关的API接口服务。免费API接口可安全、合规地连接上下游,为数据API应用能力赋能!










