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

如何处理JSON分页?PowerBI如何获取API全量分页数据?

解决UN SDG API分页获取数据问题

能不能跳过分页?

可以尝试一次性获取所有数据,这类API通常支持通过size参数调整每页返回的数据量。你可以在请求URL后追加&size=5137(也就是响应里的totalElements值),修改后的请求示例:

curl -X GET --header 'Accept: application/json' 'https://unstats.un.org/sdgapi/v1/sdg/Indicator/Data?indicator=2.2.1&indicator=2.2.2&indicator=3.1.2&indicator=3.2.1&indicator=3.2.2&indicator=3.b.1&indicator=4.2.1&indicator=5.2.1&indicator=5.2.2&indicator=5.3.1&indicator=6.1.1&indicator=6.2.1&indicator=8.7.1&indicator=16.2.1&indicator=16.2.3&indicator=16.9.1&indicator=1.1.1&indicator=1.2.1&indicator=1.2.2&indicator=1.3.1&indicator=3.1.1&indicator=3.3.1&indicator=3.7.2&indicator=3.8.1&indicator=3.9.1&indicator=4.1.1&indicator=4.1.2&indicator=4.2.2&indicator=4.a.1&indicator=7.1.2&indicator=10.3.1&indicator=13.1.1&indicator=16.1.1&indicator=16.1.2&indicator=17.8.1&indicator=17.19.2&indicator=1.b.1&areaCode=051&areaCode=268&size=5137'

但要注意:部分API会限制单请求的最大返回数据量,如果这个请求报错,说明超过了平台限制,就只能用分页方式获取。

如何获取其余205页数据?

方法1:手动循环调用分页API

每个分页请求只需在URL后追加&pageNumber=N(N从2到206),比如第2页的请求:

curl -X GET --header 'Accept: application/json' 'https://unstats.un.org/sdgapi/v1/sdg/Indicator/Data?indicator=2.2.1&indicator=2.2.2&...&areaCode=051&areaCode=268&pageNumber=2'

把每一页返回的data数组提取出来,合并成一个完整的数据集即可。

方法2:在PowerBI中用Power Query自动处理分页(更高效)

这是最适配PowerBI数据源的方案,步骤如下:

  1. 打开PowerBI,点击「获取数据」→「Web」,输入原始API URL,加载数据。
  2. 进入Power Query编辑器,找到返回的JSON对象,展开data字段,先加载第1页的数据。
  3. 点击「主页」→「高级编辑器」,修改M代码添加循环分页逻辑:
    • 从第一页响应中提取totalPages值,生成从1到该值的页码列表。
    • 对每个页码,动态修改API URL的pageNumber参数,发起请求并提取data。
    • 把所有页的data合并成一张表。
      示例M代码大致结构:
    let
        baseUrl = "https://unstats.un.org/sdgapi/v1/sdg/Indicator/Data?indicator=2.2.1&indicator=2.2.2&indicator=3.1.2&indicator=3.2.1&indicator=3.2.2&indicator=3.b.1&indicator=4.2.1&indicator=5.2.1&indicator=5.2.2&indicator=5.3.1&indicator=6.1.1&indicator=6.2.1&indicator=8.7.1&indicator=16.2.1&indicator=16.2.3&indicator=16.9.1&indicator=1.1.1&indicator=1.2.1&indicator=1.2.2&indicator=1.3.1&indicator=3.1.1&indicator=3.3.1&indicator=3.7.2&indicator=3.8.1&indicator=3.9.1&indicator=4.1.1&indicator=4.1.2&indicator=4.2.2&indicator=4.a.1&indicator=7.1.2&indicator=10.3.1&indicator=13.1.1&indicator=16.1.1&indicator=16.1.2&indicator=17.8.1&indicator=17.19.2&indicator=1.b.1&areaCode=051&areaCode=268",
        getPage = (page as number) =>
            let
                url = baseUrl & "&pageNumber=" & Text.From(page),
                response = Json.Document(Web.Contents(url)),
                data = response[data]
            in
                data,
        firstPageResponse = Json.Document(Web.Contents(baseUrl)),
        totalPages = firstPageResponse[totalPages],
        pageList = List.Generate(()=>1, each _ <= totalPages, each _ +1),
        allData = List.Transform(pageList, getPage),
        combinedData = Table.Combine(List.Transform(allData, Table.FromRecords))
    in
        combinedData
    
  4. 关闭Power Query编辑器,加载合并后的数据集到PowerBI,即可作为仪表盘的数据源。

注意:调用API时不要过于频繁,避免触发平台速率限制导致请求被拦截。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.16 18:20:11