Skip to main content
cancel
Showing results for 
Search instead for 
Did you mean: 

The Power BI Data Visualization World Championships is back! Get ahead of the game and start preparing now! Learn more

Reply
Syndicate_Admin
Administrator
Administrator

Función recursiva de Power Query que devuelve la API de error

¡Hola!

Estoy tratando de recuperar datos de una API, y estoy teniendo dificultades con lo que parece ser una tarea simple:

La API devuelve la información en el siguiente formato:

ErisedAlurem_1-1661783997843.png

Un registro con dos informaciones: hasMore, que define si aún quedan elementos por recuperar y items, una lista con lo que quería recuperar. Como necesito todos los datos (hasta hasMore = FALSE), mi objetivo es obtener una lista con todos los elementos (no la lista limitada al máximo definido por la API).

(La lista me da 100 registros)

ErisedAlurem_4-1661784867404.png

Con este objetivo en mente, he intentado lo siguiente:

Ticket_Query = (optional _after)=> 
let
  //definir quantos tickets pular
    _skip = ",startingAfter=" & _after,

  //obter fonte de dados
   Source = Json.Document(Web.Contents(urlgerada & _skip,
    [Headers=[token="XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"]])),
    StepInter = Text.From(Record.Field(Source,"hasMore")),
    teste2 = Record.Field(Source,"items"),
    teste3 = Record.Field(Source,"items"){99}[id],
    Nextstep = 
      if Text.From(Record.Field(Source,"hasMore")) = "true" and List.Count(teste2)<=198 then 
      teste2 & Record.Field(@Ticket_Query(Record.Field(Source,"items"){99}[id]),"items")
     else teste2
in
    Nextstep
    in  
   Ticket_Query("")

Creé una función (Ticket_query) con un parámetro opcional, que recupera el id del último registro en el consoult anterior y lo usa como el parámetro de la API "startingAfter".

Recupero esta información con la siguiente consulta:

teste3 = Record.Field(Source,"items"){99}[id], que parece funcionar correctamente:

ErisedAlurem_5-1661785377617.png

(lo cual es correcto)

Luego creo la consulta, con la URL base y el _parameter de salto.

Luego creé la variable teste2, que recupera solo la lista de elementos (ignorando "hasMore").

Finalmente utilizo la siguiente lógica: si la API devuelve "hasMore" = TRUE, la consulta debería devolverme teste2 anexada a una lista similar a teste2, pero ahora usando Ticket_query con el parámetro recibido del primer consoult (la recursividad está usando el id del último elemento - equivalente a teste3, como se mostró anteriormente.

Record.Field(Source,"items"){99}[id]

).

Cuando intento obtener solo la primera página ( List.Count(teste2)<=99 ) la consulta funciona, pero cuando intento recuperar más datos ( List.Count(teste2)<=198 o superior) la consulta se bloquea. Imagino que estoy haciendo algo mal en la recursión, pero no puedo encontrar qué.

ErisedAlurem_3-1661784827889.png

Cualquier entrada sería apreciada.

Desafortunadamente, la API es privada, por lo que no puedo mostrar todo el código (ni dar acceso al token)

1 REPLY 1
Syndicate_Admin
Administrator
Administrator

@ErisedAlurem ,

Por favor, revise el siguiente blog, espero que pueda ayudarle.

Funciones recursivas en Power BI / Power Query

Saludos

Helpful resources

Announcements
Power BI DataViz World Championships

Power BI Dataviz World Championships

The Power BI Data Visualization World Championships is back! Get ahead of the game and start preparing now!

December 2025 Power BI Update Carousel

Power BI Monthly Update - December 2025

Check out the December 2025 Power BI Holiday Recap!

FabCon Atlanta 2026 carousel

FabCon Atlanta 2026

Join us at FabCon Atlanta, March 16-20, for the ultimate Fabric, Power BI, AI and SQL community-led event. Save $200 with code FABCOMM.