如何在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
相关产品推荐
相关产品推荐

