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

如何在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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.30 13:18:07