Combinar tablas con columnas diferentes en Power Query sin perder datos

Nuevo caso práctico: un miembro tiene archivos de datos de 2024 (54 columnas) y 2025 (109 columnas) en una carpeta. Al importarlos con "Desde carpeta" en Power Query, las columnas que no existen en 2024 aparecen como null, perdiendo los datos del archivo más antiguo.

Gerson explica el enfoque correcto y comparte un vídeo tutorial: la clave es que Power Query, al combinar archivos con columnas distintas, necesita una tabla de referencia que defina la estructura final. Con Table.Combine o la opción "Anexar consultas", PQ maneja las columnas que faltan rellenándolas con null, pero las que existen en ambos archivos se mantienen correctamente.

Nacho aclara el flujo: si importas con "Desde carpeta", Power Query toma el primer archivo como plantilla. Si ese archivo tiene menos columnas, las columnas adicionales del segundo archivo se pierden.

La solución: en vez de usar directamente "Desde carpeta", importar los archivos por separado y luego usar "Anexar consultas", o bien configurar la muestra del conector de carpeta para que use el archivo con más columnas como referencia.

Otro miembro aporta un tip adicional: usar Excel.CurrentWorkbook() para cuando los rangos o tablas están dentro del mismo libro, reconociéndolos todos de golpe sin tener que crear conexiones manuales una por una.

Un problema muy común en entornos donde los formatos de datos evolucionan de un año a otro.

Y si lo que cambia es el nombre de las columnas

Cuando las columnas son las mismas pero llegan con otro nombre (site en vez de centro, periodo en vez de mes), anexar no basta. El vídeo de esta ficha monta una tabla de control, con el nombre de origen y el nombre final, y una función con Table.ColumnNames, List.Zip y Table.RenameColumns que renombra cada tabla antes de combinarlas. Un nombre nuevo se resuelve añadiendo una fila a la tabla de control.

El problema: el fichero de 2024 tiene 54 columnas y el de 2025 tiene 109

Un miembro de la comunidad tenía en una carpeta los datos de dos ejercicios: el fichero de 2024 con 54 columnas y el de 2025 con 109. El sistema que genera los informes había crecido, y con él el número de campos.

Al importar la carpeta con Power Query, el resultado fue el esperado a medias: las columnas nuevas de 2025 aparecían llenas para ese año y vacías para 2024, cosa lógica porque no existían. Pero además faltaban datos del fichero antiguo. Columnas que sí estaban en 2024 no aparecían en la consolidación.

Ese segundo síntoma es el que delata la causa real, y no tiene nada que ver con que los ficheros sean distintos.

Por qué pasa: el primer archivo manda

Nacho lo explicó en una frase que conviene grabarse: cuando importas con "Desde carpeta", Power Query toma el primer archivo como plantilla.

El conector no inspecciona todos los ficheros para deducir una estructura común. Coge uno como muestra (el archivo de ejemplo que verás en el panel de consultas), genera a partir de él una función de transformación, y aplica esa función a todos los demás.

La consecuencia es directa: la función solo sabe extraer las columnas que existían en la muestra. Si el archivo de ejemplo es el de 2024, las 55 columnas extra de 2025 no se extraen, sencillamente porque la función no las contempla. Y al revés, si la muestra fuera la de 2025, las columnas que solo existen ahí saldrían vacías para 2024, que es el comportamiento correcto y esperable.

Es decir: no estás ante un fallo, estás ante una decisión que Power Query tomó por ti sin avisar.

Las soluciones

Gerson explicó el enfoque correcto y compartió un vídeo tutorial. Hay dos caminos según lo que te convenga.

Opción A: importar por separado y anexar. En vez de tirar del conector de carpeta, cargas cada fichero como consulta independiente y luego usas Anexar consultas. Al anexar, Power Query hace la unión de todas las columnas de todas las consultas: las que existen en ambas se emparejan por nombre y las que solo están en una se rellenan con nulos en la otra. Esto es lo que hace por detrás Table.Combine, y es exactamente el comportamiento que quieres.

Es más manual, pero tienes control total. Con dos o tres ficheros al año es perfectamente razonable.

Opción B: cambiar el archivo de muestra del conector. Si prefieres seguir con la carpeta (porque cada mes caen ficheros nuevos y no quieres tocar la consulta), configura el conector para que use como muestra el archivo con más columnas, el de 2025 en este caso. La función generada contemplará entonces todas las columnas, y para los ficheros antiguos las que falten saldrán con nulos.

El punto débil de esta opción es evidente: el día que llegue un fichero con columnas nuevas, habrá que volver a cambiar la muestra. Pero mientras la estructura más completa sea la de referencia, funciona sin mantenimiento.

El tip extra: Excel.CurrentWorkbook

Otro miembro aportó algo que no resuelve este caso pero ahorra muchísimo trabajo en el escenario vecino: cuando las tablas o rangos que quieres consolidar están dentro del mismo libro, Excel.CurrentWorkbook te los reconoce todos de golpe.

En vez de crear una conexión por cada tabla y luego anexarlas una a una, esa función devuelve una tabla con todas las tablas y rangos con nombre del libro actual. Filtras las que te interesan por nombre y expandes. Si tienes doce hojas con una tabla cada una, la diferencia entre hacerlo así o a mano es de veinte minutos a dos.

El problema vecino: las mismas columnas con otro nombre

Hay una variante de este dolor que anexar no resuelve: que las columnas sean las mismas, pero alguien les cambie el nombre en origen (site en vez de centro, periodo en vez de mes, importe en vez de ventas). Power Query las trata como columnas distintas y la consolidación sale llena de huecos.

La solución del vídeo que acompaña a esta ficha es una tabla de control con dos columnas, el nombre que llega en origen y el nombre que quieres en el modelo, y una función que renombra cada tabla antes de combinarla:

  1. Table.ColumnNames lee los nombres reales de la tabla y Table.FromList los convierte en una tabla.
  2. Se combina con la tabla de control para traer el nombre final. Los que no figuran en ella conservan el original.
  3. List.Zip empareja cada nombre de origen con su destino y Table.RenameColumns aplica todos los cambios de una vez.
  4. Todo eso se convierte en una función (transformaNombres) que se aplica a cada tabla con una columna personalizada.

Cuando aparezca un nombre nuevo, basta con añadir una fila a la tabla de control y actualizar.

Conceptos clave

  • Archivo de muestra del conector de carpeta — el fichero que Power Query usa como plantilla para generar la función de transformación. Determina qué columnas se extraen de todos los demás.
  • Anexar consultas — la unión que sí contempla estructuras distintas: empareja columnas por nombre y rellena con nulos las que faltan.
  • Table.Combine — la función M que hay detrás de anexar; útil si prefieres escribirlo en código.
  • Excel.CurrentWorkbook — reconoce de golpe todas las tablas y rangos con nombre del libro actual.
  • Nulos por columna ausente — comportamiento normal y deseable; no confundirlo con pérdida de datos.

Conclusión

La clave para no volver a caer en esto es entender la diferencia entre combinar desde carpeta y anexar consultas. La primera asume que todos los ficheros comparten estructura y se apoya en uno como referencia; la segunda está diseñada precisamente para que no la compartan.

Cuando tus formatos de datos evolucionan de un año a otro (y en cualquier empresa acaban evolucionando), anexar es casi siempre la respuesta más segura. Si necesitas la comodidad de la carpeta, al menos asegúrate de que la muestra es el fichero más completo, y revísalo cada vez que cambie la estructura del origen. Casos así, con ficheros que crecen de ejercicio en ejercicio, son de los más frecuentes en la comunidad de InflueXcel.

Más casos con estas funciones

Más contenido de Excel en InflueXcel