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

如何在Power BI中通过Rest API循环获取全量设备数据?

Power BI M代码实现API分页循环调用获取全量设备数据

针对你的需求,我们可以通过递归函数实现循环调用API,每次递增after_device_id参数,直到接口返回空数据,最终合并所有分页结果。以下是修改后的完整M代码:

// 基础配置:API地址和请求头
    baseApiUrl = "https://web.com/api/v1/devices/",
    requestOptions = [
        Headers = [
            #"APIToken" = "XXXX",
            #"Authorization" = "XXXX",
            #"Accept" = "application/json"
        ]
    ],

    // 递归函数:获取指定after_device_id后的设备数据,直到返回空
    GetAllDevices = (currentAfterId as number) as table =>
        let
            // 拼接带分页参数的API地址
            queryParams = [after_device_id = currentAfterId],
            fullApiUrl = baseApiUrl & "?" & Uri.BuildQueryString(queryParams),
            // 调用API并解析JSON
            apiResponse = Json.Document(Web.Contents(fullApiUrl, requestOptions)),
            devicesList = apiResponse[devices],
            // 将当前页数据转为表
            currentPageTable = if List.Count(devicesList) > 0 then
                Table.FromList(devicesList, Splitter.SplitByNothing(), null, null, ExtraValues.Error)
            else
                Table.FromRecords({}),
            // 递归调用:如果当前页有数据,继续获取下一页
            nextPageTable = if List.Count(devicesList) > 0 then
                GetAllDevices(currentAfterId + 10)
            else
                Table.FromRecords({})
        in
            // 合并当前页和下一页数据
            Table.Combine({currentPageTable, nextPageTable}),

    // 初始调用:从after_device_id=0开始
    fullDeviceData = GetAllDevices(0)
in
    fullDeviceData

关键说明:

  • 递归逻辑:函数GetAllDevices会先获取当前after_device_id对应的数据,若返回结果不为空,则自动调用自身,将参数加10继续获取下一页,直到返回空数据时终止递归。
  • 参数拼接:使用Uri.BuildQueryString自动处理URL参数,避免手动拼接时的格式错误。
  • 数据合并:每次获取的分页数据会通过Table.Combine合并为一张完整的表,最终得到全量设备数据。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.17 20:45:34