es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

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.

Tags:  ,

Answer

  1. Avatar for 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:

    Últimos 3 valores = 
    VAR MAX_DATES = SUMMARIZE(facts, facts[segment], "max_date", MAX(facts[date]))
    VAR MIN_MAX_DATE = MINX(MAX_DATES, [max_date])
    VAR DATES = DATESINPERIOD(facts[date], MIN_MAX_DATE, -3,MONTH)
    RETURN CALCULATE([suma de valores], DATES)
    

    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.

Comments are closed.