Cálculo del año y mes fiscal correspondientes a cada fecha

En este escenario partimos de una tabla calendario en la que se incluyen campos para el año y el número de mes:

Tabla calendario

El objetivo es añadir una columna con el año fiscal y otra con el mes fiscal. Para esto vamos a suponer que el mes en el que termina el año fiscal es marzo (tercer mes del año), lo que podremos modificar en cada bloque de código fácilmente.

Para el cálculo del año fiscal vamos a comparar el mes incluido en cada fila con el mes en el que termina el año fiscal: si es superior, sumaremos 1 al valor del año:

FY = 
    VAR
        UltimoMes = 3
    RETURN
        'Calendar'[Año] + 
        IF(
            MONTH('Calendar'[Date]) > UltimoMes;
            1;
            0
        )

Calendario con el campo correspondiente al año fiscal

En el código anterior definimos la variable "UltimoMes" con el valor correspondiente al último mes del año fiscal (3) usando la función VAR, y devolvemos el valor del campo Año sumándole 1 o no en función de que el mes de la fecha sea o no superior al último mes del año fiscal. Para esto extraemos el mes de la fecha con la función MONTH y realizamos la comparación con IF. En la imagen anterior se muestran fechas de marzo y abril para ver el salto de un período al otro.

Un par de notas interesantes: Los nombres de las variables no pueden contener espacios, guiones, vocales acentuadas... de ahí el nombre de "UltimoMes". Y observa que es posible incrustar una función (IF, en este caso) donde se espera un valor númerico (siempre que la función devuelva un valor adecuado).

Para añadir el mes fiscal, podemos restar al mes de la fecha (que extraeremos con la función MONTH) el último mes del año fiscal. Esto devolverá un número positivo para los meses posteriores a éste (abril = 1, mayo = 2...), pero un número negativo o cero para los anteriores (enero = -2, febrero = -1 y marzo = 0). Para solucionar esto podemos simplemente calcular el módulo de la resta y 12 usando la función MOD y sumando 1 al resultado (el módulo devolverá cero para marzo, por ejemplo):

FM = 
    VAR
        UltimoMes = 3
    RETURN
        MOD(MONTH('Calendar'[Date]) - UltimoMes; 12) + 1

Calendario con el campo correspondiente al mes fiscal

 

Funciones DAX involucradas
Enviado por admin el Mar, 09/07/2019 - 13:01