Optimización de Power Query para consultas masivas a API REST
Interesante caso de optimización en Power Query. Randolfo, desde Guatemala, necesitaba consultar el estado de más de 100 envíos de paquetería a través de la API REST de Cargo Expreso, y su función tardaba demasiado.
La función original usaba un patrón común pero ineficiente para este volumen: en cada iteración, convertía el JSON de respuesta con Record.ToTable + Table.Transpose, promovía encabezados y aplicaba tipos a todas las columnas. Con 100+ guías, el rendimiento se resentía notablemente.
La función original:
``
let
fxCargoExpresoEstado = (guia as text) =>
let
Td = Number.ToText(Number.From(DateTime.LocalNow()));
Url = Json.Document(Web.Contents(
"https://tracking.caexlogistics.com/TrackingMov/api/Tracking/Get?guia=" & guia & "&_=" & Td));
tracking = Url[tracking];
datosGuia = tracking[datosGuia];
#"Convertido en tabla" = Record.ToTable(datosGuia);
#"Tabla transpuesta" = Table.Transpose(#"Convertido en tabla");
#"Encabezados promovidos" = Table.PromoteHeaders(#"Tabla transpuesta");
#"Tipo cambiado" = Table.TransformColumnTypes(#"Encabezados promovidos"; ...);
#"Columnas quitadas" = Table.RemoveColumns(#"Tipo cambiado"; ...)
in
#"Columnas quitadas"
in
fxCargoExpresoEstado
`
Nacho propuso varias mejoras clave:
- Sacar el Table.TransformColumnTypes fuera de la función — aplicar tipos solo una vez al resultado final, no en cada iteración
- Evitar el combo Record.ToTable + Table.Transpose dentro del bucle — usar Table.FromRecords fuera de la función para consolidar
- Seleccionar solo los campos necesarios directamente desde el Record, en vez de traer todo y quitar columnas después
Gerson reescribió la consulta completa aplicando estas ideas y añadiendo mejoras adicionales:
- Web.Contents con parámetro Query separado (mejor para el motor de privacidad de PQ)
- try ... otherwise null en cada paso para evitar que un error en una guía rompa toda la consulta
- Table.Combine en vez de Table.ExpandTableColumn para consolidar los resultados
- Tipo de retorno explícito (as table`) en la función
El resultado: una consulta más rápida, robusta y mantenible. De 38 a 24 segundos en las pruebas, que si actualizas varias veces al día, se nota.
El ZIP incluye ambos archivos: el original de Randolfo y la versión optimizada de Gerson para comparar.
Más contenido de Excel en InflueXcel
- Reto de Excel: El cumpleaños de Bilbo 🎂 | CONTAR.SI y SUMAR.SI desde cero (Nivel 1) TutorialEn La Comarca se celebra el cumpleaños número 111 de Bilbo Bolsón: cerveza, pasteles, fuegos artificiales… y algún curioso escondido tras el
- ¡Excel PowerQuery Hack! Conexiones con rutas relativas en 10 minutos! Tutorial¿Harto de ajustar las conexiones en PowerQuery cada vez que compartes tu archivo de Excel? 🙄 Convierte las conexiones de PowerQuery con ruta
- Mejora un 90% el rendimiento de Power Query con SQLite TutorialPower Query es una herramienta potente para consolidar, combinar y calcular datos, pero cuando trabajamos con millones de registros y calcul
- Nueva Función IMPORTTEXT TutorialNueva función IMPORTTEXT en Excel!! https://techcommunity.microsoft.com/blog/microsoft365insiderblog/bring-data-into-excel-with-the-new-impo
- ¿Columnas con nombres distintos en Power Query? Tutorial¿Columnas con nombres distintos en Power Query? Aquí tienes la solución definitiva para normalizar tus datos y evitar errores al combinar fi
- BUSCARX con valor devuelto dinámico: elige la columna con un botón o un segmentador CasoUna integrante de la comunidad planteó un reto muy habitual al trabajar con tablas de varias columnas: tiene una lista de municipios con cua
- Saldo acumulado por mes: tres enfoques (REDUCE+BYROW, PIVOTARPOR+acumulado, MMULT) CasoJuan plantea una pregunta que parece sencilla y se acaba convirtiendo en tres clases magistrales sobre cómo recorrer una matriz mes a mes. T
- Mapa de España con burbujas: ubicar variables por provincia usando coordenadas X/Y CasoEsta semana surgió una duda muy visual en el grupo: cómo mostrar dos variables por provincia en un mapa de España — una pintada en intensida
- Regularización trimestral con AGRUPARPOR y ARCHIVOMAKEARRAY: del caos a una fórmula CasoCaso fresquito de la comunidad. Juan plantea un problema contable: tiene una tabla de movimientos (Nombre, Cuenta, Importe, Fecha) y necesit
- Grado de avance por proyecto: despivotar y volver a pivotar por fecha CasoNuevo caso de la comunidad con mucho jugo para los que trabajan con reporting de proyectos. Juan plantea un problema habitual en oficinas té