Grupo DAABON · 53 sociedades
Seis cosas que arreglé y cómo lo comprobé
No hay capturas aquí: estos informes llevan clientes, nómina y valores en aduana. Lo que sí hay son los números de antes y de después, que es lo que se puede comprobar en una llamada.
Optimizar la app más grande sin cambiar un solo número
Once dominios de negocio conviviendo en una sola app —P&G, costos, ventas, cartera, dos zonas francas, logística, ausentismo, PQRS y CRM—. 6.210 líneas de script en 39 pestañas, 37 hojas, 708 objetos. No se diseñó: se fue apilando.
414 → 279 s
tiempo de recarga
11,1 → 4,5 M
filas del modelo (−60 %)
60 → 37
consultas al ERP por recarga
- Documenté la app entera antes de tocarla, incluidas sus 309 medidas. Sin eso, «optimizar» es adivinar.
- Tomé una línea base de todas las medidas contra una copia sin tocar, y comparé después de cada paso. El resultado verificado: 309 de 334 medidas idénticas, 0 errores. Las 25 restantes se revisaron una a una.
- Siete aperturas de un Excel compartido por recarga pasaron a cero, sustituidas por los QVD de una extractora. Antes de cambiarlo medí la trampa: los dos scripts leen las fechas con un
SET DateFormat distinto y un QVD las guarda ya interpretadas; si una columna llegara como texto ambiguo, las llaves dejarían de casar sin dar ningún error. Comprobado hoja por hoja: las cinco idénticas.
De 15 hallazgos, seis arreglados. El último fue el que más dinero movió: al presupuesto de costos le faltaban 240.405 millones de pesos por dos errores encadenados —un Left Join que multiplicaba filas y un LOAD DISTINCT que colapsaba líneas—. Se cuadró contra los QVD de origen leídos directamente.
Lo que hay que decir antes de que lo preguntenLas tres claves sintéticas que quedan no son descuido: están sosteniendo defectos de datos de otros sistemas. Resolverlas cambia cifras que alguien mira, así que están documentadas y esperando decisión, no arregladas a escondidas.
Un informe que nunca había logrado recargar
Una app de Desarrollo Humano publicada, que gerencia consultaba, con datos congelados de tres semanas atrás. La recarga manual moría a los 261 segundos y nadie sabía por qué.
325 s
recarga completa, después
- Dos pestañas pedían las 39 columnas de una vista del ERP. Una de ellas cuelga la consulta indefinidamente. Pedir solo las 8 columnas que el
LOAD usaba fue todo el arreglo. - Detrás aparecieron seis errores más, todos medidos: una lista de festivos que no surtía efecto (4.261 → 3.938 personas fuera de meta), dos rangos sin tramo que dejaban 635 personas en nulo, una sociedad sin grupo asignado (3.647 → 4.887 en Cultivo) y una columna vacía.
Cada corrección quedó registrada con el número de antes y el de después. Incluido un diagnóstico mío que resultó equivocado, corregido en el mismo documento.
Lo que hay que decir antes de que lo preguntenEl informe sigue sin disparador por horario. Eso lo decide el administrador del entorno, no yo.
El archivo que se llamaba 2026 y traía 2025
Cuatro informes leen los QVD que deja una extractora. Buscando otra cosa, encontré que los archivos se solapaban.
70.058 filas
para 34.961 manifiestos
1
línea de la URL de origen
- La URL del extractor hace aritmética con la fecha, y
2026-01-01 se evalúa como 2024. El rango que llega a la API es el de la conexión, no el que pide el script. - Consecuencia medida: dos informes tienen 2025 duplicado y otros dos reciben 2025 desde un archivo llamado 2026.
Está documentado con los números y sin tocar. Arreglarlo en el origen es una app publicada de la que viven cuatro informes: eso se planifica, no se improvisa un martes.
Lo que hay que decir antes de que lo preguntenQue yo lo haya encontrado no lo convierte en mío. Lo que hice fue medirlo y escribirlo donde se pueda decidir.
Seis millones de filas intermedias para un indicador
Una app de gestión de personas llevaba tres meses sin recargar. El bloque de clima laboral leía cinco tablas de encuestas completas.
412.836
encuestas leídas enteras
3
pestañas con la misma cadena
- Se arregló filtrando en el origen, sin cambiar la lógica: el indicador da lo mismo, pero ya no se traen cinco tablas enteras para agregarlas después.
- Detrás apareció el bloqueo real: un conector REST apunta a una versión antigua del ERP y devuelve 401. Estaba contenido con
ErrorMode = 0, es decir, el script seguía adelante como si nada.
Un error silenciado con ErrorMode = 0 es una decisión, no un accidente. Lo que hice fue dejarlo visible con una tabla de estado de carga, para que la próxima vez se note.
Lo que hay que decir antes de que lo preguntenMigrar esa conexión mueve datos de varios informes. Sigue pendiente de decisión, y está escrito así.
Una llave rota que ponía septiembre en cero
El informe de rotación mostraba el mes en curso sin un solo retiro. Nadie lo había reportado: parecía un mes bueno.
0 → 13.546
retiros asociados
0 → 1.125
retiros en el mes en curso
554.349
filas persona-mes del modelo
- La llave persona-mes estaba mal construida y dejaba los retiros sin asociar. Arreglada y verificada en la copia de trabajo.
- Sobre ese panel construí después el modelo de riesgo de renuncia voluntaria: 18.157 episodios de empleo, 6.404 renuncias voluntarias, 86 variables.
El origen reportaba 7.048 «renuncias voluntarias». 325 eran traslados entre sociedades del mismo grupo: la persona nunca se fue. Cambiar la llave del episodio de número de nómina a cédula lo corrigió, y eso cambia todas las cifras que van detrás.
Lo que hay que decir antes de que lo preguntenLa app publicada sigue con el dato viejo a propósito: arreglarla sube números que alguien está mirando, y eso se avisa antes, no después.
Un estado de resultados que cuadra al peso
Un área llevaba su P&G en Excel, con su formato, sus negritas y sus totales desplegables. Querían verlo en Qlik sin perder eso.
18 de 18
filas cuadradas al peso
7
columnas: real, presupuesto y año anterior
0
importes en «sin clasificar»
- La clasificación de cuentas se lee de su propio Excel por búsqueda directa de la cuenta. La cascada de mapeos que ya existía acertaba el grupo en 43 de 131 cuentas — y no se tocó, porque de ella dependen otras dos hojas.
- Comparado contra su Excel del mes, en real y en presupuesto, fila por fila.
Dos discrepancias quedaron abiertas y dichas: su Excel infla el presupuesto en 9.981.369 por dos filas duplicadas en Seguros, y las toneladas reales van un mes atrasadas.
Lo que hay que decir antes de que lo preguntenCuadrar contra el Excel del área no es lo mismo que cuadrar contra la contabilidad. Lo que está verificado es lo primero.