Power BI中用Function.InvokeAfter()实现每100次API查询后停顿1秒
实现每100行调用API后停顿1秒的Power Query方案
你当前的代码是每行调用API后都停顿1秒,12000行就要耗3个多小时在停顿上,完全没必要。要实现每100行批量处理后停顿1秒,按以下步骤操作:
步骤1:添加索引列
先给你的数据加一个从0开始的索引列,用来做分组依据:
= Table.AddIndexColumn(源, "索引", 0, 1, Int64.Type)
步骤2:按100行分组
用索引列把数据每100行分成一组,分组键用Number.IntegerDivide([索引], 100),这样0-99行是一组,100-199行是下一组,以此类推:
= Table.Group(添加索引列, {"分组键"}, {{"组内数据", each _, type table [Kunde ID=number, 索引=Int64.Type]}})
步骤3:分组处理API调用+批量停顿
给分组后的表格加自定义列,先处理组内所有行的API调用,完成后再停顿1秒(只在每组结束后停一次):
= Table.AddColumn(分组后, "API结果", (分组) => let // 遍历组内每行调用API获取数据 组内获取数据 = Table.AddColumn(分组[组内数据], "API返回", (行) => Json.Document( Web.Contents("https://data.brreg.no/enhetsregisteret/api/enheter/" & Number.ToText(行[Kunde ID]), [Headers=[Accept="application/json"]]) ), // 组内所有行处理完后,停顿1秒再返回结果 组后停顿 = Function.InvokeAfter(() => 组内获取数据, #duration(0,0,0,1)) in 组后停顿 )
步骤4:展开数据
最后把分组里的结果展开,恢复成原始的行结构:
= Table.ExpandTableColumn(添加自定义列, "API结果", {"Kunde ID", "API返回"}, {"Kunde ID", "API返回"})
注意事项
- 如果API有严格的调用频率限制,你可以根据实际情况调整分组行数(比如改成50行一组)或者停顿时间
- 要是索引列从1开始,记得把分组键改成
Number.IntegerDivide([索引]-1, 100),保证每组刚好100行
内容的提问来源于stack exchange,提问作者MegaOctane
相关产品推荐
相关产品推荐

