Calendarios personalizados

Hasta ahora hemos dado por supuesto que la jerarquía temporal según la cual queremos mostrar la información es la basada en años, trimestres, meses y días, y esto es lo que habitualmente vamos a querer. Sin embargo, habrá ocasiones en las que necesitemos trabajar con calendarios personalizados, por ejemplo, basándonos en semanas, períodos de quince días, etc.

Tenemos que entender que, en estos casos, las funciones de inteligencia de tiempo que ofrece DAX no van a servirnos. De hecho, el trabajar con calendarios personalizados nos va a obligar a definir nuestras propias funciones (para el cálculo de valores year-to-date, previous-year, etc.).

Esto, en primer lugar, nos obligaría a definir desde un punto de vista de negocio el calendario a utilizar, pues, sea cual sea éste, habrá consecuencias que tendremos que asumir. Por ejemplo, supongamos que queremos trabajar a nivel de semanas: ¿Cuándo empieza la primera semana del año? ¿El día 1 de enero? ¿O el lunes de la semana dentro de la cual cae el día 1 de enero? En 2023, por ejemplo, el día 1 es domingo. La primera semana de 2023 ¿se extiende desde el domingo 1 hasta el sábado 7? ¿o desde el lunes 26 de diciembre de 2022 hasta el domingo 1 de enero de 2023? De hecho, el estándar de calendario ISO 8601 -usado frecuentemente en Europa- define la primera semana del año como aquella que tiene la mayoría de días (cuatro o más) en el nuevo año. De modo que las opciones son varias…

Una vez tomadas estas decisiones, tendremos que llevar a la tabla calendario que estemos usando esta información creando nuevas columnas calculadas. Por ejemplo, si quisiéramos basarnos en el estándar ISO -y suponiendo que tengamos una tabla calendario denominada Calendario- podríamos añadirle las siguientes columnas calculadas:

Número de semana

ISO Week Number = WEEKNUM(Calendario[Date], 21)

Año

ISO Year Number = YEAR(Calendario[Date] + (3 - WEEKDAY(Calendario[Date], 3)))

Concatenación del número de semana y año

ISO Week = "W" & Calendario[ISO Week Number] & "-" & Calendario[ISO Year Number]

Nuestro calendario tendría ahora el siguiente aspecto:

Calendarios personalizados

Ahora, cada vez que necesitásemos evaluar una expresión modificando el contexto de filtro temporal y tal y como se ha comentado ya, deberíamos crear nosotros dichas funciones obteniendo el contexto inicial (por ejemplo, almacenando en variables el número de semana en la que nos encontramos, su primer y último día, etc.) y calculando el contexto de filtro final añadiendo semanas, expandiéndolo al año completo, etc.