Cómo devolver TODOS los resultados en la llamada a la API

Un usuario Pregunto ✅

twilkpapá

Soy nuevo en la ejecución de consultas con llamadas API en Power BI, así que perdone cualquier ingenuidad o errores obvios incluidos en este código. He pegado mi código a continuación para tratar de paginar los resultados, pero solo obtengo una tabla con 500 filas de datos. Cuando ejecuto la consulta GET en ARC, los metadatos muestran resultados disponibles = 16 650… esta cifra aumentará a medida que obtengamos más clientes, por lo que quiero que esta consulta sea dinámica para atraer nuevos clientes a mi tabla de clientes en Poder BI.

Las columnas (variables) que estoy tratando de ingresar a una tabla de datos son «contactID», «companyName», «firstName», «lastName». A continuación se muestra mi intento de devolver todos los resultados. El primer ID de contacto en los resultados debe tener un valor de 200, así que intenté que ese fuera el punto de partida, pero estoy seguro de que arruiné la sintaxis para que funcionara correctamente. ¡Cualquier ayuda sería muy apreciada!

PD —> escondí el token por motivos de seguridad, pero avíseme si es necesario para probar las modificaciones del código y puedo proporcionarlo.

dejar
Paginación = List.Skip(List.Generate( () => [contactID = 200 , Counter = 0], // Valor inicial
cada [contactID] <> nulo y [contactID] <> «», // Condición bajo la cual ocurrirá la próxima ejecución
cada [ WebCall = Json.Document(Web.Contents(«https://ws-use.brightpearl.com/public-api/dude/contact-service/

contact-search?isCustomer=true&columns=contactId,companyName,firstName,lastName&offset=»&Text.From([contactID]), [Headers=[#»brightpearl-app-ref»=»dude_powerbi-1″, #»brightpearl-account-token»=»%%%%»]])),
ID de contacto = si [Counter] <=1 luego 200 más WebCall[lastKey], // determina la última clave para la próxima ejecución
Contador = [Counter] + 1, // contador interno

respuesta = WebCall[response],
resultados = respuesta[results],

#»Convertido a tabla» = Table.FromList(resultados, Splitter.SplitByNothing(), null, null, ExtraValues.Error),

#»Columnas renombradas» = Table.RenameColumns(#»Converted to Table»,{{«Column1», «Column»}}),
#»Personalizado agregado» = Table.AddColumn(#»Columnas renombradas», «ID de contacto», cada List.First([Column])),
#»Personalizado1 agregado» = Table.AddColumn(#»Personalizado agregado», «nombreEmpresa», cada List.First(List.Skip([Column],1))),
#»Personalización2 agregada» = Table.AddColumn(#»Personalización1 agregada», «firstName», cada List.First(List.Skip([Column],2))),
#»Personalizado3 agregado» = Table.AddColumn(#»Personalizado2 agregado», «apellido», cada List.First(List.Skip([Column],3))),
#»Columnas eliminadas» = Table.RemoveColumns(#»Added Custom3″,{«Column»})

],
cada [#»Removed Columns»]),1)
en
Paginación

ImkeF

hubiera esperado la [contactID] para ser parte de su WebCall; de lo contrario: ¿Cómo debe realizar la WebCall la siguiente llamada?

cada [ WebCall = Json.Document(Web.Contents(«https://ws-use.brightpearl.com/public-api/dude/contact-service/contact-search?isCustomer=true&column…]), [Headers=[#»brightpearl-app-ref»=»dude_powerbi-1″, #»brightpearl-account-token»=»%%%%»]])),

twilkpapá

En respuesta a ImkeF

No sé por qué WebCall se mostraba como un enlace y cortaba todo el texto. Consulte la publicación revisada sin el hipervínculo. ¡Gracias!

ImkeF

En respuesta a twilkpapá

La consulta se paginaría si el resultado de su WebCall contuviera un campo llamado «lastKey». ¿Realmente tiene ese campo o el número de la página siguiente se encuentra en un campo/columna diferente?

twilkpapá

En respuesta a ImkeF

Por lo que puedo ver, no hay campos lastkey. Pensé que era una especie de variable incorporada como último identificador de registro.

Aquí hay una instantánea de la última parte de los resultados obtenidos de ARC (-499 es la última matriz de resultados que contiene los valores de las variables deseadas):

-499: [Array[4]

  0:  768
   1:  «1986«
  2:  «Krystin«
  3:  «Hand«

«metadatos«:

-0: {
«másPáginasDisponible«: cierto
«resultadosDisponible«: 16650
«resultados devueltos«: 500
«primer resultado«: 1
«Ultimo resultado«: 500
«columnas«:

 

1:  {
«name«: «contactId«
«sortable«: true
«filterable«: true
«reportDataType«: «IDSET«
«required«: false
}

 
 

2:  {
«name«: «companyName«
«sortable«: true
«filterable«: true
«reportDataType«: «SEARCH_STRING«
«required«: false
}

 
 

3:  {
«name«: «firstName«
«sortable«: true
«filterable«: true
«reportDataType«: «SEARCH_STRING«
«required«: false
}

 
 

4:  {
«name«: «lastName«
«sortable«: true
«filterable«: true
«reportDataType«: «SEARCH_STRING«
«required«: false
}

«clasificación«:

 

{
«filterable«:

{
«name«: «contactId«
«sortable«: true
«filterable«: true
«reportDataType«: «IDSET«
«required«: false
}

 
«direction«: «ASC«
}
 

twilkpapá

En respuesta a twilkpapá

¿Alguna sugerencia sobre cómo crear o identificar esa variable para identificar el «número para la página siguiente» que mencionó?

¿Fui útil en la última publicación para solucionar el problema de mi código?

ImkeF

En respuesta a twilkpapá

Si, gracias.

Pensé que sería ContactID, pero esto no funcionaría, ya que saltaría el rango de 500 a 768 en el ejemplo que ha dado.

¿Hay otro campo (como «Resultado») en el conjunto de datos que sea 500 para ese último registro donde el ID de contacto es 768? Entonces tendrías que tomar esto.

twilkpapá

Soy nuevo en la ejecución de consultas con llamadas API en Power BI, así que perdone cualquier ingenuidad o errores obvios incluidos en este código. He pegado mi código a continuación para tratar de paginar los resultados, pero solo obtengo una tabla con 500 filas de datos. Cuando ejecuto la consulta GET en ARC, los metadatos muestran resultados disponibles = 16 650… esta cifra aumentará a medida que obtengamos más clientes, por lo que quiero que esta consulta sea dinámica para atraer nuevos clientes a mi tabla de clientes en Poder BI.

Las columnas (variables) que estoy tratando de ingresar a una tabla de datos son «contactID», «companyName», «firstName», «lastName». A continuación se muestra mi intento de devolver todos los resultados. El primer ID de contacto en los resultados debe tener un valor de 200, así que intenté que ese fuera el punto de partida, pero estoy seguro de que arruiné la sintaxis para que funcionara correctamente. ¡Cualquier ayuda sería muy apreciada!

PD —> escondí el token por motivos de seguridad, pero avíseme si es necesario para probar las modificaciones del código y puedo proporcionarlo.

dejar
Paginación = List.Skip(List.Generate( () => [contactID = 200 , Counter = 0], // Valor inicial
cada [contactID] <> nulo y [contactID] <> «», // Condición bajo la cual ocurrirá la próxima ejecución
cada [ WebCall = Json.Document(Web.Contents(«https://ws-use.brightpearl.com/public-api/dude/contact-service/contact-search?isCustomer=true&column…]), [Headers=[#»brightpearl-app-ref»=»dude_powerbi-1″, #»brightpearl-account-token»=»%%%%»]])),
ID de contacto = si [Counter] <=1 luego 200 más WebCall[lastKey], // determina la última clave para la próxima ejecución
Contador = [Counter] + 1, // contador interno

respuesta = WebCall[response],
resultados = respuesta[results],

#»Convertido a tabla» = Table.FromList(resultados, Splitter.SplitByNothing(), null, null, ExtraValues.Error),

#»Columnas renombradas» = Table.RenameColumns(#»Converted to Table»,{{«Column1», «Column»}}),
#»Personalizado agregado» = Table.AddColumn(#»Columnas renombradas», «ID de contacto», cada List.First([Column])),
#»Personalizado1 agregado» = Table.AddColumn(#»Personalizado agregado», «nombreEmpresa», cada List.First(List.Skip([Column],1))),
#»Personalización2 agregada» = Table.AddColumn(#»Personalización1 agregada», «firstName», cada List.First(List.Skip([Column],2))),
#»Personalizado3 agregado» = Table.AddColumn(#»Personalizado2 agregado», «apellido», cada List.First(List.Skip([Column],3))),
#»Columnas eliminadas» = Table.RemoveColumns(#»Added Custom3″,{«Column»})

],
cada [#»Removed Columns»]),1)
en
Paginación

Deja un comentario

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