Earn the coveted Fabric Analytics Engineer certification. 100% off your exam for a limited time only!
Hola
Tengo un conjunto de datos de máquinas que se ejecutan en una fábrica como se indica a continuación:
Error_Type Downtime_Duration Downtime_Started Downtime_Ended Machine Val
Pow_Fail 23 5/2/2020 7:35:53 AM 5/2/2020 7:58:55 AM Mn1 1
Pow_Fail 28 5/2/2020 8:00:06 AM 5/2/2020 8:28:55 AM Mn1 1
Pow_Fail 28 5/2/2020 8:30:05 AM 5/2/2020 8:58:56 AM Mn1 1
Pow_Fail 23 5/2/2020 9:00:06 AM 5/2/2020 9:28:56 AM Mn1 2
La duración del tiempo de inactividad se calcula como diferencia entre Downtime_Ended y Downtime_Started .
Mi requisito es , para cada máquina distinta y cada tipo de error distinto, tenga en cuenta la duración del tiempo de inactividad sólo cuando el valor de la columna "Val" se ha incrementado.
es decir) si Val 1 para las filas adyuvantes , no se ha producido ningún error (no es necesario tener en cuenta las filas 2 y 3, ya que no se ha producido ningún error), pero cuando se ha producido Val 2 , entonces se ha producido un error (es necesario tener en cuenta la duración de la fila 4).
En última instancia, necesito encontrar el tiempo total perdido como tiempo de inactividad durante un día operativo en particular.
Pls Ayúdame .
Gracias por adelantado..
Hola @SwathiSrinivas ,
Puedes probar esta medida si la tengo correctamente:
Measure =
VAR _startdate =
SELECTEDVALUE ( 'Table'[Downtime_Started] )
VAR _val =
SELECTEDVALUE ( 'Table'[Val] )
VAR _lastval =
LOOKUPVALUE (
'Table'[Val],
'Table'[Downtime_Started], CALCULATE (
MAX ( 'Table'[Downtime_Started] ),
FILTER (
ALLEXCEPT ( 'Table', 'Table'[Error_Type], 'Table'[Machine] ),
'Table'[Downtime_Started] < _startdate
)
)
)
VAR _re =
CALCULATE (
MAX ( 'Table'[Downtime_Duration] ),
FILTER (
ALLEXCEPT ( 'Table', 'Table'[Error_Type], 'Table'[Machine] ),
'Table'[Val] = _val
&& 'Table'[Downtime_Started]
= CALCULATE (
MIN ( 'Table'[Downtime_Started] ),
FILTER (
ALLEXCEPT ( 'Table', 'Table'[Error_Type], 'Table'[Machine] ),
'Table'[Val] = _val
)
)
)
)
VAR _re2 =
CALCULATE (
MAX ( 'Table'[Downtime_Duration] ),
FILTER (
ALLEXCEPT ( 'Table', 'Table'[Error_Type], 'Table'[Machine] ),
'Table'[Val] = _lastval
&& 'Table'[Downtime_Started]
= CALCULATE (
MIN ( 'Table'[Downtime_Started] ),
FILTER (
ALLEXCEPT ( 'Table', 'Table'[Error_Type], 'Table'[Machine] ),
'Table'[Val] = _lastval
)
)
)
)
RETURN
IF (
ISBLANK ( _lastval ),
SELECTEDVALUE ( 'Table'[Downtime_Duration] ),
IF ( _lastval = _val, _re, _re + _re2 )
)
Por cierto, cuando val 2, por qué la duración es 23 no 28 si calcula la datediff..
Se adjunta el archivo de ejemplo, compruebe y pruébelo: Calcular la duración del error entre 2 fechas para Machines.pbix
Mejores looks,
Yingjie Li
Si este post ayuda, por favor considere Aceptarlo como la solución para ayudar a los otros miembros a encontrarlo más rápidamente.
@SwathiSrinivas , tratar como
diff último final de tiempo de inactividad: datediff(maxx(filter(table, [Downtime_Started]<earlier([Downtime_Started]) && [machine]<earlier([machine])),[Downtime_Ended]),[Downtime_Ended],minute)
Hola Amit ,
Probé su solución, pero no estoy recibiendo ningún valor. La salida parece estar en blanco.
Swathi