Tema 1: Refinamiento del Modelado de Datos

Construyendo una base sólida para análisis potentes en Power BI.

1.1 Refinamiento de Modelos

Un modelo de datos limpio y eficiente es como tener los cimientos adecuados para un rascacielos. Antes de crear cualquier visualización, debemos "esculpir" nuestro modelo. El objetivo es simple: mantener solo lo esencial y asegurar que todo sea claro y comprensible.

Principio Clave: Carga solo los datos que necesitas y dales forma lo más cerca posible del origen, idealmente en Power Query, antes de que lleguen a tu modelo.

Visualizando el Cambio: Antes y Después

Observa la diferencia entre un modelo de datos "crudo" recién importado y uno refinado. Haz clic en los botones para alternar la vista.

Antes del Refinamiento

Tabla Ventas Brutas
ID_Venta, Fecha_Transaccion,
ID_Producto, ProductID_Legacy,
Columna_Nula_1, Cantidad,
Precio, vendedor_id

Mejores Prácticas para el Refinamiento:

  • Elimina lo Innecesario: En Power Query, quita las columnas que no usarás en tu análisis. Menos columnas significan un modelo más rápido y ligero.
  • Nombres Claros y Concisos: Renombra tablas y columnas con nombres descriptivos y amigables para el usuario (ej. `Fecha_Transaccion` a `Fecha`). Evita prefijos y sufijos técnicos.
  • Tipos de Datos Correctos: Asegúrate de que cada columna tenga el tipo de dato correcto (ej. Fecha, Número entero, Texto). Esto es crucial para los cálculos y las relaciones.
  • Oculta Claves Foráneas: En la vista de modelo de Power BI, oculta las columnas que solo se usan para crear relaciones (ej. `ID Producto` en la tabla de Ventas). Esto evita que los usuarios las usen por error en los gráficos, simplificando la experiencia.

1.2 Manejo de Relaciones

Las relaciones son las "autopistas" que conectan tus tablas, permitiendo que los filtros fluyan entre ellas. Entender cómo configurarlas correctamente es fundamental para que tu modelo funcione. La estructura ideal es un **modelo en estrella**, con tablas de hechos (números, transacciones) en el centro y tablas de dimensiones (texto, atributos) alrededor.

Relación Uno a Muchos (1:*)

Es la relación más común y recomendada. Una fila en una tabla de dimensión (como `Productos`) puede estar relacionada con muchas filas en una tabla de hechos (como `Ventas`).

Productos
ID Producto (1)
Nombre Producto
Categoría
Filtra
Ventas
ID Venta
ID Producto (*)
Cantidad

Ejemplo: Un producto puede ser vendido muchas veces, pero cada registro de venta corresponde a un único producto. Al filtrar por 'Laptop' en la tabla Productos, la tabla Ventas mostrará únicamente las ventas de laptops.

Relación Muchos a Muchos (*:*)

Esta relación es compleja y debe evitarse en la medida de lo posible. Ocurre cuando una fila en la Tabla A puede estar relacionada con muchas filas en la Tabla B, y viceversa. Por ejemplo, un estudiante puede estar en muchas clases, y una clase tiene muchos estudiantes.

El Problema y la Solución: La Tabla Puente

✗ Incorrecto

Estudiantes
ID Estudiante
*--*
Clases
ID Clase

✓ Correcto

Estudiantes
ID Estudiante
Inscripciones (Puente)
ID Estudiante
ID Clase
Clases
ID Clase

Solución: Se crea una tabla intermedia, llamada "tabla puente" o "bridge table" (en este caso, `Inscripciones`), que contiene una columna para la clave de cada tabla. Luego, se crean dos relaciones uno-a-muchos: `Estudiantes` → `Inscripciones` y `Clases` → `Inscripciones`. Esto resuelve la ambigüedad y permite un filtrado correcto.

1.3 Uso de Tablas de Calendario

Para cualquier tipo de análisis temporal (ventas por mes, comparativas anuales, etc.), es **indispensable** usar una tabla de calendario dedicada. No dependas de las fechas de tu tabla de hechos. Una tabla de calendario es una tabla separada que contiene una fila para cada día y columnas para atributos como Año, Mes, Día de la Semana, Trimestre, etc.

¡Advertencia! Sin una tabla de calendario, las funciones de inteligencia de tiempo de DAX (Time Intelligence) como `SAMEPERIODLASTYEAR` o `DATESYTD` no funcionarán correctamente o no funcionarán en absoluto.

¿Por qué es tan importante?

  • Continuidad de Fechas: Garantiza que tienes todos los días en tu rango, incluso si no hubo ventas ese día, lo cual es crucial para cálculos como promedios móviles.
  • Jerarquías y Atributos: Permite crear jerarquías (Año > Trimestre > Mes > Día) y añadir columnas personalizadas (ej. ¿Es fin de semana?, Semana Fiscal).
  • Rendimiento y Simplicidad: Simplifica tus fórmulas DAX y mejora el rendimiento del modelo al tener una única tabla para todo lo relacionado con fechas.

Cómo Crear una Tabla de Calendario

Puedes crearla usando DAX o Power Query (M). Ambas opciones son excelentes. A continuación, se muestran códigos base que puedes adaptar y copiar.

Calendario = 
ADDCOLUMNS (
    CALENDAR ( MIN ( Ventas[Fecha] ), MAX ( Ventas[Fecha] ) ),
    "Año", YEAR ( [Date] ),
    "Mes Num", MONTH ( [Date] ),
    "Nombre Mes", FORMAT ( [Date], "mmmm" ),
    "Día", DAY ( [Date] ),
    "Día Semana", WEEKDAY ( [Date], 2)
)