Creación de un calendario

Una de las preguntas más frecuentes relativas al calendario necesario para utilizar funciones de inteligencia de tiempo es ¿Es mejor crearlo externamente a Power BI? ¿O en el editor de consultas? ¿O tal vez con DAX?

En este escenario vamos a crear un calendario completo en DAX, incluyendo el número y nombre del mes, trimestre, día de la semana, etc.

Para comenzar, creamos la tabla con el calendario básico usando la función CALENDARAUTO. Esta función crea una tabla con una única columna con una secuencia de fechas cubriendo todas las fechas que aparezcan en nuestro conjunto de datos, por defecto desde el 1 de enero del primer año hasta el 31 de diciembre del último año:

Calendar = CALENDARAUTO()

Calendario creado con CALENDARAUTO

Sin embargo, queremos añadir a esta tabla básica otros campos, para lo que vamos a usar las siguientes funciones DAX (obsérvese en la imagen anterior que el campo creado recibe el nombre de "Date"):

  • Para crear el año: YEAR
  • Para crear el número de mes: MONTH
  • Para crear el número de día: DAY

Estos nuevos campos los vamos a añadir a la tabla básica usando la función ADDCOLUMNS:

Calendar = 
    ADDCOLUMNS(
        CALENDARAUTO();
        "Year"; YEAR([Date]);
        "Month"; MONTH([Date]);
        "Day"; DAY([Date])
    )

Campos para el año, número de mes y día del mes

Los nombres para el mes y el día de la semana podemos crearlos con la función FORMAT, y el número de la semana y el número de día de la semana con las funciones WEEKNUM y WEEKDAY, respectivamente:

Calendar = 
    ADDCOLUMNS(
        CALENDARAUTO();
        "Year"; YEAR([Date]);
        "Month"; MONTH([Date]);
        "Month Name"; FORMAT([Date]; "MMMM");
        "Week #"; WEEKNUM([Date]);
        "Day"; DAY([Date]);
        "Week Day"; WEEKDAY([Date]);
        "Day Name"; FORMAT([Date]; "DDDD")
    )

Campos para el nombre del mes y del día, el número de la semana y el número del día de la semana

Por último, para obtener el número de trimestre podemos recurrir a la fórmula:

CEILING(MONTH([Date])/3;1)

...que calcula el entero más próximo igual o superior al mes dividido entre 3 (con la función CEILING) .

Si quisiéramos también tener el equivalente precedido por una "Q", podemos volver a recurrir a la función FORMAT y al operador & que nos permite concatenar cadenas de texto:

Calendar = 
    ADDCOLUMNS(
        CALENDARAUTO();
        "Year"; YEAR([Date]);
        "Quarter #"; CEILING(MONTH([Date])/3;1);
        "Quarter"; "Q" & FORMAT(CEILING(MONTH([Date])/3;1); "#");
        "Month"; MONTH([Date]);
        "Month Name"; FORMAT([Date]; "MMMM");
        "Week #"; WEEKNUM([Date]);
        "Day"; DAY([Date]);
        "Week Day"; WEEKDAY([Date]);
        "Day Name"; FORMAT([Date]; "DDDD")
    )

Campos para el trimestre

 

Dificultad
Baja
Enviado por admin el Dom, 07/07/2019 - 18:20