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

PowerQuery/Power BI中API请求如何实现翻页迭代获取全量数据

错误原因
  1. Text.Combine用法错误+拼接逻辑错误:Text.Combine的第一个参数要求是文本列表,你传入单个字符串SurveyUrl语法逻辑都错。而且拼接下一页地址时不应该用第一页的完整地址SurveyUrl拼接,应该用根域名BaseUrl和接口返回的next相对路径拼接,否则会生成非法URL,导致下一页请求失败。
  2. 参数传递逻辑错误:你最外层定义的url变量是Web.Contents请求第一页返回的二进制结果,不是URL字符串,传入FnGetOnePage后Json.Document虽然能解析第一页内容,但后续调用FnGetOnePage时传入的是拼接后的URL字符串,函数逻辑不一致,且第一次请求的逻辑放到函数外导致逻辑混乱。
修复后的完整代码
let 
    BaseUrl = "https://api.aaaaaa.com",
    FirstPageUrl = Text.Combine({BaseUrl, "/api/v1/survey?step=1&limit=1000"}),
    RequestHeaders = [Headers=[TOKEN="zzzzzzzzzzzzzzz"]],

    FnGetOnePage = (pageUrl as text) as record =>
    let
        Response = Web.Contents(pageUrl, RequestHeaders),
        Source = Json.Document(Response),
        data = try Source[results] otherwise null,
        nextRelativePath = try Source[_links][next] otherwise null,
        nextFullUrl = if nextRelativePath <> null then Text.Combine({BaseUrl, nextRelativePath}) else null,
        res = [Data=data, Next=nextFullUrl]
    in
        res,
 
    GeneratedList = List.Generate(
        () => [currentRes = FnGetOnePage(FirstPageUrl)],
        each [currentRes][Data] <> null,
        each [currentRes = if [currentRes][Next] <> null then FnGetOnePage([currentRes][Next]) else [Data=null]],
        each [currentRes][Data]
    )
in
    GeneratedList
关于step遍历方案的建议
  • 这个方案实现更简单,出错概率更低,适合你的接口场景:
    • 先请求第一页数据,拿到total总条数和limit单页条数,计算总页数 = Number.RoundUp(total / limit)
    • 生成1到总页数的整数列表,遍历每个step值拼接请求URL,批量拉取所有页数据
  • 优点:逻辑直观不需要解析分页链接,调试成本低
  • 注意点:如果后续接口分页规则调整(比如把step参数改名、limit规则变化),需要同步修改代码,适配性比解析next链接的方案稍差。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.15 01:54:03