SunFruits Exports
POWER BI · INTERMEDIO–AVANZADO
Programa Power BI para SunFruits Exports · Módulo 1 · Día 3

Sesión 3
Modelado:
esquema estrella

Hechos y dimensiones, relaciones, cardinalidad y tabla calendario

Bloque A · Esquema estrella Bloque B · Relaciones y calendario

2 horas · 2 bloques de 45 min · nivel intermedio–avanzado

Mapa de la sesión

🅰 Bloque A — 45 min

Esquema estrella

  • Por qué modelar (tabla plana vs modelo)
  • Hechos vs Dimensiones
  • El esquema estrella y la granularidad
  • Normalización vs desnormalización
  • El modelo objetivo de SunFruits

🅱 Bloque B — 45 min

Relaciones y calendario

  • Crear relaciones y cardinalidad
  • Dirección del filtro
  • Relaciones activas/inactivas y USERELATIONSHIP
  • Tabla Calendario con DAX
  • Marcar como tabla de fechas

Partimos de la consulta Ventas y las dimensiones de la Sesión 2.

Objetivos de aprendizaje

Al terminar la sesión vas a poder…

Diseñar

Clasificar tus tablas en hechos y dimensiones y armar un esquema estrella.

Relacionar

Crear relaciones con la cardinalidad y dirección de filtro correctas.

Fechar

Construir y marcar una tabla Calendario para análisis temporal.

💡 Idea fuerza de la sesión

El modelo NO es "juntar todo en una tabla". Es separar lo que mides (hechos) de lo que describe (dimensiones), y conectarlos bien. De eso depende que el DAX sea simple y el reporte rápido.

De dónde venimos (Sesión 2)

Ya tienes

  • Una tabla Ventas limpia (~4.000 filas)
  • Dimensiones: Clientes, Productos, Fundos
  • TipoCambio y Costos listos

Lo que falta

Las tablas están sueltas. Un visual que cruce ventas con producto o cliente aún no funciona bien.

Hoy las conectamos en un modelo coherente.

Bloque A · 45 min

El esquema estrella

Hechos, dimensiones y granularidad

¿Por qué no una sola tabla plana?

Tabla plana (todo junto)

  • Datos repetidos en millones de filas
  • Modelo pesado y lento
  • DAX enredado y frágil
  • Difícil de mantener

Modelo en estrella

  • Cada cosa en su tabla, sin repetir
  • Compresión y rendimiento óptimos
  • DAX simple y predecible
  • Escala y se mantiene fácil

Hechos vs Dimensiones

Hechos (Fact)

Registran eventos y números a medir: ventas, kg, montos.

  • Muchas filas, crecen en el tiempo
  • Guardan claves + medidas numéricas
  • SunFruits: Ventas

Dimensiones (Dimension)

Describen el contexto: quién, qué, dónde, cuándo.

  • Pocas filas, una clave única
  • Sirven para filtrar y agrupar
  • SunFruits: Clientes, Productos, Fundos, Calendario

Las dimensiones filtran y agrupan; los hechos se suman.

El esquema estrella

Un hecho central rodeado de dimensiones, conectados por relaciones 1 a muchos.

  • La "estrella" = hecho al centro, dims alrededor
  • El lado "uno" siempre es dimensión
  • El lado "muchos" siempre es el hecho
Ilustración de un esquema estrella
Esquema estrella: hecho + dimensiones · Microsoft Learn

Granularidad — el nivel de detalle

La granularidad es a qué nivel guarda cada fila el hecho. Debe ser consistente.

En SunFruits

Cada fila de Ventas = una línea de pedido (orden + producto). Esa es nuestra granularidad.

Regla

  • No mezcles niveles (líneas con totales)
  • Si necesitas otro nivel, usa otra tabla (ej. Metas por mes/producto)
  • Las dimensiones describen ese grano

Normalización vs desnormalización

El hecho guarda solo claves

Normalizado: Ventas guarda la clave de producto, no su nombre/categoría.

Datos normalizados

La dimensión guarda el detalle

Desnormalizado: una sola dimensión Producto con nombre, categoría, color… (mejor que un copo de nieve).

Datos desnormalizados

En BI: hechos normalizados (claves) + dimensiones desnormalizadas y planas. Evita el "copo de nieve".

El modelo objetivo de SunFruits

Clientes
cliente, país, región
Calendario
fecha, año, mes
Productos
producto, variedad, categoría
TipoCambio
periodo, USD_PEN
VENTAS
claves + Cajas, Kg, Monto
Fundos
fundo, ubicación, ha

Hecho al centro; cada dimensión se relaciona 1→* con Ventas. Metas queda como tabla aparte para comparativas.

Bloque B · 45 min

Relaciones y
tabla calendario

Cardinalidad, dirección de filtro y tiempo

La vista Modelo y crear relaciones

En la vista Modelo ves todas las tablas y sus relaciones como un diagrama.

  • Arrastra una columna de una tabla a la de otra para crear la relación.
  • O usa Modelado → Administrar relaciones → Nueva.
  • Power BI suele autodetectar por nombre de columna.
Crear relación en Power BI
Crear y administrar relaciones · Microsoft Learn

Opciones de una relación

Opciones de relación: cardinalidad y dirección
Cardinalidad y dirección de filtro · Microsoft Learn

Al crear/editar una relación defines:

  • Cardinalidad (1:*, 1:1, *:*)
  • Dirección del filtro (única / ambas)
  • Activa (sí/no)

Al menos una de las tablas debe tener la clave con valores únicos.

Cardinalidad

TipoSignificadoEn SunFruits
Uno a muchos (1:*)La más común. Un valor en la dimensión, muchos en el hecho.Productos (1) → Ventas (*)
Uno a uno (1:1)Un valor único en ambos lados.Casos puntuales / degeneradas
Muchos a muchos (*:*)Sin unicidad; úsala con cuidado.Evítala salvo necesidad real

Regla de oro: el lado "uno" es la dimensión; el lado "muchos" es el hecho.

Dirección del filtro

El filtro fluye de la dimensión hacia el hecho.

  • Única (single): lo recomendado en estrella. La dimensión filtra al hecho.
  • Ambas (both): bidireccional. Útil en casos puntuales, pero genera ambigüedad y problemas con RLS.

Por defecto, déjalo en Única.

Dirección de filtro en esquema estrella
Filtrado cruzado en estrella · Microsoft Learn

Relaciones activas e inactivas

Administrar relaciones, activa
Solo una relación activa entre dos tablas · Microsoft Learn

Entre dos tablas solo puede haber una relación activa. Las demás quedan inactivas (línea punteada).

Para usar una inactiva en una medida, se activa con USERELATIONSHIP.

// Monto por Fecha Embarque (relación inactiva)
Monto x Embarque =
CALCULATE(
  [Monto USD],
  USERELATIONSHIP(
    Ventas[Fecha Embarque],
    Calendario[Date]))

Dimensión "role-playing": Fecha Pedido vs Embarque

Ventas tiene dos fechas: Fecha Pedido y Fecha Embarque. Ambas apuntan al Calendario.

  • Relación activa: Fecha Pedido ↔ Calendario.
  • Relación inactiva: Fecha Embarque ↔ Calendario (se usa con USERELATIONSHIP).
  • Alternativa: una segunda tabla Calendario (Calendario Embarque).
Dimensión role-playing de fecha
Una dimensión Fecha con varias relaciones · Microsoft Learn

¿Por qué una tabla Calendario propia?

Sin tabla Calendario

  • Dependes de la jerarquía automática de fechas
  • No puedes comparar periodos fácilmente
  • Sin meses/trimestres sin ventas

Con tabla Calendario

  • Fechas continuas (sin huecos)
  • Time intelligence: YTD, YoY, MTD
  • Año, Mes, Trimestre listos para agrupar
  • Una sola fuente de tiempo para todo el modelo

Crear el Calendario con DAX

Tabla calculada con CALENDAR y columnas de apoyo.

Calendario =
ADDCOLUMNS(
    CALENDAR(DATE(2023,1,1), DATE(2026,12,31)),
    "Año",        YEAR([Date]),
    "NumMes",     MONTH([Date]),
    "Mes",        FORMAT([Date], "MMM"),
    "Trimestre",  "T" & QUARTER([Date]),
    "AñoMes",     FORMAT([Date], "yyyy-MM")
)

CALENDARAUTO() detecta el rango automáticamente; CALENDAR(inicio, fin) te da control explícito.

Marcar como tabla de fechas

Tras crear el Calendario, márcalo como tabla de fechas para que el time intelligence funcione bien.

  • Herramientas de tabla → Marcar como tabla de fechas.
  • Elige la columna de fecha (única y continua).
  • Relaciónalo con Ventas[Fecha Pedido].
Diálogo Marcar como tabla de fechas
Mark as date table · Microsoft Learn

Buenas prácticas de modelado

Estructura

  • Estrella, no copo de nieve
  • Una tabla = hecho o dimensión (no mezclar)
  • Tabla Calendario marcada y continua
  • Granularidad consistente en el hecho

Relaciones

  • 1:* con la dimensión en el lado "uno"
  • Dirección de filtro: Única por defecto
  • Oculta columnas clave del hecho
  • Evita *:* y "Ambos" salvo necesidad

🛠 Taller de la sesión

Parte 1 — Estrella

  • Carga Ventas + Clientes, Productos, Fundos.
  • Crea relaciones 1:* de cada dimensión hacia Ventas.
  • Verifica cardinalidad y dirección Única.

Parte 2 — Calendario

  • Crea la tabla Calendario con DAX y márcala como tabla de fechas.
  • Relación activa con Fecha Pedido; inactiva con Fecha Embarque.
  • Medida "Monto x Embarque" con USERELATIONSHIP.

Resumen — puntos importantes

🅰 Esquema estrella

  • Hechos (se suman) vs Dimensiones (filtran/agrupan)
  • Hecho normalizado (claves) + dims planas
  • Granularidad consistente
  • Estrella, no copo de nieve

🅱 Relaciones y calendario

  • 1:* con la dimensión en el lado "uno"
  • Dirección de filtro Única por defecto
  • Solo una relación activa; el resto con USERELATIONSHIP
  • Tabla Calendario marcada para time intelligence

🎯 Si te llevas una sola idea: un buen modelo en estrella hace que el DAX sea fácil. Si tu DAX se complica, casi siempre el problema está en el modelo.

Preguntas de repaso

Verifiquemos lo aprendido en esta sesión

1

¿Qué diferencia a una tabla de hechos de una dimensión?

2

En una relación 1:*, ¿de qué lado va la dimensión y de qué lado el hecho?

3

¿Por qué conviene una tabla Calendario propia en vez de usar la fecha del hecho?

4

Si analizo ventas por Fecha Pedido y por Fecha Embarque, ¿cómo lo resuelvo con una sola Calendario?

5

¿Qué riesgo trae abusar de la dirección de filtro "Ambos"?

Sun Fruits Exports · Programa Power BI

¡Gracias!

Gracias al equipo de SunFruits por su tiempo y participación

Edwin Barrientos Retuerto

Arquitecto de Inteligencia de Negocios & Cloud · Instructor

🌐 blog.arquitecturabi.pe

Nos vemos en la Sesión 4 — DAX: fundamentos y CALCULATE

1 / 26