Domina las Tablas Calendario con DAX en Power BI 📅

¡Crea una tabla calendario en Power BI con DAX y desbloquea el poder del Time Intelligence! Aprende a usar CALENDAR y CALENDARAUTO, configurar columnas, relacionar tablas y ordenar fechas correctamente. Descarga las tablas desde el enlace y optimiza tus reportes. 💻📊


Paso a Paso

Preparación: Importar datos 📥

Descarga el archivo de práctica (Excel) 3 Tablas Excel Relacionadas

.

En Power BI, ve a Inicio > Obtener Datos > Excel y carga las tablas:

  • Empleados: ID, Nombre, Departamento.
  • Productos: ID, NombreProducto, Precio.
  • Ventas: ID, Fecha, IDEmpleado, IDProducto, Cantidad.

Verifica en Vista de Modelo: Confirma las relaciones (Ventas[IDProducto] con Productos[ID], Ventas[IDEmpleado] con Empleados[ID]). 🎉


Paso 1: Identificar un error sin tabla calendario 📉

Muestra un problema común al no usar una tabla calendario.

Crea una tabla para medidas:

  • Ve a Inicio > Introducir Datos, crea una tabla llamada MedidasDAX y cárgala.

En MedidasDAX, haz clic derecho > Nueva Medida.

Nómbrala Suma Cantidades x Pro y escribe:

Suma Cantidad x Pro = 
SUM(T_Ventas[Cantidad]
)

Crea visualizaciones:

  • Inserta una Tabla: Arrastra NombreProducto (de Productos) y SumaCantidades.
  • Inserta un Gráfico de Áreas:
    • Eje X: Fecha (de Ventas), selecciona Día en la jerarquía.
    • Valores: SumaCantidades.
  • Inserta una Segmentación: Arrastra Fecha (de Ventas), selecciona Año y Mes.

Identifica el error:

  • Selecciona 2023 > Enero en la segmentación.
  • En el gráfico, ves días 10, 11, 15, pero faltan 12, 13, 14 (sin datos).
  • Problema: La tabla Ventas no tiene esas fechas, causando una visualización engañosa.
  • Solución: Una tabla calendario incluye todas las fechas, mostrando ceros para días sin datos. 🔍


Paso 2: Crear una tabla calendario con CALENDARAUTO 📆

Usa CALENDARAUTO para generar fechas automáticamente.

Ve a Inicio > Introducir Datos > Nueva Tabla.

Nómbrala Calendario y escribe:

Calendario = CALENDARAUTO()

  • Explicación: Genera una lista de fechas continuas desde el 01/01 del año mínimo (2023) hasta el 31/12 del año máximo (2024) basado en todas las columnas de tipo fecha en el modelo.

Presiona Enter, verifica en Vista de Datos: La tabla tiene una columna Date con fechas del 01/01/2023 al 31/12/2024.

Configura la columna:

  • Selecciona Date, asegura que el Tipo de Datos sea Fecha.

  • Cambia el Formato (opcional) a un estilo claro, como dd/mm/yyyy.

Nota: CALENDARAUTO puede incluir años no deseados (por ejemplo, fechas de nacimiento en Empleados). Si hay múltiples columnas de fecha, usa CALENDAR (Paso 3). ⚠️


Paso 3: Crear una tabla calendario con CALENDAR 🎯

Define fechas específicas con CALENDAR para mayor control.

Elimina la tabla Calendario anterior (haz clic en los 3 puntos > Eliminar del modelo).

Ve a Inicio > Introducir Datos > Nueva Tabla.

Nómbrala Calendario y escribe:

  Calendario = CALENDAR(DATE(YEAR(MIN(T_Ventas[Fecha])),1,1),
DATE(YEAR(MAX(T_Ventas[Fecha])),12,31))
  • Explicación:
    • MIN(Ventas[Fecha]): Fecha mínima (06/01/2023).
    • MAX(Ventas[Fecha]): Fecha máxima (30/12/2024).
    • DATE(YEAR(…), 1, 1): Establece el 01/01 del año mínimo (01/01/2023).
    • DATE(YEAR(…), 12, 31): Establece el 31/12 del año máximo (31/12/2024).
  • Genera fechas continuas desde 01/01/2023 hasta 31/12/2024.

Presiona Enter, verifica en Vista de Datos: Confirma fechas desde 01/01/2023 al 31/12/2024.

Configura la columna Date:

  • Tipo de Datos: Fecha.
  • Formato: dd/mm/yyyy (o el deseado). 😄


Paso 4: Añadir columnas derivadas con DAX 📋

Agrega columnas para análisis temporal (año, mes, etc.).

Opción 1: Crear columnas manualmente

En Calendario, haz clic derecho > Nueva Columna.

Añade columnas como:

  • Año:
    DAX Año = YEAR(Calendario[Date])
  • Mes (número):
    DAX Mes# = MONTH(Calendario[Date])
  • Mes (texto):
    DAX Mes = FORMAT(Calendario[Date], "mmmm")
  • Día:
    DAX Día# = DAY(Calendario[Date])
  • Día de la semana:
    DAX DíaSemana# = WEEKDAY(Calendario[Date], 2) // 1=Lunes, 7=Domingo
  • Nombre del día:
    DAX DíaSemana = FORMAT(Calendario[Date], "dddd")
  • Trimestre:
    DAX Trimestre# = QUARTER(Calendario[Date])

Opción 2: Usar script DAX predefinido

Descarga el script DAX Calendario .TXT ⬇️

Elimina la tabla Calendario anterior.

Ve a Inicio > Nueva Tabla, pega el script y ajusta:

  • Cambia las referencias de la tabla y columna de fecha (por ejemplo, Ventas[Fecha]) en las líneas de MIN y MAX.
  • Ejemplo de script (simplificado):

Calendario DAX = ADDCOLUMNS (
CALENDAR ( DATE( YEAR ( MIN (T_Ventas[Fecha])), 01, 01), DATE( YEAR( MAX(T_Ventas[Fecha]) ), 12, 31 ) ),

"FechaSK", FORMAT ( [Date], "YYYYMMDD" ),
"#A o", YEAR ( [Date] ),
"#Trimestre", QUARTER ( [Date] ),
"#Mes", MONTH ( [Date] ),
"#D a", DAY ( [Date] ),
"Trimestre", "T" & FORMAT ( [Date], "Q" ),
"Mes", FORMAT ( [Date], "MMMM" ),
"MesCorto", FORMAT ( [Date], "MMM" ),
"#D aSemana", WEEKDAY ( [Date],2 ),
"#SemanaA o", WEEKNUM ( [Date],2 ),
"CierreSemana", ( [Date] + 7 - WEEKDAY( [Date],2 ) ),
"D a", FORMAT ( [Date], "DDDD" ),
"D aCorto", FORMAT ( [Date], "DDD" ),
"A oTrimestre", FORMAT ( [Date], "YYYY" ) & "/T" & FORMAT ( [Date], "Q" ),
"A o#Mes", FORMAT ( [Date], "YYYY/MM" ),
"A oMesCorto", FORMAT ( [Date], "YYYY/mmm" ),
"InicioMes", EOMONTH( [Date], -1) + 1,
"FinMes", EOMONTH( [Date], 0) )

Presiona Enter, verifica en Vista de Datos: Todas las columnas (Año, Mes#, Mes, etc.) están creadas.

Renombra la columna Date a Fecha: Haz doble clic y escribe Fecha.


Paso 5: Marcar como tabla de fechas ⚙️

Habilita funciones de Time Intelligence.

  • En Vista de Datos, selecciona la tabla Calendario.
  • Ve a la pestaña Tabla > Marcar como tabla de fechas.
  • En el cuadro de diálogo, selecciona la columna Fecha como la columna de fecha.
  • Haz clic en Guardar. 🌟

Paso 6: Relacionar la tabla calendario 🔗

Conecta la tabla calendario con Ventas.

  • Ve a Vista de Modelo.
  • Arrastra Fecha (de Calendario) a Fecha (de Ventas).

  • Confirma la relación 1 a muchos (una fecha en Calendario puede tener múltiples ventas en Ventas)

  • Oculta columnas innecesarias:
  • En Ventas, haz clic en Fecha, IDEmpleado, IDProducto, ID > Ocultar de la vista de informes.
  • Esto evita usar columnas de Ventas directamente en visualizaciones. 😎


Paso 7: Ordenar meses y configurar columnas 📑

Asegura un orden lógico y evita sumas automáticas.

Ordenar meses:

  • En Vista de Datos, selecciona la columna Mes (texto).
  • Ve a Columna > Ordenar por columna > Selecciona Mes#.
  • Esto ordena Enero, Febrero, Marzo (no alfabéticamente como Abril, Enero).

Configurar columnas numéricas:

  • Selecciona columnas como Año, Mes#, Día#, DíaSemana#, Trimestre#.
  • En Propiedades, establece Resumir por a No resumir para evitar sumas automáticas en visualizaciones.


Paso 8: Corregir el gráfico de áreas 📈

Ajusta la medida para mostrar ceros en días sin datos.

Modifica la medida SumaCantidades:

  • En MedidasDAX, haz clic en SumaCantidades y edita:

Suma Cantidad x Pro =
IF(ISBLANK(SUM(T_Ventas[Cantidad])),0,
SUM(T_Ventas[Cantidad])
)

Explicación: Si la suma es vacía (sin datos), devuelve 0; si no, calcula la suma.


Paso 9: Validar la visualización 🖼️

Confirma que el gráfico refleja datos correctamente.

Cambia de mes en la segmentación (por ejemplo, Febrero, Diciembre).

Observa:

  • Meses con datos muestran valores correctos.
  • Meses sin datos (como Diciembre) muestran ceros.
  • El gráfico de áreas o columnas incluye todos los días, manteniendo consistencia visual.

Ajusta FechaSK si es necesario (por ejemplo, usa solo Día# y ordénalo por Fecha). 😄


Cierre 🎬

¡Increíble! 🎉 Ahora dominas la creación de tablas calendario con DAX usando CALENDAR y CALENDARAUTO, y sabes cómo relacionarlas, ordenarlas y corregir errores visuales. Practica con las tablas descargadas y prepárate para el próximo video, donde crearemos la misma tabla con Power Query. ¿Dudas? Déjalas en los comentarios. ¡Nos vemos en el próximo capítulo! 👋

Módulo 10: La Tabla de Calendario con DAX y M

3 Tablas Excel Relacionadas
DAX Calendario .TXT

Related Articles

Responses

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *