如何在Clockify API查询函数的body中实现分页逻辑
优化Clockify API分页获取时间条目的Power Query方案
你可以通过封装通用请求函数+批量遍历页码的方式避免重复编写4个查询,具体实现如下:
步骤1:定义获取单页时间条目的函数
把请求逻辑封装成接收页码参数的函数,动态生成请求体中的page值,避免硬编码:
// 定义获取单页数据的函数 GetTimeEntriesPage = (pageNumber as number) => let // 动态生成请求体,替换page参数 body = Json.FromValue([ dateRangeStart = "2023-01-01T00:00:00.000", dateRangeEnd = "2023-05-31T23:59:59.000", detailedFilter = [ page = Text.From(pageNumber), pageSize = "1000" ] ]), // 发送API请求 Source = Json.Document(Web.Contents( "https://reports.api.clockify.me/v1/workspaces/MYWORKSPACEID/reports/detailed", [ Headers = [ #"Content-Type"="application/json", #"X-Api-Key"="MYAPI" ], Content = body ] )), // 提取当前页的时间条目 timeentries = Source[timeentries] in timeentries;
步骤2:批量遍历所有页码并合并结果
已知共4页,生成页码列表后批量调用函数,最后合并所有页面的结果:
let // 生成需要遍历的页码列表(1到4页) PageNumbers = {1..4}, // 遍历每个页码,调用函数获取对应页面的数据 AllPagesData = List.Transform(PageNumbers, each GetTimeEntriesPage(_)), // 将所有页面的条目合并成一个列表 CombinedTimeEntries = List.Combine(AllPagesData) in CombinedTimeEntries;
额外优化:自动识别总页数(可选)
如果后续页数可能变化,可以先调用一次API获取总页数,再动态生成页码列表:
let // 先调用函数获取第一页数据 FirstPageResponse = GetTimeEntriesPage(1), // 从第一页响应中提取总页数(需确认API返回的响应结构包含totalPages字段) TotalPages = FirstPageResponse[totalPages], // 生成对应页码列表 PageNumbers = {1..TotalPages}, // 批量获取并合并数据 AllPagesData = List.Transform(PageNumbers, each GetTimeEntriesPage(_)), CombinedTimeEntries = List.Combine(AllPagesData) in CombinedTimeEntries;
注意:记得替换代码中的MYWORKSPACEID和MYAPI为你的实际值。
内容的提问来源于stack exchange,提问作者mapooo
相关产品推荐
相关产品推荐

