Azure DevOps Builds API分页:Power BI中获取continuationToken的方法
在Power BI中通过Azure DevOps Build API分页获取全量构建数据
核心逻辑
Azure DevOps Build API默认单次返回1000条数据,当结果总量超过1000条时,API响应头会携带x-ms-continuationtoken字段,这就是用于获取下一页数据的续传令牌。我们需要在Power BI中循环发起请求,每次带上上一轮拿到的令牌,直到响应头中不再返回该令牌,即表示已获取全量数据。
Power BI查询编辑器实现步骤
1. 配置初始API请求
创建初始Web请求,替换{organization}、{project}和{你的个人访问令牌PAT}为实际值:
let initialUrl = "https://dev.azure.com/{organization}/{project}/_apis/build/builds?api-version=7.1-preview.7", initialResponse = Web.Contents(initialUrl, [Headers=[Authorization="Basic " & Binary.ToText(Base64.Encode(Text.ToBinary(":" & "{你的个人访问令牌PAT}")), BinaryEncoding.Base64)]]), initialJson = Json.Document(initialResponse), initialData = initialJson[value], initialHeaders = ResponseHeaders(initialResponse), continuationToken = try initialHeaders{[Name="x-ms-continuationtoken"]}[Value] otherwise null in [Data=initialData, NextToken=continuationToken]
提示:个人访问令牌(PAT)需要拥有Build模块的读取权限,否则会返回403权限错误。
2. 创建分页请求函数
新建自定义函数,用于处理后续分页请求:
(token as text) as record => let url = "https://dev.azure.com/{organization}/{project}/_apis/build/builds?api-version=7.1-preview.7&continuationToken=" & token, response = Web.Contents(url, [Headers=[Authorization="Basic " & Binary.ToText(Base64.Encode(Text.ToBinary(":" & "{你的个人访问令牌PAT}")), BinaryEncoding.Base64)]]), json = Json.Document(response), data = json[value], headers = ResponseHeaders(response), nextToken = try headers{[Name="x-ms-continuationtoken"]}[Value] otherwise null in [Data=data, NextToken=nextToken]
3. 循环调用合并全量数据
使用List.Generate循环调用函数,收集所有分页数据并合并:
let firstCall = 你的初始查询名称, allPages = List.Generate( () => firstCall, each [NextToken] <> null, each 你的自定义函数名称([NextToken]), each [Data] ), combinedData = List.Combine(allPages), finalTable = Table.FromList(combinedData, Splitter.SplitByNothing(), null, null, ExtraValues.Error) in finalTable
替换
你的初始查询名称和你的自定义函数名称为你实际创建的查询与函数名称。
关键注意事项
- 必须通过
ResponseHeaders()函数提取响应头中的x-ms-continuationtoken,这是分页的核心标识。 - 循环终止条件为
NextToken等于null,此时说明已获取全部数据。 - 如果遇到请求频率限制,可在Web.Contents的选项中添加延迟参数,避免触发Azure DevOps的限流机制。
内容的提问来源于stack exchange,提问作者M_aji
相关产品推荐
相关产品推荐

