Combinar tablas: Append y Merge
Une y relaciona datos de múltiples fuentes.
Una de las tareas mas comunes en el trabajo con datos es combinar informacion de multiples fuentes. Power Query ofrece dos operaciones fundamentales: Append (apilar verticalmente) y Merge (unir horizontalmente). En esta leccion dominaras ambas.
Dos Formas de Combinar Datos
Antes de profundizar, es crucial entender la diferencia:
APPEND (Apilar / Anexar) MERGE (Combinar / Unir)
Agrega filas debajo Agrega columnas al lado
┌─────────┐ ┌─────────┐ ┌─────────┐
│ Tabla A │ │ Tabla A │ + │ Tabla B │
├─────────┤ │ │ │ │
│ Fila 1 │ │ Col 1 │ │ Col X │
│ Fila 2 │ │ Col 2 │ │ Col Y │
├─────────┤ └─────────┘ └─────────┘
│ Tabla B │ ──► │
├─────────┤ ┌───────┴───────────┐
│ Fila 3 │ │ Col 1 | Col 2 | X │
│ Fila 4 │ │ datos | datos | X │
└─────────┘ └───────────────────┘
Caso: Consolidar datos Caso: Agregar informacion
mensuales de ventas de una tabla de productos
| Operacion | Uso | Analogo Excel |
|---|---|---|
| Append | Unir filas de tablas con misma estructura | Copiar y pegar debajo |
| Merge | Unir columnas basado en clave comun | BUSCARV / XLOOKUP |
Append: Apilar Tablas Verticalmente
Cuando usar Append
- Consolidar reportes periodicos (diarios, semanales, mensuales)
- Unir datos de diferentes sucursales con mismo formato
- Combinar archivos de exportacion de un mismo sistema
Requisitos para Append
- Las tablas deben tener la misma estructura (columnas iguales)
- Los nombres de columna deben coincidir exactamente
- Los tipos de datos deben ser compatibles
Ejemplo Practico: Consolidar Ventas Trimestrales
Tienes tres tablas de ventas:
Tabla Enero:
| Producto | Cantidad | Total |
|---|---|---|
| Laptop | 5 | 6000 |
| Mouse | 50 | 1250 |
Tabla Febrero:
| Producto | Cantidad | Total |
|---|---|---|
| Laptop | 3 | 3600 |
| Teclado | 20 | 900 |
Tabla Marzo:
| Producto | Cantidad | Total |
|---|---|---|
| Monitor | 10 | 3500 |
| Mouse | 30 | 750 |
Paso a Paso: Append
Metodo 1: Desde la interfaz
- Selecciona la primera consulta (Enero) en el panel izquierdo
- Ve a Inicio > Anexar consultas > Anexar consultas como nueva
- En el dialogo:
- Selecciona "Tres o mas tablas"
- Agrega las tablas: Enero, Febrero, Marzo
- Click en Aceptar
┌─────────────────────────────────────────────────────────────┐
│ ANEXAR CONSULTAS │
├─────────────────────────────────────────────────────────────┤
│ │
│ ○ Dos tablas │
│ ● Tres o mas tablas │
│ │
│ Tablas disponibles: Tablas a anexar: │
│ ┌──────────────────┐ ┌──────────────────┐ │
│ │ │ [>] │ Enero │ │
│ │ │ │ Febrero │ │
│ │ │ [<] │ Marzo │ │
│ │ │ │ │ │
│ └──────────────────┘ └──────────────────┘ │
│ │
│ [ Aceptar ] [ Cancelar ] │
└─────────────────────────────────────────────────────────────┘
Metodo 2: Anexar a consulta existente
- Selecciona la consulta principal
- Inicio > Anexar consultas
- Selecciona la tabla a agregar
Resultado del Append:
| Producto | Cantidad | Total |
|---|---|---|
| Laptop | 5 | 6000 |
| Mouse | 50 | 1250 |
| Laptop | 3 | 3600 |
| Teclado | 20 | 900 |
| Monitor | 10 | 3500 |
| Mouse | 30 | 750 |
Codigo M para Append
let
// Append de dos tablas
Resultado = Table.Combine({Enero, Febrero})
in
Resultado
let
// Append de multiples tablas
Resultado = Table.Combine({Enero, Febrero, Marzo, Abril})
in
Resultado
Agregar Columna de Origen
Un patron comun es agregar una columna que indique de que tabla proviene cada fila:
let
// Agregar columna de mes a cada tabla antes de combinar
EneroConMes = Table.AddColumn(Enero, "Mes", each "Enero"),
FebreroConMes = Table.AddColumn(Febrero, "Mes", each "Febrero"),
MarzoConMes = Table.AddColumn(Marzo, "Mes", each "Marzo"),
// Combinar
Combinado = Table.Combine({EneroConMes, FebreroConMes, MarzoConMes})
in
Combinado
Resultado con columna de origen:
| Producto | Cantidad | Total | Mes |
|---|---|---|---|
| Laptop | 5 | 6000 | Enero |
| Mouse | 50 | 1250 | Enero |
| Laptop | 3 | 3600 | Febrero |
| Teclado | 20 | 900 | Febrero |
| Monitor | 10 | 3500 | Marzo |
| Mouse | 30 | 750 | Marzo |
Merge: Unir Tablas Horizontalmente
Cuando usar Merge
- Agregar datos de una tabla maestra (productos, clientes, empleados)
- Enriquecer datos transaccionales con informacion adicional
- Reemplazar BUSCARV/XLOOKUP para grandes volumenes
Conceptos Clave: Joins
Merge funciona como un JOIN de bases de datos. Necesitas entender los tipos:
LEFT OUTER JOIN (Izquierda)
──────────────────────────────────
Incluye TODAS las filas de la tabla izquierda,
y las coincidencias de la derecha.
┌─────────┐ ┌─────────┐ ┌─────────────────┐
│ A │ + │ B │ = │ A + coincide B │
│ 1,2,3 │ │ 2,3,4 │ │ 1,2,3 (+2,3) │
└─────────┘ └─────────┘ └─────────────────┘
RIGHT OUTER JOIN (Derecha)
──────────────────────────────────
Incluye TODAS las filas de la tabla derecha,
y las coincidencias de la izquierda.
┌─────────┐ ┌─────────┐ ┌─────────────────┐
│ A │ + │ B │ = │ coincide A + B │
│ 1,2,3 │ │ 2,3,4 │ │ (2,3) + 2,3,4 │
└─────────┘ └─────────┘ └─────────────────┘
INNER JOIN (Interna)
──────────────────────────────────
Incluye SOLO las filas que coinciden en ambas tablas.
┌─────────┐ ┌─────────┐ ┌─────────────────┐
│ A │ + │ B │ = │ solo coinciden │
│ 1,2,3 │ │ 2,3,4 │ │ 2,3 │
└─────────┘ └─────────┘ └─────────────────┘
FULL OUTER JOIN (Externa completa)
──────────────────────────────────
Incluye TODAS las filas de ambas tablas.
┌─────────┐ ┌─────────┐ ┌─────────────────┐
│ A │ + │ B │ = │ A + B │
│ 1,2,3 │ │ 2,3,4 │ │ 1,2,3,4 │
└─────────┘ └─────────┘ └─────────────────┘
Ejemplo Practico: Agregar Datos de Productos
Tabla Ventas:
| ID_Producto | Cantidad | Fecha |
|---|---|---|
| P001 | 5 | 2026-01-15 |
| P002 | 10 | 2026-01-16 |
| P003 | 3 | 2026-01-17 |
| P004 | 7 | 2026-01-18 |
Tabla Productos (Maestra):
| ID_Producto | Nombre | Precio | Categoria |
|---|---|---|---|
| P001 | Laptop | 1200 | Electronica |
| P002 | Mouse | 25 | Accesorios |
| P003 | Teclado | 45 | Accesorios |
| P005 | Monitor | 350 | Electronica |
Nota: P004 esta en Ventas pero no en Productos. P005 esta en Productos pero no en Ventas.
Paso a Paso: Merge
- Selecciona la consulta Ventas (tabla principal)
- Ve a Inicio > Combinar consultas > Combinar consultas
- En el dialogo:
- Tabla superior: Ventas (ya seleccionada)
- Click en columna clave: ID_Producto
- Tabla inferior: Selecciona Productos
- Click en columna clave: ID_Producto
- Selecciona tipo de combinacion
┌─────────────────────────────────────────────────────────────────┐
│ COMBINAR CONSULTAS │
├─────────────────────────────────────────────────────────────────┤
│ │
│ Selecciona la primera tabla: Ventas │
│ ┌────────────────────────────────────────────────────────┐ │
│ │ ID_Producto ▼ │ Cantidad │ Fecha │ │ │
│ │ P001 │ 5 │ 2026-01-15 │ │ │
│ │ P002 │ 10 │ 2026-01-16 │ │ │
│ └────────────────────────────────────────────────────────┘ │
│ │
│ Selecciona la segunda tabla: [Productos ▼] │
│ ┌────────────────────────────────────────────────────────┐ │
│ │ ID_Producto ▼ │ Nombre │ Precio │ Categoria │ │ │
│ │ P001 │ Laptop │ 1200 │ Electronica │ │ │
│ │ P002 │ Mouse │ 25 │ Accesorios │ │ │
│ └────────────────────────────────────────────────────────┘ │
│ │
│ Tipo de combinacion: │
│ [Externa izquierda (todas de la primera, coinciden...) ▼] │
│ │
│ ✓ La seleccion coincide con 3 de 4 filas de la primera tabla │
│ │
│ [ Aceptar ] [ Cancelar ] │
└─────────────────────────────────────────────────────────────────┘
- Click en Aceptar
- Aparece nueva columna con tabla anidada
- Click en el icono de expansion para seleccionar columnas
┌─────────────────────────────────────────────────────────────┐
│ Expandir columna "Productos" │
├─────────────────────────────────────────────────────────────┤
│ │
│ ○ Expandir │
│ ○ Agregar como nueva columna │
│ │
│ ☑ Nombre │
│ ☑ Precio │
│ ☑ Categoria │
│ ☐ ID_Producto ←── Desmarcar, ya lo tenemos │
│ │
│ ☑ Usar nombre de columna original como prefijo │
│ │
│ [ Aceptar ] [ Cancelar ] │
└─────────────────────────────────────────────────────────────┘
Resultados segun Tipo de Join
LEFT OUTER (Izquierda) - El mas usado:
| ID_Producto | Cantidad | Fecha | Nombre | Precio | Categoria |
|---|---|---|---|---|---|
| P001 | 5 | 2026-01-15 | Laptop | 1200 | Electronica |
| P002 | 10 | 2026-01-16 | Mouse | 25 | Accesorios |
| P003 | 3 | 2026-01-17 | Teclado | 45 | Accesorios |
| P004 | 7 | 2026-01-18 | null | null | null |
P004 aparece con valores nulos porque no existe en Productos.
INNER (Interna):
| ID_Producto | Cantidad | Fecha | Nombre | Precio | Categoria |
|---|---|---|---|---|---|
| P001 | 5 | 2026-01-15 | Laptop | 1200 | Electronica |
| P002 | 10 | 2026-01-16 | Mouse | 25 | Accesorios |
| P003 | 3 | 2026-01-17 | Teclado | 45 | Accesorios |
Solo 3 filas: las que coinciden en ambas tablas.
FULL OUTER (Externa completa):
| ID_Producto | Cantidad | Fecha | Nombre | Precio | Categoria |
|---|---|---|---|---|---|
| P001 | 5 | 2026-01-15 | Laptop | 1200 | Electronica |
| P002 | 10 | 2026-01-16 | Mouse | 25 | Accesorios |
| P003 | 3 | 2026-01-17 | Teclado | 45 | Accesorios |
| P004 | 7 | 2026-01-18 | null | null | null |
| P005 | null | null | Monitor | 350 | Electronica |
Incluye P004 (sin producto) y P005 (sin venta).
Codigo M para Merge
let
// Left Outer Join
Origen = Table.NestedJoin(
Ventas, // Tabla izquierda
{"ID_Producto"}, // Columna(s) clave izquierda
Productos, // Tabla derecha
{"ID_Producto"}, // Columna(s) clave derecha
"Productos", // Nombre de columna resultado
JoinKind.LeftOuter // Tipo de join
),
// Expandir columnas
Expandido = Table.ExpandTableColumn(
Origen,
"Productos",
{"Nombre", "Precio", "Categoria"},
{"Nombre", "Precio", "Categoria"}
)
in
Expandido
Tipos de Join en M:
| Tipo | Codigo M |
|---|---|
| Izquierda | JoinKind.LeftOuter |
| Derecha | JoinKind.RightOuter |
| Interna | JoinKind.Inner |
| Externa completa | JoinKind.FullOuter |
| Izquierda anti | JoinKind.LeftAnti |
| Derecha anti | JoinKind.RightAnti |
Caso Practico: Consolidar Datos Mensuales con Informacion de Sucursal
Escenario
Tienes:
- Archivos de ventas mensuales (Enero, Febrero, Marzo)
- Una tabla maestra de sucursales
Necesitas consolidar las ventas y agregar informacion de las sucursales.
Datos de Entrada
Tabla Enero:
| ID_Sucursal | Producto | Cantidad |
|---|---|---|
| S01 | Laptop | 10 |
| S02 | Mouse | 50 |
| S01 | Teclado | 20 |
Tabla Febrero:
| ID_Sucursal | Producto | Cantidad |
|---|---|---|
| S02 | Laptop | 8 |
| S03 | Monitor | 15 |
Tabla Sucursales (Maestra):
| ID_Sucursal | Nombre | Ciudad | Region |
|---|---|---|---|
| S01 | Centro | CDMX | Centro |
| S02 | Norte | Monterrey | Norte |
| S03 | Sur | Merida | Sureste |
Solucion Paso a Paso
Paso 1: Agregar columna Mes a cada tabla
Para Enero:
EneroConMes = Table.AddColumn(Enero, "Mes", each "Enero")
Paso 2: Append de todas las tablas de ventas
VentasConsolidadas = Table.Combine({
EneroConMes,
FebreroConMes
})
Paso 3: Merge con tabla de sucursales
ConSucursales = Table.NestedJoin(
VentasConsolidadas,
{"ID_Sucursal"},
Sucursales,
{"ID_Sucursal"},
"Sucursales",
JoinKind.LeftOuter
)
Paso 4: Expandir informacion de sucursales
Expandido = Table.ExpandTableColumn(
ConSucursales,
"Sucursales",
{"Nombre", "Ciudad", "Region"}
)
Resultado Final
| ID_Sucursal | Producto | Cantidad | Mes | Nombre | Ciudad | Region |
|---|---|---|---|---|---|---|
| S01 | Laptop | 10 | Enero | Centro | CDMX | Centro |
| S02 | Mouse | 50 | Enero | Norte | Monterrey | Norte |
| S01 | Teclado | 20 | Enero | Centro | CDMX | Centro |
| S02 | Laptop | 8 | Febrero | Norte | Monterrey | Norte |
| S03 | Monitor | 15 | Febrero | Sur | Merida | Sureste |
Codigo M Completo
let
// Cargar tablas base
Enero = Excel.CurrentWorkbook(){[Name="Enero"]}[Content],
Febrero = Excel.CurrentWorkbook(){[Name="Febrero"]}[Content],
Sucursales = Excel.CurrentWorkbook(){[Name="Sucursales"]}[Content],
// Agregar columna Mes
EneroConMes = Table.AddColumn(Enero, "Mes", each "Enero", type text),
FebreroConMes = Table.AddColumn(Febrero, "Mes", each "Febrero", type text),
// Consolidar ventas (Append)
VentasConsolidadas = Table.Combine({EneroConMes, FebreroConMes}),
// Unir con sucursales (Merge)
ConSucursales = Table.NestedJoin(
VentasConsolidadas,
{"ID_Sucursal"},
Sucursales,
{"ID_Sucursal"},
"DatosSucursal",
JoinKind.LeftOuter
),
// Expandir columnas de sucursal
Resultado = Table.ExpandTableColumn(
ConSucursales,
"DatosSucursal",
{"Nombre", "Ciudad", "Region"},
{"Sucursal", "Ciudad", "Region"}
)
in
Resultado
Errores Comunes y Soluciones
Error 1: Columnas no coinciden en Append
Problema: Las tablas tienen nombres de columna diferentes.
Solucion: Renombrar columnas antes del Append:
TablaRenombrada = Table.RenameColumns(Tabla, {{"OldName", "NewName"}})
Error 2: Merge devuelve nulos inesperados
Problema: La columna clave tiene espacios o diferente formato.
Solucion: Limpiar y estandarizar antes del Merge:
Limpia = Table.TransformColumns(Tabla, {{"ID", Text.Trim}})
Mayusculas = Table.TransformColumns(Limpia, {{"ID", Text.Upper}})
Error 3: Duplicados despues del Merge
Problema: La tabla derecha tiene duplicados en la columna clave.
Solucion: Eliminar duplicados antes del Merge:
SinDuplicados = Table.Distinct(Tabla, {"ID_Columna"})
Puntos Clave de esta Leccion
Append apila verticalmente: Usa cuando tienes tablas con misma estructura
Merge une horizontalmente: Usa cuando necesitas agregar columnas de otra tabla
Left Outer es el join mas comun: Conserva todas las filas de tu tabla principal
Inner Join filtra automaticamente: Solo muestra coincidencias
Siempre limpia las claves: Espacios y mayusculas causan problemas
Agrega columna de origen en Append: Facilita identificar de donde viene cada fila
Proxima Leccion
En la siguiente leccion aprenderemos a automatizar la actualizacion de datos, crear flujos de trabajo de refresco y gestionar dependencias entre consultas.
Quiz de Comprension
Pregunta 1
Tienes ventas de 12 meses en archivos separados con el mismo formato. Que operacion usarias para crear un consolidado?
A) Merge con Left Outer Join B) Append de las 12 tablas C) Merge con Inner Join D) Crear 12 consultas separadas
Ver respuesta
Respuesta: B) Append de las 12 tablas
Append es la operacion correcta porque quieres apilar datos verticalmente (una tabla debajo de otra). Merge se usa para agregar columnas, no filas.
Pregunta 2
Tienes una tabla de Ventas con ID_Cliente y quieres agregar Nombre y Email de una tabla Clientes. Que tipo de Join conserva TODAS las ventas aunque algunos clientes no existan?
A) Inner Join B) Right Outer Join C) Left Outer Join D) Full Outer Join
Ver respuesta
Respuesta: C) Left Outer Join
Left Outer Join conserva todas las filas de la tabla izquierda (Ventas) y agrega las coincidencias de la tabla derecha (Clientes). Si un cliente no existe, las columnas agregadas mostraran null.
Pregunta 3
Despues de un Merge, aparece una columna con el icono de tabla. Que debes hacer para ver los datos?
A) Hacer doble clic en la columna B) Usar Expandir columna desde el icono de expansion C) Crear una nueva consulta D) Convertir la columna a texto
Ver respuesta
Respuesta: B) Usar Expandir columna desde el icono de expansion
Despues de un Merge, los datos relacionados aparecen como tablas anidadas. Debes hacer clic en el icono de expansion (flechas hacia afuera) en el encabezado de la columna para seleccionar que columnas expandir.
¿Completaste esta lección?
Marca esta lección como completada. Tu progreso se guardará en tu navegador.