Power Query List.Generate迭代重复数据问题:如何修正仅返回单页结果?
解决Power Query中List.Generate重复第一页数据的问题
你的代码出现重复第一页数据的原因是List.Generate的next生成器逻辑错误:在记录中定义page = [page] + 1后,后续的fnGetFindings([page], outcome_id)调用依然使用的是迭代前的旧页码值,而非更新后的新页码。导致第二次迭代时仍调用第一页数据,直到第三次迭代才会用页码2调用函数(此时返回空列表,循环终止),最终生成包含两次第一页数据的结果。
修改方案(推荐使用方案一)
方案一:用Let表达式先计算新页码
通过let表达式提前计算出更新后的页码,再调用函数,确保参数使用的是最新页码:
outcome_list = List.Generate ( () => [page = 1, result = fnGetFindings(1, outcome_id)], each not List.IsEmpty([result]), each let newPage = [page] + 1 in [page = newPage, result = fnGetFindings(newPage, outcome_id)], each [result] )
方案二:调整记录字段顺序(可读性较差)
如果不想用let表达式,可以调整记录内的字段顺序,先基于旧页码计算新页码对应的结果,再更新page字段:
outcome_list = List.Generate ( () => [page = 1, result = fnGetFindings(1, outcome_id)], each not List.IsEmpty([result]), each [result = fnGetFindings([page] + 1, outcome_id), page = [page] + 1], each [result] )
修改后,List.Generate会在第一次迭代返回第一页数据,第二次迭代调用页码2的函数(返回空列表),循环直接终止,最终结果仅包含一次第一页数据。
内容的提问来源于stack exchange,提问作者Renier Wessels
相关产品推荐
相关产品推荐

