Earn a 50% discount on the DP-600 certification exam by completing the Fabric 30 Days to Learn It challenge.
Hola, estoy tratando de crear un promedio móvil de 7 días mientras excluyo los días en los que no trabajamos. Estoy usando la siguiente expresión DAX:
7 Day Rolling Average =
Calculate(Sum('Daily Production'[Lbs]),DATESINPERIOD('Daily Production'[Date_1], LASTDATE('Daily Production'[Date_1]),7,DAY))
/
Calculate(DISTINCTCOUNT('Daily Production'[Date_1]),DATESINPERIOD('Daily Production'[Date_1],LASTDATE('Daily Production'[Date_1]),7,DAY))
Captura de pantalla de datos:
Como puede ver, el promedio móvil también tiene en cuenta los campos en blanco. Necesito ayuda para filtrar esta expresión para excluir filas donde no hay nada en la columna "Trabajado".
Hola @amitchandak , pude modificar otra expresión que encontré en el foro y obtuve el resultado que estaba buscando.
7 Day rolling Average =
var __workingDays = 7
var __currentDay = MAX( 'Daily Production'[Date Worked] )
var __daysToAvgOver =
TOPN(__workingDays,
CALCULATETABLE(
'Daily Production',
'Daily Production'[Date Worked] < __currentDay,
'Daily Production'[Worked] = 1,
ALL( 'Daily Production' )
),
'Daily Production'[Date Worked],
DESC
)
var __avg =
DIVIDE(
CALCULATE(
SUM( 'Daily Production'[Lbs] ),
__daysToAvgOver
),
COUNTROWS( __daysToAvgOver )
)
return
__avg
Hola @amitchandak , no tengo una columna para empleado. Creé una columna de rango usando la siguiente expresión:
Date Rank =
var _rank=RANKX(FILTER('Daily Production',[Date Worked]<>BLANK()),[Date Worked],,ASC,Dense)
return
IF('Daily Production'[Worked]=BLANK(),BLANK(),_rank)
He modificado la expresión que usted sugirió:
7 Day rolling Average =
CALCULATE(Averagex(Values('Daily Production'[Date Worked]) ,calculate(Sum('Daily Production'[Lbs]))),
WINDOW(-6,REL, 0, REL, ALLSELECTED('Daily Production'[Date Worked]),ORDERBY([Date Worked],asc)))
Resultado:
@JWPowder , Suponga que tiene empleado y bandera de trabajo.
Primero crea un rango
Rank WD = if([Trabajado] <> Blank(), Rankx(filter('Daily Production', [Employee] = before([Employee]) && [Worked] =1), [Date]), blank())
Crear una medida como
Rolling 7 WD = CALCULATE(Averagex(Values('Daily Production'[Date]) ,calculate(Sum('Daily Production'[Lbs]))), WINDOW(-6,REL, 0, REL, ALLSELECTED('Daily Production'[Date] , 'Daily Production'[Employee] ),ORDERBY([Date],asc),,PARTITIONBY('Daily Production'[Employee]))