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

Power BI高级编辑器API分页查询返回大量重复结果求助

Front Email API多页查询Power BI迭代逻辑问题排查

问题背景

为业务场景使用Front Email API的events端点,在Power BI中编写迭代函数尝试获取多页查询结果,该问题已困扰数周。

API(events端点)说明

  • 根据查询参数(如before/after/between时间范围、event types等)返回记录列表;
  • 结果超过100条时会生成唯一next分页链接,无page=n参数,需从上次响应中获取该链接;
  • 初始请求base_url(https://api2.frontapp.com)与next链接的base_url(如https://companynamehere-inc.api.frontapp.com)不同,已在函数中考虑该差异。

Power BI查询逻辑

  1. 调用外部Func_Query_Front_API函数请求初始URL;
  2. 循环执行:当next链接不为null时,将其传入函数获取下一页结果;
  3. 为兼容Power BI Desktop和Online Service,已将传入链接拆解为base、相对路径和参数/body。

遇到的问题

  • 预览窗口有时持续加载无结果,且未实际调用API(通过Postman和响应头rate limit remaining确认);
  • 成功返回结果时,记录量远超预期且包含大量重复数据,疑似陷入半无限循环,重复调用同一next链接而非更新后的链接。

单独调用查询函数可正常工作,但整体迭代逻辑未达预期。因涉及公司私有信息无法提供bearer token,请求排查代码语法问题。

Python参考代码(逻辑与Power BI实现相近,可正常运行)

import requests
from time import sleep

########################################
# GLOBAL VARIABLES
########################################
_event_types_filter = "assign&q[types]=archive&q[types]=comment&q[types]=inbound&q[types]=outbound&q[types]=forward&q[types]=tag&q[types]=out_reply"
_after = 1667506000
_page_limit = 100
_bearer_token = "Bearer XXXXXXXXXXXXXXXXXXXXXXXXXX"
_init_base_url = "https://api2.frontapp.com"
_relative_path = "events"
_init_body = "limit=" + str(_page_limit) + "&q[after]=" + str(_after) + "&q[types]=" + _event_types_filter
_headers = {'authorization': _bearer_token}
_init_query_url = _init_base_url + "/" + _relative_path + "?" + _init_body

########################################
# FUNCTION - Query the API
########################################
def Func_Query_Front_API(input_url):
    #print(input_url)
    # Deconstruct the url into its separate parts
    splitted_input_url = input_url.split("?")
    input_url_base = splitted_input_url[0].replace("/events", "")
    input_url_body_params = splitted_input_url[1]
    # Query the API
    response = requests.request("GET", 
        input_url_base + "/" + _relative_path + "?" + input_url_body_params, 
        headers=_headers)
    # Get the "next" link from the response
    next = response.json()["_pagination"]["next"]
    # Return the response and the "next" link    
    return response, next

########################################
# MAIN PROGRAM START
########################################
# List to add the response data's to
Source = []
# Make the initial request and add the results to the list
init_response, next = Func_Query_Front_API(_init_query_url)
Source.append(init_response)
# While the "next" link(s) are not None, query the current
# "next" link for the next page(s) of the query
while next != None:
    response, next = Func_Query_Front_API(next)
    Source.append(response)
    sleep(1)
print(Source)
print("Done!")

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.14 08:01:02