我想在 Excel 中的 PowerQuery 中利用循环机制。 每次调用检索的记录限制为 1000 条,因此我需要获取偏移参数以循环增量 1000。此外,我还需要使用 GroupTable 中的 GroupID 列中的值在 API 调用中实现每个组值将检索数据。
为了获得更多说明,我有特定的 API 链接,我想利用带有两个参数的循环 前任。 www.api.com/user?offset=\[loop\]&groupId=\[loop2\] 因此,对于 GroupId = {"ABC", "DEF", "GHI"} 的示例值,ABC 有 2000 行,DEF 有 2000 行,GHI 4000 行,我想检索所有 8000 条记录。
我能够合并偏移量,但不确定如何实现 groupdid 部分:
let
SourceURL = "www.api.com/user",
InitialResponse = Json.Document(Web.Contents(SourceURL)),
Total = InitialResponse[total],
BatchSize = 1000,
NumberOfCalls = Number.RoundUp(Total / BatchSize),
ListOfOffsets = List.Number(0, NumberOfCalls, BatchSize),
ListGroup = List.Transform(UserGroup, each UserGroup.id (group, _)),
FetchPage = (Offset) =>
let
Response = Json.Document(Web.Contents(SourceURL, [Query=[#"offset"=Text.From(Offset)]])),
Data = Response[results]
in
Data,
CombineData = List.Combine(AllData),
OutputTable = Table.FromList(CombineData, Splitter.SplitByNothing(), null, null, ExtraValues.Error)
in
OutputTable
当我遇到这样的事情时,我喜欢使用表格来查看我正在做什么,然后在正确后进行重构。
另外,我认为
ListGroup
步骤不正确,而且我不明白你如何知道每个列表组的总计数。
但是假设您可以获取一个包含组 ID 和总数的表...您可以将其转换为每页一行的表,然后对其进行处理。
let
SourceURL = "www.api.com/user",
BatchSize = 1000,
// replace how we get GroupsAndTotals with your own stuff
GroupsAndTotals = #table(
type table [GroupId = text, Total = Int64.Type],
{
{"ABC", 2000},
{"DEF", 2000},
{"GHI", 8000}
}
),
// Add a list of offsets per GroupID
#"Added Offset" = Table.AddColumn(
GroupsAndTotals,
"Offset",
each List.Numbers(
0,
Number.RoundUp([Total] / BatchSize),
BatchSize
),
type list
),
// Expand the list into new rows
#"Expanded Offset" = Table.ExpandListColumn(#"Added Offset", "Offset"),
#"Changed Type" = Table.TransformColumnTypes(#"Expanded Offset",{{"Offset", Int64.Type}}),
// Now we can get the query variables per call we want to make
#"Added QueryVariables" = Table.AddColumn(
#"Changed Type",
"QueryVariables",
each [
offset = Text.From([Offset]),
groupId = [GroupId]
],
type record
),
// Now we can get results per page...
#"Added Results" = Table.AddColumn(
#"Added QueryVariables",
"Results",
each Web.Contents(
SourceURL,
[
Query = [QueryVariables]
]
)
)
in
#"Added Results"
然后,您可以将每页结果处理到表格中,并使用
Table.Combine
将其全部合并在一起。