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查询逻辑
- 调用外部
Func_Query_Front_API函数请求初始URL; - 循环执行:当next链接不为null时,将其传入函数获取下一页结果;
- 为兼容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
相关产品推荐
相关产品推荐

