在使用 API 调用时,在多个参数中使用嵌套循环

问题描述 投票:0回答:1

我想在 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
excel powerbi powerquery
1个回答
0
投票

当我遇到这样的事情时,我喜欢使用表格来查看我正在做什么,然后在正确后进行重构。

另外,我认为

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
将其全部合并在一起。

© www.soinside.com 2019 - 2024. All rights reserved.