Cálculo de 12 meses consecutivos

Un usuario Pregunto ✅

Chetanrajhans

Hola

Estoy tratando de calcular la plantilla continua de 12 meses utilizando la siguiente fórmula DAX, tengo datos en formato de serie de tiempo mensual con fecha ref columna para la fecha de fin de mes de cada mes para cada registro y he creado un calendario en mis datos usando la función calendarAuto ().

Ejecución de la plantilla =
CALCULAR (
SUMX (Employee_Details, Employee_Details[HeadCount] ),
FILTRO (
TODOS (Employee_Details[DateRef] ),
Y (
Detalles sobre empleados[DateRef] <= MAX ('Calendario'[Date] ),
DATEADD (‘Calendario'[Date], 12, MES)> MAX (‘Calendario'[Date] ))))

Esta fórmula calcula los números correctos hasta diciembre de 2019, pero para 2020 da un número incorrecto, por ejemplo, la plantilla acumulada de enero de 20 debe ser de febrero de 19 a enero de 20, pero la fórmula se calcula solo para febrero de 19 hasta diciembre de 2019 y pronto

A continuación se muestra el cálculo real que se realiza por medida y muestra de cómo se ven mis datos

Cálculo de medidas

DateRef HeadCount Rolling 12 Month (DAX) Rolling 12 meses (Excel) Cheque
30-01-18 0:00 7610 88885 88885 CIERTO
28-02-18 0:00 7715 89070 89070 CIERTO
30-03-18 0:00 7945 89638 89638 CIERTO
30-04-18 0:00 8203 90552 90552 CIERTO
30-05-18 0:00 8450 91796 91796 CIERTO
30-06-18 0:00 8809 93360 93360 CIERTO
30-07-18 0:00 9322 95359 95359 CIERTO
30-08-18 0:00 9678 97608 97608 CIERTO
30-09-18 0:00 9979 100146 100146 CIERTO
30-10-18 0:00 10077 102764 102764 CIERTO
30-11-18 0:00 10063 105367 105367 CIERTO
30-12-18 0:00 10342 108193 108193 CIERTO
30-01-19 0:00 10394 110977 110977 CIERTO
28-02-19 0:00 10486 113748 113748 CIERTO
30-03-19 0:00 10623 116426 116426 CIERTO
30-04-19 0:00 10762 118985 118985 CIERTO
30-05-19 0:00 10932 121467 121467 CIERTO
30-06-19 0:00 11292 123950 123950 CIERTO
30-07-19 0:00 11765 126393 126393 CIERTO
30-08-19 0:00 12344 129059 129059 CIERTO
30-09-19 0:00 12841 131921 131921 CIERTO
30-10-19 0:00 12826 134670 134670 CIERTO
30-11-19 0:00 12836 137443 137443 CIERTO
30-12-19 0:00 12881 139982 139982 CIERTO
30-01-20 0:00 12857 129588 142445 FALSO
28-02-20 0:00 12816 119102 144775 FALSO
30-03-20 0:00 12791 108479 146943 FALSO
30-04-20 0:00 12831 97717 149012 FALSO

Data de muestra

ID de empleado Etiqueta del mes Etiqueta de año Fecha Ref Etiqueta HC-Ex Recuento
1 ene 2019 31-01-19 HC 1
2 ene 2019 31-01-19 HC 1
3 ene 2019 31-01-19 HC 1
4 ene 2019 31-01-19 HC 1
5 ene 2019 31-01-19 Ex 0
1 feb 2019 28-02-19 HC 1
2 feb 2019 28-02-19 HC 1
3 feb 2019 28-02-19 HC 1
4 feb 2019 28-02-19 Ex 0
1 mar 2019 31-03-19 HC 1
2 mar 2019 31-03-19 HC 1
3 mar 2019 31-03-19 HC 1

Mariusz

Hola @Chetanrajhans

Prueba esto.

Measure = 
CALCULATE(
    SUM( 'Table'[HeadCount] ),
    DATESINPERIOD( 'Table'[DateRef], MAX( 'Table'[DateRef] ), -12,  MONTH )
)

Atentamente,
Mariusz

Si esta publicación ayuda, entonces por favor considere Aceptándolo como la solución.

No dude en conectarse conmigo.
LinkedIn

Anónimo

// A proper Calendar table marked as the date table
// must be present for this to work correctly.
// It must be connected to the FactTable and 
// slicing must be done only through dimensions.
// In a word, all the best practices must be
// followed in the model.

HeadCount L12M = 
var __lastVisibleDate = LASTDATE( 'Calendar'[Date] )
var __canMove12MBack =
	NOT ISBLANK( dateadd( __lastVisibleDate, -1, Year) )
var __result =
	CALCULATE(
	    SUM( FactTable[HeadCount] ),
	    DATESINPERIOD(
	    	Calendar[Date],
	    	__lastVisibleDate,
	    	-1,
	    	Year
	    )
	)	
return
if( __canMove12MBack, __result )

Aquí hay algo sobre los diseños adecuados y la información sobre el tiempo:

https://www.sqlbi.com/tv/time-intelligence-in-microsoft-power-bi/

Mejor

D

emilyzhu49

En respuesta a Anónimo

¡Esto es perfecto! ¡Gracias!

Mariusz

Hola @Chetanrajhans

Prueba esto.

Measure = 
CALCULATE(
    SUM( 'Table'[HeadCount] ),
    DATESINPERIOD( 'Table'[DateRef], MAX( 'Table'[DateRef] ), -12,  MONTH )
)

Atentamente,
Mariusz

Si esta publicación ayuda, entonces por favor considere Aceptándolo como la solución.

No dude en conectarse conmigo.
LinkedIn

Anónimo

En respuesta a Mariusz

@Mariusz, esta medida no es correcta y devolverá resultados incorrectos antes de que te des cuenta. Al calcular el promedio móvil de 12M, debe asegurarse de que haya suficientes días en el calendario para cubrir 12M. Si no, entonces el promedio no cubre 12M y debería NO ser calculado.

Entonces, en una palabra, para hacer esto correctamente, TENGO tener un Calendario adecuado en el modelo. Vea la medida que escribí para más detalles.

Mejor
D

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *