BobKoenen
Hola,
He creado una consulta en blanco, ver a continuación, para obtener datos de una API de software directamente en power bi. Recientemente, la compañía de software impuso una restricción a la cantidad de datos que se pueden solicitar en una llamada. Tengo 3 tablas que tienen más de 250.000 registros y no puedo recurrir a ellas ahora porque recibo un error de servicio. La compañía de software me dice que tendré que trabajar con su funcionalidad «saltar y tomar» que le permite obtener los datos en lotes. Puedo copiar manualmente la consulta a continuación 20 veces y cambiar la toma de omisión en cada consulta y agregarlas en power bi. Ver ejemplo.
consulta 1. omita 0 tome 10000
Consulta 2. Omitir 10000 tomar 10000
Consulta 3 Salta 20000 toma 10000
Pero esto es mucho trabajo y me preguntaba si hay una mejor manera de hacerlo en la que pueda elegir la cantidad de captura y la cantidad de omisión de forma dinámica sin copiar la consulta 20x.
esta es la consulta en blanco para la solicitud:
dejar
Fuente = Xml.Tables (Web.Contents («» & URL & «»
,[Content=Text.ToBinary(«<soapenv:Envelope xmlns:soapenv=»&Character.FromNumber(34)&»http://schemas.xmlsoap.org/soap/envelope/»&Character.FromNumber(34)&» xmlns:urn=»&Character.FromNumber(34)&»urn:Afas.Profit.Services»&Character.FromNumber(34)&»>
<soapenv:Header/>
<soapenv:Body>
<urn:GetData>
<urn:token>
<![CDATA[
«& Token &»
]]>
«), Encabezados =[#»Content-Type»=»text/xml;charset=UTF-8»]]))
en
Fuente
Espero que puedas ayudarme
mahoneypat
Puede comenzar su consulta con = List.Numbers (0, 25, 10000), convertir eso en una Tabla y luego concatenarlo en su llamada web como el valor de Omitir. Luego tendrá una tabla de 25 tablas y podrá expandirla para combinar todos los datos.
Si esto le funciona, márquelo como la solución. Las felicitaciones también son apreciadas. Por favor avíseme si no es así.
Saludos,
Palmadita
artemus
En respuesta a mahoneypat
No utilice List.Numbers para esto, ya que llamará a la API más de lo necesario. Desea detenerse una vez que llegue al final de la lista de elementos.
En su lugar, use List.Generate o una función recursiva real. Tal como:
let
nextPage = (start) =>
let
values = Xml.Tables(Web.Contents("https://example.com/?start=" * Text.From(start) & "&end=" & Text.From(start + 25)),
in
if Table.RowCount(values) < 25 then
values
else
values & @nextPage(start + 25)
mahoneypat
En respuesta a artemus
List.Numbers es un buen enfoque para esto. Por lo general, primero hago una llamada para obtener el recuento total, lo divido por las filas por llamada y uso ese número como el número de elementos en List.Numbers. De esa manera, realiza el número correcto de llamadas.
Saludos,
Palmadita
lbendlin
Puede escribir una función recursiva que incremente el recuento de saltos después de cada iteración. Solo asegúrese de saber cuándo detenerse (probablemente cuando el número de filas devueltas sea menor que el número de filas solicitadas («tomar»).