Cálculo del tiempo de actividad de la máquina: ¿es esto posible en Power BI a partir de los datos disponibles?

Un usuario Pregunto ✅

ricardoj

Me preguntaba si alguien podría aconsejarme si lo siguiente es posible en Power BI.
La tabla muestra los datos disponibles:
Datos sin procesar disponiblesDatos sin procesar disponibles
El objetivo es
1) Calcular el tiempo ‘Activo’ de la máquina
2) Calcular el tiempo ‘Inactivo’ de la máquina
3) Para cada fila, agregue una columna calculada que muestre la duración de la fila (Tiempo transcurrido)
4) Para cada fila, agregue una columna calculada que indique si la máquina estaba ‘Activa’ o ‘Inactiva’ (Actividad)
La máquina comienza a estar ‘Activa’ cuando ‘Estado’=»Stib» y ‘Función’=»ON»
La máquina deja de estar ‘Activa’ cuando ‘Estado’=»Stib» y ‘Función’=»APAGADO»
Creo que necesitaría las siguientes columnas calculadas
Actividad = Activo o Inactivo
Donde Active=»Status»=»Stib» y ‘Function’=»ON» en la fila actual o puede encontrar ‘Status’=»Stib» y ‘Function’=»ON» en las primeras filas anteriores disponibles (antes de encontrar STIB APAGADO)

Donde Inactive=»Status»=»Stib» y ‘Function’=»OFF» en la fila actual o puede encontrar ‘Status’=»Stib» y ‘Function’=»OFF» en la primera fila anterior disponible (antes de encontrar STIB SOBRE)
Tiempo transcurrido = duración en segundos desde el tiempo indicado en la fila anterior
Espero que la explicación anterior tenga sentido.
El elemento que me confunde es cómo calcular la diferencia de tiempo entre las filas, especialmente si hay filas de ‘información’ entre los estados ON y OFF.
Si esto es posible, o si hay una mejor manera de lograr la respuesta, se agradecería cualquier sugerencia.
¡Gracias!

JarroVGIT

¡Buena pregunta! Creé una maqueta de su conjunto de datos (es mejor copiarla en su pregunta la próxima vez, en lugar de una captura de pantalla, para que podamos replicar más rápido). He cargado esto en Power BI. Lo primero que hice fue filtrar la información irrelevante (en el Editor de consultas), de modo que el Función columna solo muestra ON u OFF. Luego agregué una columna de índice, por lo que mi tabla se ve así cuando empiezo a hacer mi informe:

Mesa que hemos preparado.Tabla que hemos preparado.

Ahora, tenemos que buscar el siguiente Hora valor con un cambio de Función. Para mayor claridad, ahora lo agregamos como una columna calculada. La fórmula es:

NextStatusChangeTime = CALCULATE(MIN(Table1[Time]), FILTER(Table1, Table1[Function] <> EARLIER(Table1[Function]) && Table1[Time] > EARLIER(Table1[Time])))

Esto mira la tabla, le aplica un filtro (al buscar un estado que no sea la fila actual Estado, y buscar Hora más tarde que la fila actual Hora. Este resultado en la siguiente tabla:

Nuestro conjunto de datos, con una columna adicional.Nuestro conjunto de datos, con una columna adicional.

Lo siguiente es calcular el diferencia de tiempo. Hacemos esto con la siguiente columna calculada:

TimeDiff = DATEDIFF(Table1[Time], Table1[NextStatusChangeTime], SECOND)

Por supuesto, puede cambiar la unidad de tiempo a la que desee, por ejemplo, MINUTO. Esto da como resultado la siguiente tabla:

Tabla final, con columna TimeDiff.Tabla final, con columna TimeDiff.

Con esto, puede calcular la cantidad total de tiempo activo, creando una medida que suma la columna diferencia de tiempo donde Función Está encendido:

TotalActiveTime = CALCULATE(SUM(Table1[TimeDiff]), FILTER(ALL(Table1), Table1[Function] = "ON"))

Atentamente

Djerro123

——————————-

Si esto respondió a su pregunta, márquelo como la Solución. Esto también ayuda a otros a encontrar lo que están buscando.

Felicitaciones son bienvenidas 🙂

JarroVGIT

¡Buena pregunta! Creé una maqueta de su conjunto de datos (es mejor copiarla en su pregunta la próxima vez, en lugar de una captura de pantalla, para que podamos replicar más rápido). He cargado esto en Power BI. Lo primero que hice fue filtrar la información irrelevante (en el Editor de consultas), de modo que el Función columna solo muestra ON u OFF. Luego agregué una columna de índice, por lo que mi tabla se ve así cuando empiezo a hacer mi informe:

Mesa que hemos preparado.Tabla que hemos preparado.

Ahora, tenemos que buscar el siguiente Hora valor con un cambio de Función. Para mayor claridad, ahora lo agregamos como una columna calculada. La fórmula es:

NextStatusChangeTime = CALCULATE(MIN(Table1[Time]), FILTER(Table1, Table1[Function] <> EARLIER(Table1[Function]) && Table1[Time] > EARLIER(Table1[Time])))

Esto mira la tabla, le aplica un filtro (al buscar un estado que no sea la fila actual Estado, y buscar Hora más tarde que la fila actual Hora. Este resultado en la siguiente tabla:

Nuestro conjunto de datos, con una columna adicional.Nuestro conjunto de datos, con una columna adicional.

Lo siguiente es calcular el diferencia de tiempo. Hacemos esto con la siguiente columna calculada:

TimeDiff = DATEDIFF(Table1[Time], Table1[NextStatusChangeTime], SECOND)

Por supuesto, puede cambiar la unidad de tiempo a la que desee, por ejemplo, MINUTO. Esto da como resultado la siguiente tabla:

Tabla final, con columna TimeDiff.Tabla final, con columna TimeDiff.

Con esto, puede calcular la cantidad total de tiempo activo, creando una medida que suma la columna diferencia de tiempo donde Función Está encendido:

TotalActiveTime = CALCULATE(SUM(Table1[TimeDiff]), FILTER(ALL(Table1), Table1[Function] = "ON"))

Atentamente

Djerro123

——————————-

Si esto respondió a su pregunta, márquelo como la Solución. Esto también ayuda a otros a encontrar lo que están buscando.

Felicitaciones son bienvenidas 🙂

ricardoj

En respuesta a JarroVGIT

Gracias por la fabulosa respuesta @JarroVGIT.

Tiene mucho sentido.

Aprecio que se tome el tiempo y el esfuerzo para explicar

Deja un comentario

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