Earn a 50% discount on the DP-600 certification exam by completing the Fabric 30 Days to Learn It challenge.
Hola equipo,
¿Cómo puedo calcular el promedio en el siguiente escenario:
Nombre | Estado | Fecha |
ABC1 | S1 | 1/15/2018 |
ABC1 | S2 | 2/1/2018 |
ABC1 | S3 | 2/5/2018 |
ABC1 | S5 | 4/2/2018 |
ABC2 | S1 | 2/3/2018 |
ABC2 | S2 | 3/19/2018 |
ABC2 | S3 | 4/23/2018 |
ABC2 | S4 | 4/29/2018 |
ABC2 | S5 | 5/3/2018 |
En este caso, el número medio de días debe calcularse entre S3 y S5, si S4 no está disponible. Si S4 está presente, el promedio de días debe estar entre S4 y S5. ¿Cómo puedo escribir una sola medida para esto?
En el ejemplo anterior, la salida será: Diferencia de fecha entre S3 y S5 a 56 días y Diferencia de fecha entre S4 y S5 a 4 días. Promedio final (56+4)/2 a 30 días
Hola @pbiguru999 ,
Cree una columna calculada como se muestra a continuación:
S4 search = SEARCH("S4",'Table'[Status],1,0)
A continuación, cree 2 medidas como se indica a continuación:
Measure =
var _datediff1=DATEDIFF(CALCULATE(MIN('Table'[Date]),FILTER(ALL('Table'),'Table'[Status]="S3"&&'Table'[Name]=MAX('Table'[Name]))),CALCULATE(MAX('Table'[Date]),FILTER(ALL('Table'),'Table'[Status]="S5"&&'Table'[Name]=MAX('Table'[Name]))),DAY)
var _datediff2=DATEDIFF(CALCULATE(MIN('Table'[Date]),FILTER(ALL('Table'),'Table'[Status]="S4"&&'Table'[Name]=MAX('Table'[Name]))),CALCULATE(MAX('Table'[Date]),FILTER(ALL('Table'),'Table'[Status]="S5"&&'Table'[Name]=MAX('Table'[Name]))),DAY)
var _sum=SUMX(FILTER(ALL('Table'),'Table'[Name]=MAX('Table'[Name])),'Table'[S4 search])
Return
IF(_sum>=1,_datediff2,_datediff1)
average =
var _count=DISTINCTCOUNT('Table'[Name])
VAR _TOTAL=SUMX(VALUES('Table'[Name]),'Table'[Measure])
Return
DIVIDE(_TOTAL,_count)
Y verás:
Para el archivo .pbix relacionado, pls ver adjunto.
@pbiguru999 Probablemente podría hacer algo como:
Measure =
VAR __FromStatus = IF("S4" IN SELECTCOLUMNS('Table',"Status",'Table'[Status]),"S4","S3")
VAR __ToStatus = "S5"
VAR __From = MAXX(FILTER('Table',[Status] = __FromStatus),[Date])
VAR __To = MAXX(FILTER('Table',[Status] = __ToStatus),[Date])
RETURN
(__From - __To) * 1.