Una tabla de hechos en Power BI es la tabla que guarda eventos medibles, como ventas, pedidos o pagos. La usaremos para separar cada venta de las descripciones de productos, clientes y fechas, crear relaciones y evitar que los totales se multipliquen.
El proceso puede preparedse en Excel con Power Query, disponible desde Excel 2016, o directamente en Power BI Desktop. Al terminar, el lector tendrá un modelo en esquema estrella listo para analizar.
Qué es una tabla de hechos y qué información contiene
La tabla de hechos contiene los datos que se analizan mediante medidas. En una tienda, cada fila puede representar una venta: fecha, factura, producto, cliente, cantidad e importe. Los importes son medidas que Power BI puede sumar, promediar o comparar.
Las tablas de dimensiones explican los elementos de esa venta. Productos contiene código y nombre; Clientes, identificador y ciudad; Calendario, fecha y sus componentes como año o mes.
| Tabla | Ejemplo de información | Función en el modelo |
|---|---|---|
| Ventas | Fecha, factura, producto, cliente, cantidad, importe | Guardar eventos medibles |
| Productos | IDProducto, nombre del producto | Describir y agrupar productos |
| Clientes | IDCliente, cliente, ciudad | Describir y filtrar clientes |
| Calendario | Fecha, año, mes, nombre del mes | Filtrar ventas por periodo |
La tabla de hechos no debe repetir descripciones que cambian infrequently. La separación evita datos redundantes y facilita conectar varias tablas de hechos con dimensiones comunes.
Las partes de un modelo con tabla de hechos
Un modelo dimensional organiza los hechos alrededor de una tabla central y distribuye sus claves entre dimensiones. En nuestro libro, Ventas será esa tabla central. Cada venta conservará el identificador del producto, del cliente y la fecha.
| Parte | En Ventas | En la dimensión |
|---|---|---|
| Clave de producto | IDProducto | IDProducto |
| Clave de cliente | IDCliente | IDCliente |
| Clave de fecha | Fecha | Fecha |
| Medidas | Cantidad, Importe | No se necesitan para identificar |
La relación debe ser uno a varios: una fila de Productos se relaciona con muchas ventas del mismo producto; una fila de Clientes, con muchas ventas; una fila de Calendario, con muchas ventas registradas ese día.
La clave que identifica cada hecho
La clave de hecho no identifica por sí sola una venta; conecta la venta con sus dimensiones. IDProducto debe ser único en Productos, IDCliente debe ser único en Clientes y Fecha debe existir una sola vez en Calendario.
| A | B | C | D | E | F | |
|---|---|---|---|---|---|---|
| 1 | IDVenta | Fecha | IDProducto | IDCliente | Cantidad | Importe |
| 2 | V-001 | 03/01/2026 | P-01 | C-01 | 2 | 30,00 |
| 3 | V-002 | 03/01/2026 | P-02 | C-01 | 1 | 18,50 |
| 4 | V-003 | 04/01/2026 | P-01 | C-02 | 3 | 45,00 |
| 5 | V-004 | 05/01/2026 | P-03 | C-02 | 1 | 12,00 |
| 6 | V-005 | 05/01/2026 | P-01 | C-01 | 2 | 30,00 |
| 7 | V-006 | 06/01/2026 | P-02 | C-03 | 4 | 74,00 |
| 8 | V-007 | 07/01/2026 | P-03 | C-03 | 1 | 12,00 |
Una venta puede tener su propio IDVenta para distinguirla. Si una factura contiene varias líneas, el grano debe ser la línea de factura, no la factura completa.
Las medidas que puedes analizar
Cantidad e Importe son medidas. En una medida DAX, Ventas Importe = SUM ( Ventas[Importe] ) suma los importes. Una medida también puede contar facturas: Ventas Facturas = DISTINCTCOUNT ( Ventas[IDVenta] ).
La granularidad determina el resultado: si una fila es una línea de venta, la suma de Importe será el total de todas las líneas. Si dos filas describen la misma venta, el total será incorrecto.
| Columna | Tipo | Uso recomendado |
|---|---|---|
| Cantidad | Número entero | SUM para unidades vendidas |
| Importe | Número decimal | SUM para ingresos |
| IDVenta | Texto | DISTINCTCOUNT para contar ventas |
Preparar una tabla de ventas en Excel
Creamos el libro Ventas_tienda.xlsx con cuatro hojas. La primera contiene los eventos; las otras serán dimensiones. Para este ejercicio, Excel 2016 permite preparar y transformar los datos con Power Query.
- Abre Excel y crea un libro nuevo.
- Cambia el nombre de la Hoja1 por
Ventas. - Escribe los encabezados
IDVenta,Fecha,IDProducto,IDCliente,CantidadeImporte. - Copia los siete registros de la hoja siguiente.
- Formatea la columna B como
Fecha corta. - Formatea la columna F como
Númerocon dos decimales. - Guarda el libro como
Ventas_tienda.xlsx.
| A | B | C | D | E | F | |
|---|---|---|---|---|---|---|
| 1 | IDVenta | Fecha | IDProducto | IDCliente | Cantidad | Importe |
| 2 | V-001 | 03/01/2026 | P-01 | C-01 | 2 | 30,00 |
| 3 | V-002 | 03/01/2026 | P-02 | C-01 | 1 | 18,50 |
| 4 | V-003 | 04/01/2026 | P-01 | C-02 | 3 | 45,00 |
| 5 | V-004 | 05/01/2026 | P-03 | C-02 | 1 | 12,00 |
| 6 | V-005 | 05/01/2026 | P-01 | C-01 | 2 | 30,00 |
| 7 | V-006 | 06/01/2026 | P-02 | C-03 | 4 | 74,00 |
| 8 | V-007 | 07/01/2026 | P-03 | C-03 | 1 | 12,00 |
Identificar el grano de cada venta
El grano actual es una línea de venta. IDVenta identifica esa línea; IDProducto, IDCliente y Fecha indican con qué registros puede relacionarse.
Para comprobarlo:
- Selecciona
A2:A8. - Usa
Datos > Herramientas de datos > Eliminar duplicados. - Confirma que Excel informa que quedan siete registros.
- Revisa que cada fila tenga producto, cliente, cantidad e importe.
- Si una factura tuviera tres productos, escribe tres IDVenta diferentes, uno por línea.
| A | B | C | D | E | F | |
|---|---|---|---|---|---|---|
| 1 | IDVenta | Fecha | IDProducto | IDCliente | Cantidad | Importe |
| 2 | V-001 | 03/01/2026 | P-01 | C-01 | 2 | 30,00 |
| 3 | V-002 | 03/01/2026 | P-02 | C-01 | 1 | 18,50 |
| 4 | V-003 | 04/01/2026 | P-01 | C-02 | 3 | 45,00 |
| 5 | V-004 | 05/01/2026 | P-03 | C-02 | 1 | 12,00 |
| 6 | V-005 | 05/01/2026 | P-01 | C-01 | 2 | 30,00 |
| 7 | V-006 | 06/01/2026 | P-02 | C-03 | 4 | 74,00 |
| 8 | V-007 | 07/01/2026 | P-03 | C-03 | 1 | 12,00 |
Convertir los datos en una tabla de Excel
Convertimos el rango en una tabla para conservar encabezados y facilitar su lectura en Power Query.
- Selecciona
A1:F8. - Abre la pestaña
Insertar. - En el grupo
Tablas, pulsaTabla. - Acepta que el rango tenga encabezados.
- En Propiedades de tabla, conserva
Ventascomo nombre. - Guarda el libro.
| A | B | C | D | E | F | |
|---|---|---|---|---|---|---|
| 1 | IDVenta | Fecha | IDProducto | IDCliente | Cantidad | Importe |
| 2 | V-001 | 03/01/2026 | P-01 | C-01 | 2 | 30,00 |
| 3 | V-002 | 03/01/2026 | P-02 | C-01 | 1 | 18,50 |
| 4 | V-003 | 04/01/2026 | P-01 | C-02 | 3 | 45,00 |
| 5 | V-004 | 05/01/2026 | P-03 | C-02 | 1 | 12,00 |
| 6 | V-005 | 05/01/2026 | P-01 | C-01 | 2 | 30,00 |
| 7 | V-006 | 06/01/2026 | P-02 | C-03 | 4 | 74,00 |
| 8 | V-007 | 07/01/2026 | P-03 | C-03 | 1 | 12,00 |
Ventas.Separar ventas de productos, clientes y fechas
Ahora añadimos las dimensiones. Productos y Clientes contendrán una clave única y atributos descriptivos. Calendario tendrá una fila por día, desde el 1 hasta el 7 de enero de 2026.
| Hoja | Clave | Atributos |
|---|---|---|
| Productos | IDProducto | NombreProducto |
| Clientes | IDCliente | Cliente, Ciudad |
| Calendario | Fecha | Año, Mes, NombreMes |
Las claves deben conservar exactamente el mismo tipo y formato que sus columnas equivalentes en Ventas. Si IDProducto es texto, también lo será en Productos.
Crear la tabla de productos
- Crea una hoja llamada
Productos. - Escribe
IDProductoyNombreProductoen A1 y B1. - Copia estas tres combinaciones.
- Selecciona
A1:B4. - En
Insertar > Tablas, pulsaTabla. - Asigna el nombre
Productos.
| A | B | |
|---|---|---|
| 1 | IDProducto | NombreProducto |
| 2 | P-01 | Cuaderno |
| 3 | P-02 | Lapiz |
| 4 | P-03 | Goma |
Cada código aparece una sola vez. Si dos productos comparten nombre, reciben códigos distintos.
Crear la tabla de clientes
- Crea una hoja llamada
Clientes. - Escribe
IDCliente,ClienteyCiudaden A1, B1 y C1. - Copia los tres registros.
- Selecciona
A1:C4. - En
Insertar > Tablas, pulsaTabla. - Asigna el nombre
Clientes.
| A | B | C | |
|---|---|---|---|
| 1 | IDCliente | Cliente | Ciudad |
| 2 | C-01 | almacen Norte | Medellin |
| 3 | C-02 | libreria Centro | Medellin |
| 4 | C-03 | papeleria Sur | Bogota |
No incluyas Ciudad como parte de la clave: un mismo cliente puede tener varias ubicaciones en el futuro y debe conservar su historial de ventas.
Crear la tabla de fechas
Construimos Calendario con siete fechas. Para el ejemplo, escribimos las fechas y después calculamos Año, Mes y NombreMes.
- Crea una hoja llamada
Calendario. - Escribe
Fecha,Año,MesyNombreMesen A1:D1. - Escribe
01/01/2026en A2 y07/01/2026en A8. - Selecciona A2:A8 y usa el controlador de relleno.
- En B2 escribe
=AÑO(A2)y arrastra hasta B8. - En C2 escribe
=MES(A2)y arrastra hasta C8. - En D2 escribe
=TEXTO(A2;"mmmm")y arrastra hasta D8. - Selecciona
A1:D8y crea la tablaCalendario.
=AÑO(A2)
=MES(A2)
=TEXTO(A2;"mmmm")
| A | B | C | D | |
|---|---|---|---|---|
| 1 | Fecha | Año | Mes | NombreMes |
| 2 | 01/01/2026 | 2026 | 1 | Enero |
| 3 | 02/01/2026 | 2026 | 1 | Enero |
| 4 | 03/01/2026 | 2026 | 1 | Enero |
| 5 | 04/01/2026 | 2026 | 1 | Enero |
| 6 | 05/01/2026 | 2026 | 1 | Enero |
| 7 | 06/01/2026 | 2026 | 1 | Enero |
| 8 | 07/01/2026 | 2026 | 1 | Enero |
Cargar las tablas separadas en Power BI
Para crear el modelo en Power BI Desktop, abres Obtener datos > Excel y seleccionas Ventas_tienda.xlsx. Power Query importará la hoja Ventas; después duplicas consultas y reduces cada copia a su dimensión.
- Abre Power BI Desktop.
- Selecciona
Obtener datos > Excel. - Elige
Ventas_tienda.xlsx. - En el Navegador, abre la hoja
Ventas. - Pulsa
Transformar datos. - En Power Query, usa
Inicio > Eliminar filas > Eliminar duplicadosdonde corresponda. - Carga las cuatro tablas como consultas separadas.
- En Power BI, abre
Vista > Vista de modelo.
La hoja original queda intacta; las consultas de Power BI producen tablas que pueden actualizarse con Actualizar cuando cambien los datos.
Limpiar las tablas en Power Query
La limpieza debe dejar una clave única en cada dimensión. Si una fuente no trae IDCliente, puedes generar una clave suplente mediante Agregar columna > Columna de índice, pero debes deduplicar antes yymmetricar esa clave con la columna que se conservará.
| Consulta | Columnas conservadas | Transformación |
|---|---|---|
| Ventas | Todas | Estandarizar encabezados |
| Productos | IDProducto, NombreProducto | Eliminar duplicados |
| Clientes | IDCliente, Cliente, Ciudad | Eliminar duplicados |
| Calendario | Fecha y periodo | Conservar una fila por fecha |
Para estandarizar, ve a Inicio > Transformar > Dar formato a los datos y elige las opciones appropriately. Revisa los encabezados en Transformar > Usar la primera fila como encabezados.
Comprobar los tipos de las claves
En Power Query, ve a Vista > Mostrar vista sin datos o usa Editar > Detectar tipo de columna. Los tipos deben coincidir:
| Relación | Tipo en Ventas | Tipo en dimensión |
|---|---|---|
| IDProducto | Texto | Texto |
| IDCliente | Texto | Texto |
| Fecha | Fecha | Fecha |
P-01 es texto, no número. Si un lado contiene 2026 como número y el otro como texto, la relación no será válida.Conectar la tabla de hechos con sus dimensiones
En la vista de modelo de Power BI, arrastra IDProducto de Productos hasta IDProducto de Ventas. Repite con IDCliente y Fecha. Power BI detectará la cardinalidad y la dirección del filtro.
| Origen | Destino | Cardinalidad | Lado de filtro |
|---|---|---|---|
| Productos[IDProducto] | Ventas[IDProducto] | 1 a muchos | Productos a Ventas |
| Clientes[IDCliente] | Ventas[IDCliente] | 1 a muchos | Clientes a Ventas |
| Calendario[Fecha] | Ventas[Fecha] | 1 a muchos | Calendario a Ventas |
- Arrastra IDProducto hasta IDProducto.
- Repite la operación con IDCliente.
- Arrastra Fecha desde Calendario hasta Fecha de Ventas.
- Confirma que cada relación sea uno a muchos.
- Crea una medida:
Ventas Importe = SUM ( Ventas[Importe] ). - Coloca
Ciudad,NombreProductoyVentas Importeen un gráfico de columnas. - Filtra
Ciudadpor Medellin.
El total esperado es 111,50: 30,00 + 18,50 + 45,00 + 18,00. No son 150,00 porque C-02 no pertenece a Medellin.
Configurar la dirección del filtro
La dirección predeterminada de una relación uno a muchos filtra la tabla de hechos desde la dimensión. Es la opción adecuada para nuestro modelo.
- Selecciona la línea entre Clientes y Ventas.
- Abre
Editar relación. - Comprueba
Uno (1)en Clientes yVarios (*)en Ventas. - Mantén la dirección de filtro simple, de Clientes hacia Ventas.
- Cierra el cuadro.
- Vuelve a filtrar la ciudad.
| Configuración | Resultado esperado |
|---|---|
| Filtro simple | La ciudad de Clientes filtra Ventas |
| Filtro bidireccional | Puede ser útil, pero exige revisar su impacto |
| Relación Many-to-many | Puede aumentar filas yurring la cardinalidad |
Por qué los totales se duplican al modelar
La duplicación aparece cuando una venta encuentra más de una fila de dimensión. También puede ocurrir si la relación usa columnas incompatibles o si una dimensión contiene dos filas con la misma clave.
Un error típico es tener dos clientes con IDCliente C-01, ambos llamados Almacen Norte. Al relacionarlos, la venta C-01 coincide con dos filas y el total se multiplica.
| Problema | Síntoma | Corrección |
|---|---|---|
| Clave repetida | Importes inflados | Mantener una sola fila por clave |
| Relación incorrecta | Totales inesperados | Revisar cardinalidad y columnas |
| Datos descriptivos en Ventas | Repetición y ambigüedad | Moverlos a dimensiones |
| Datos sin relación | Registros excluidos | Crear clave y relación |
Repartir las ventas entre fechas y clientes
Supongamos que Clientes contiene dos filas C-01. Esa fila inválida hace que V-001 y V-005 se contabilicen dos veces.
| A | B | C | |
|---|---|---|---|
| 1 | IDCliente | Cliente | Ciudad |
| 2 | C-01 | almacen Norte | Medellin |
| 3 | C-02 | libreria Centro | Medellin |
| 4 | C-03 | papeleria Sur | Bogota |
| 5 | C-01 | almacen Norte | Medellin |
- En Clientes, selecciona A1:C5.
- Usa
Datos > Herramientas de datos > Eliminar duplicados. - Conserva solo las filas A2:C4.
- Reaplica o comprueba la relación con Ventas.
- Revisa que el filtro Medellin dé 111,50.
La misma revisión debe hacerse con Productos y Calendario: cada clave de dimensión debe ser única. Si una venta aparece duplicada en Ventas, corrige el origen antes de crear relaciones.
Qué conviene preparar antes de usar un modelo grande
Para.un conjunto pequeño, Power Query y Power BI Desktop permiten preparar el modelo directamente. Si el volumen crece, las actualizaciones se ralentizan o se necesitan dimensiones de variación lenta, conviene usar un almacén de datos con procesos de extracción, transformación y carga (ETL) y conectar después el modelo semántico.
| Necesidad | Preparación recomendada |
|---|---|
| Actualizaciones frecuentes | ETL programado |
| Historial de cambios de clientes o productos | Dimensión de variación lenta |
| Muchas fuentes | Consolidación antes del modelo |
| Gran volumen | Almacén de datos |
| Equipos de análisis | Modelo semántico publicado |
En Excel, Power Query no sustituye un almacén cuando los datos ya no caben cómodamente o las transformaciones requieren programmeación. Mantén las reglas de claves y tipos, pero mueve la preparación a una plataforma de datos. La guía oficial de Microsoft sobre esquema estrella en Power BI explica este enfoque.
Lo que ya sabes hacer con la tabla de hechos
- Identificar en una tabla de hechos los eventos medibles, sus claves y sus medidas.
- Separar Ventas de las dimensiones Productos, Clientes y Calendario.
- Definir una clave única para cada producto, cliente y fecha.
- Crear relaciones uno a muchos desde las dimensiones hacia Ventas.
- Filtrar ventas por ciudad, producto o periodo sin duplicar los importes.
- Detectar y corregir claves repetidas antes de crear el modelo.
- Preparar las tablas en Excel con Power Query y cargarlas en Power BI Desktop.
- Reconocer cuándo conviene trasladar la preparación ETL a un almacén de datos.
El siguiente paso es abrir Ventas_tienda.xlsx en Power BI Desktop, crear las tres relaciones y comprobar que el total de Ventas por ciudad coincide con los datos de origen. Los datos están comprobados en octubre de 2026.
Dudas al crear una tabla de hechos en Power BI
1. ¿Cómo se establecen relaciones entre tablas en Power BI?
En Power BI Desktop, abre Vista > Vista de modelo y arrastra la clave de cada dimensión hasta la columna equivalente de Ventas. Configura la relación como uno a varios, con la dimensión en el lado uno, y activa el filtro bidireccional solo si es necesario.
2. ¿Qué es una tabla de tiempo o calendario en Power BI?
Es la tabla de fechas que contiene una fila por día y columnas como año, mes, nombre del mes y trimestre. Se relaciona con Ventas mediante una clave de fecha, y permite filtrar y agrupar las ventas por cualquier periodo.
3. ¿Qué diferencia hay entre tablas de hechos y tablas relacionales en Power BI?
Las tablas de hechos guardan eventos medibles, como ventas, con claves y medidas numéricas. Las tablas de dimensiones guardan sus descripciones, como producto, cliente o fecha. Ambas se conectan mediante relaciones uno a muchos.
4. ¿Cómo creo una tabla de fechas en Power BI?
Puedes crearla con una columna de fecha continua y después enrichment columns, o generarla desde una tabla de fechas en Power Query. Debe incluir una fila por día y una clave compatible con la fecha usada en Ventas.
5. ¿Cómo funcionan las tablas relacionadas en Power BI?
Las tablas relacionadas permiten que un filtro de una dimensión afecte a los hechos. Por ejemplo, filtrar Clientes por una ciudad debe reducir las ventas de esa ciudad sin modificar la tabla Ventas ni duplicar su importe.
6. ¿Cómo puedo descargar una tabla de calendario para Power BI?
Exporta Calendario como archivo CSV desde Excel y, en Power BI Desktop, usa Obtener datos > Archivo de texto/CSV. Después comprueba que la columna de fecha tenga el tipo Fecha y que cubra todo el periodo de Ventas.
7. ¿Por qué se duplican los totales al crear relaciones en Power BI?
Suele ocurrir porque una dimensión contiene claves repetidas o porque se creó una relación incorrecta. Revisa la cardinalidad, la dirección del filtro y la unicidad de las claves; una venta debe relacionarse con una sola fila de cada dimensión.
Fuentes
- MicrosoftComprender el esquema de estrella y su importancia para Power BIconsultado el 28/10/2026
- MicrosoftPOTENCIA — documentación oficialconsultado el 28/10/2026
- MicrosoftPower Query (Obtener y transformar datos) — documentación oficialconsultado el 28/10/2026
- MicrosoftBUSCARV — documentación oficialconsultado el 28/10/2026
- MicrosoftCAMBIAR — documentación oficialconsultado el 28/10/2026