¿Columnas con nombres distintos en Power Query?
¿Columnas con nombres distintos en Power Query?
Aquí tienes la solución definitiva para normalizar tus datos y evitar errores al combinar ficheros en Excel.
Tenías un Power Query perfectamente automatizado hasta que alguien decidió "optimizar" el nombre de una columna en el fichero de origen y, de repente, todo el refresh se rompió. Es una de las situaciones más frustrantes de trabajar con datos: el problema no lo causas tú, pero lo sufres tú. La buena noticia es que se puede prevenir. En este tutorial vemos cómo montar una estructura de Power Query que se defienda sola ante los cambios de nombres de columna en los orígenes, para que el próximo cambio que haga otra persona no te explote el modelo.
El problema: orígenes con nombres distintos
Partimos de cuatro tablas de ventas dentro del mismo archivo (aunque los orígenes podrían estar en otros ficheros o en una carpeta). Tomamos la primera como referencia, con las columnas centro, mes y ventas. A partir de ahí, cada tabla tiene alguna diferencia:
- Una usa
siteen vez decentro. - Otra usa
periodoen vez demes. - Alguna añade una columna extra de
descuento. - Otra trae
importeoeurosen lugar deventas.
El objetivo es integrar todas esas variantes en una única tabla con el formato que queremos (centro, mes, ventas) sin romper nada y sin tocar el código cada vez.
La tabla de control: el diccionario de nombres
La pieza clave es una tabla de control con dos columnas: el nombre de la columna tal como llega en origen, y el nombre que debe tener en nuestro modelo final. Esa tabla es nuestro diccionario de traducción. Todo lo que queramos integrar tendrá que figurar ahí.
En Power Query nos conectamos al propio archivo con Excel.CurrentWorkbook(), que devuelve todo lo contenido en el fichero. Generamos una consulta para la tabla de control y otra para las tablas de ventas, filtrando las hojas distintas de control. Al consolidar todas las tablas de ventas vemos el problema con claridad: aparecen columnas sueltas como site, periodo y mes que el sistema no logra unir, porque tienen nombres diferentes.
Detectar los nombres de origen
El primer paso de la transformación es leer los nombres reales de cada tabla. Sobre la tabla ya cargada aplicamos Table.ColumnNames, que nos devuelve una lista con los nombres de columna tal como vienen. Como una lista no se puede combinar directamente, la convertimos en tabla con Table.FromList, que genera una columna llamada Column1.
Traducir con combinar consultas
Ahora combinamos esa tabla de nombres con la tabla de control, enlazando Column1 con la columna de origen. Al expandir, cada nombre recibe su equivalente final: site pasa a centro, periodo a mes, y ventas se queda igual. Para las columnas que no están en el diccionario (como descuento), el resultado es null. Para no perderlas, usamos Reemplazar valores: buscamos null y lo sustituimos por el valor original. La clave es hacerlo dinámico con each [Column1], de modo que cada fila nula recupere su nombre original en lugar de un texto fijo.
Renombrar de forma masiva
Con los nombres de origen y los de destino preparados, construimos dos listas a partir de las columnas de la tabla (valores0 para origen y valores1 para destino). Las unimos con List.Zip, que empareja el primer elemento de cada lista, luego el segundo, y así crea una lista de listas con la forma {nombre_origen, nombre_final} que necesita la función de renombrado.
Finalmente aplicamos Table.RenameColumns, pasándole la tabla original (el paso Tipo cambiado) y la lista de pares de cambios. El resultado es la tabla con los nombres ya adaptados a nuestro estándar.
Convertir los pasos en una función
Para no repetir todo este trabajo tabla por tabla, transformamos la consulta en una función. Definimos un parámetro de entrada (tablaOrigen as table) y declaramos que la salida también será as table. Eliminamos los pasos de navegación al origen y sustituimos las referencias al paso Tipo cambiado por tablaOrigen. Guardamos la función con un nombre reconocible como transformaNombres.
Ahora, en la consulta de los orígenes, añadimos una columna personalizada (por ejemplo estandarizado) que aplica transformaNombres a cada tabla de la columna Content. Al expandir, todas las tablas quedan con los nombres correctos de golpe.
Limpiar el resultado final
Quedan dos detalles. Primero, si en origen aparece un nombre que no está en la tabla de control, simplemente lo añadimos al diccionario (por ejemplo, euros → ventas o importe → ventas) y al actualizar se traduce solo, sin tocar el código.
Segundo, para que el resultado tenga siempre exactamente centro, mes y ventas y no se cuele ninguna columna no deseada, creamos otra referencia a la tabla de control: nos quedamos solo con la columna de destino, quitamos duplicados y la convertimos en lista (columnasDestino). Luego, con Elegir columnas, combinamos esa lista con la columna fija Name para conservar únicamente las columnas previstas en el modelo.
Conclusión
Con esta estructura, cuando alguien cambie un nombre de columna en el origen, solo tendrás que añadir una fila a la tabla de control y actualizar. No es la parte más glamurosa del trabajo con datos, pero es justo la que evita que tu Power Query se convierta en un campo de batalla en cada refresh. Es prevención pura: el cambio volverá a pasar, pero esta vez te pillará preparado.
Más casos con estas funciones
Más contenido de Excel en InflueXcel
- Power Query: rutas dinámicas para compartir ficheros sin romper conexiones CasoUn miembro de la comunidad plantea un problema muy frecuente: tiene una consulta de Power Query con una ruta de red fija (\\servidor\shared-
- Optimización de Power Query para consultas masivas a API REST CasoInteresante caso de optimización en Power Query. Randolfo, desde Guatemala, necesitaba consultar el estado de más de 100 envíos de paqueterí
- 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
- Separar artículos concatenados en filas: 4 enfoques (fórmulas, Power Query y Python) CasoCaso interesante con cuatro enfoques muy distintos para resolver un mismo problema: una tabla tiene una columna de artículos concatenados co
- Consolidar múltiples archivos Excel con Power Query desde carpeta CasoUn miembro necesitaba consolidar datos de múltiples archivos Excel almacenados en una carpeta. El reto adicional: cada archivo contenía vari
- Combinar tablas con columnas diferentes en Power Query sin perder datos CasoNuevo caso práctico: un miembro tiene archivos de datos de 2024 (54 columnas) y 2025 (109 columnas) en una carpeta. Al importarlos con "Desd
- Extraer datos de archivos XML complejos: Power Query, VBA y Power Automate CasoSergio plantea un problema real con datos abiertos del gobierno español: archivos XML de licitaciones públicas con más de 30 niveles de anid
- Readmisión de pacientes en 48h: Power Query, LAMBDA/MAP y AGRUPARPOR CasoAndrés Rojas plantea un reto real de datos clínicos: a partir de una tabla con más de un millón de registros de urgencias (IdPaciente, Fecha
- BYROW+checkbox para filtrado dinámico en control alimentario (APPCC) CasoRosario trabaja en seguridad alimentaria y tiene un sistema APPCC (Análisis de Peligros y Puntos de Control Crítico) montado en Excel para u
- Descomposición de Cholesky con matrices dinámicas: de VBA a LAMBDA+REDUCE CasoJuan Pablo lanza un reto al grupo: tiene una descomposición de Cholesky resuelta con VBA y quiere saber si se puede hacer con matrices dinám