Forum Discussion
Cursor Datos paginados de Web API
- ImkeF6 years ago
Community Champion
Sí, hay muchos métodos en este subproceso: https://community.powerbi.com/t5/Desktop/how-to-create-a-query-that-paginates/td-p/20047
Recomiendo encarecidamente este vídeo también: https://www.youtube.com/watch?v=vhr4w5G8bRA
- Anonymous6 years agoNot applicable
Hola @ImkeF
Muchas gracias por la ayuda y los recursos. Lo he leído y siento que casi estoy allí, pero no puedo unirme a los puntos. Soy muy nuevo en PowerQuery, así que parte de la sintaxis sigue siendo un misterio para mí, ¡pero estoy llegando allí!
Mis datos se devuelven como xml (no creo que marcan mucha diferencia) y la última fila de la página tiene dos campos, Attribute:href y Attribute:rel. El campo rel contiene la palabra siguiente y el campo rel una URL completa con el cursor para la página siguiente. La documentación de la API indica que cuando se alcanza la última página no habrá ningún valor en el campo rel.
Según entiendo, puedo usar la función List.Generate y efectivamente 'bucle' a través de los datos y pasar la siguiente url y tomar la siguiente página de datos. Parece que no puedo averiguar cómo hacer referencia a los campos de mi origen y usarlo para obtener el siguiente conjunto de datos. Esto es lo que tengo hasta ahora (que no funciona!)
let Source = Xml.Tables(Web.Contents("https://api.myWebService.com/v1/channel/1234/webcasts")), #"Expanded Table" = Table.ExpandTableColumn(Source, "Table", {"title", "description", "presenter", "duration", "start", "keywords", "published", "visibility", "url", "status", "active", "created", "lastUpdated", "link", "Attribute:id", "syndicationType", "Attribute:href", "Attribute:rel"}, {"Table.title", "Table.description", "Table.presenter", "Table.duration", "Table.start", "Table.keywords", "Table.published", "Table.visibility", "Table.url", "Table.status", "Table.active", "Table.created", "Table.lastUpdated", "Table.link", "Table.Attribute:id", "Table.syndicationType", "Table.Attribute:href", "Table.Attribute:rel"}), myTest = List.Generate( ()=> [Result = Source, Counter = 0], each [Result][[Attribute:href] <> null and [Counter]< 20, each [Result = Xml.Tables(Web.Contents([Attribute:href])), Counter = [Counter] + 1] ) in myTestCualquier puntero que podría proporcionar en conseguir este derecho sería muy apreciado!
- ImkeF6 years ago
Community Champion
Hola @eyeballkid
lo que List.Generates le permite hacer referencia a un elemento de la fila/elemento/instancia anterior (de su iteración).
Pero como has mencionado, aún no has utilizado esto.
En la 3a enrugmenta está definiendo un registro que estará disponible de forma predeterminada para futuras referencias. Cada campo puede simplemente ser referenciado por su nombre de campo. Por lo tanto, para hacer referencia al campo "Result", escribiría [Result], ya que este es el operador de búsqueda de registros.
Prueba algo como esto:
cada [Resultado : Xml.Tables(Web.Contents( Table.LastN( [Result], 1)[Attribute:href]))
[Resultado] hace referencia al elemento anterior Resultado archivado. Parece ser una tabla de la que necesita la última fila.
Table.LastN(..., 1) devolverá esto.
[Attribute:href] como operador de búsqueda recuperará el valor de esta columna exacta.