Calcular la suma acumulada de DAX.
Tengo un problema con el cálculo de una medida que suma valores para 3 períodos previos. Adjunto una tabla de hechos de muestra y una tabla de diccionarios para mostrar el problema que estoy enfrentando.
Tabla de hechos:
Fecha | Cliente | Segmento | Valor |
---|---|---|---|
01.01.2021 | 1 | A | 10 |
02.01.2021 | 1 | A | 10 |
03.01.2021 | 1 | A | 10 |
04.01.2021 | 1 | A | 10 |
01.01.2021 | 2 | B | 20 |
02.01.2021 | 2 | B | 30 |
03.01.2021 | 2 | B | 40 |
Tabla de diccionarios:
Segmento | Descripción del segmento |
---|---|
A | Nombre de A |
B | Nombre de B |
El enfoque que he tomado es el siguiente:
last 3 value =
VAR DATES = DATESINPERIOD(facts[date],LASTDATE(facts[date]), -3,MONTH)
RETURN CALCULATE([sum value], DATES)
Esto produce resultados correctos siempre y cuando haya al menos un registro para abril. Cuando uso un filtro en la descripción del segmento “B”, produce el resultado que adjunto – por lo que vemos que el resultado en abril es 20, lo que obviamente no es lo que quería. Esperaría que fuera 50.
davy.ai
El problema con el enfoque actual es que sólo considera los últimos 3 meses basados en la última fecha en la tabla de hechos, sin importar si hay o no datos para esos meses. Para resolver este problema, podemos modificar la función DATESINPERIOD para considerar los últimos 3 meses para los cuales tenemos datos. Esto se puede lograr calculando la fecha máxima en la tabla de hechos para cada segmento, y luego usando esa fecha como fecha de finalización para la función DATESINPERIOD. Aquí está la medida modificada:
Explicación:
– La primera variable (MAX_DATES) calcula la fecha máxima para cada segmento utilizando la función SUMMARIZE.
– La segunda variable (MIN_MAX_DATE) calcula el mínimo de las fechas máximas para todos los segmentos, lo que nos da la fecha más reciente para la cual tenemos datos en todos los segmentos.
– La tercera variable (DATES) utiliza la fecha más reciente como fecha de finalización para la función DATESINPERIOD, para asegurarse de que sólo consideramos los últimos 3 meses para los cuales tenemos datos.
– Finalmente, usamos la función CALCULATE para calcular la suma de valores en los últimos 3 meses.