Error de flujo de datos al usar la API REST con paginación basada en cursor debido a una fuente de datos dinámica

Un usuario Pregunto ✅

anthonyloh

Hola,

Sé que hay muchas publicaciones sobre este tema y he revisado muchas de ellas, pero todavía no puedo solucionar este problema.

Fondo:
Extraigo información sobre el tráfico peatonal de la tienda de Dor, que proporciona una API REST. Puedo conectar la API y extraer datos, pero debido a que los datos están paginados, tengo que realizar varias solicitudes. La API de Dor usa la paginación basada en el cursor, por lo que estoy usando el valor en el siguiente campo para extraer la siguiente página de información hasta que sea nula. Puedo hacer que todo esto funcione en Power BI Desktop, pero si trato de actualizar mi informe en el servicio Power BI o si trato de convertir esto en un flujo de datos, aparece el error de que hay una fuente de datos dinámica.
Sé que el problema es con web.contents, así que tomé todo lo que no es parte de mi URL base y lo moví a RelativePath en las opciones de consulta, sin embargo, eso todavía no está en el servicio Power BI porque todavía piensa que hay datos dinámicos. fuente.

La siguiente URL se parece a esto:

https://api.getdor.com/v2/ubicacion-metrics?next=eyJuZXh0X3Jlc3VsdCI6eyJwdWJfaWQiOiJsb2NfbzNIS0RyVmdx…

Entonces, modifiqué un poco FnGetOnePage y usé Text.Replace para eliminar la URL basada y luego paso lo que queda como RelativePath en la siguiente solicitud.

let
  iterations = 300,
  baseUrl = "https://api.getdor.com/v2/location-metrics",
  token = [Headers=[Authorization="Basic XXXXXXXXXXXXXXXXXXXXXXXXXXX"]],
  baseOptions = "?datetime_start=2020-08-01T00%3A00%3A00&interval=hour",

  FnGetOnePage =
    (options) =>
    let
      Source = Json.Document(Web.Contents("https://api.getdor.com/v2/location-metrics", [RelativePath=options] & [Headers=[Authorization="Basic XXXXXXXXXXXXXXXXXXXXXXXXXXX"]])),
      data = try Source[data] otherwise null,
      next = try Source[meta][next] otherwise null,
      res = [Data=data, Next=Text.Replace(next, baseUrl, "")]
    in
      res,

  GeneratedList =
    List.Generate(
      ()=>[i=0, res = FnGetOnePage(baseOptions)],
      each [i]<iterations and [res][Data]<>null,
      each [i=[i]+1, res = FnGetOnePage([res][Next])],
      each [res][Data]),


    #"Converted to Table" = Table.FromList(GeneratedList, Splitter.SplitByNothing(), null, null, ExtraValues.Error)
  in
    #"Converted to Table"

Sé que el problema es con web.contents, pero probé todo lo que se me ocurrió con respecto a RelativePath y Query Options.

¡Cualquier consejo sería muy apreciado!

Antonio

Hola @anthonyloh,

Consulte los siguientes artículos sobre cómo implementar la paginación de la API REST en Power Query.

https://medium.com/@marktiedemann/how-to-do-pagination-in-power-query-430460c17c78

https://datachant.com/2016/06/27/cursor-based-pagination-power-query/

Atentamente,

Equipo de apoyo comunitario _ zhenbw

Si esta publicación ayuda, entonces por favor considere Acéptalo como la solución. para ayudar a los otros miembros a encontrarlo más rápidamente.

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *