calcular el tiempo de descanso de los empleados

Un usuario Pregunto ✅

Romanbull

Se me ha asignado la tarea de encontrar los tiempos de descanso utilizados por cada empleado utilizando los siguientes datos de acceso a la puerta de cada empleado. La puerta 1 es la entrada principal, la puerta 3 es el área de producción. Por ejemplo, el empleado AK entró al edificio por la puerta 1 el 1/6/18 a las 18:18 y luego llegó a la puerta 3 a las 18:19. AK luego salió a tomar un descanso primero por la puerta 3 y luego por la puerta 1 a las 18:29 y regresó al área de producción por la puerta 1 a las 19:00 y la puerta 3 a las 19:01, así sucesivamente.

Mi requisito es encontrar lo siguiente:

Hora de inicio de turno AK: 1/6/18 a las 18:18

Primera pausa: 1/6/18 a las 18:29 a 19:01 = pausa de 32 minutos

Segundo descanso: 1/6/18 a las 20:28 al 1/6/18 20:49 = descanso de 21 minutos

Tercer descanso: 1/6/18 a las 20:58 al 1/6/18 21:47 = 49 min de descanso y así sucesivamente.

Intenté usar DAX (MINIF y MAXIF) y pude distinguir la hora de inicio y finalización del turno. Necesita ayuda para encontrar los tiempos de descanso tomados por cada empleado.

Fecha Hora Puerta Nombre
1 de junio 1/6/2018 18:18 Puerta 1 Alaska
1 de junio 1/6/2018 18:19 Puerta3 Alaska
1 de junio 1/6/2018 18:29 Puerta3 Alaska
1 de junio 1/6/2018 18:29 Puerta 1 Alaska
1 de junio 1/6/2018 18:51 Puerta 1 AJ
1 de junio 1/6/2018 18:51 Puerta3 AJ
1 de junio 1/6/2018 19:00 Puerta 1 Alaska
1 de junio 1/6/2018 19:01 Puerta3 Alaska
1 de junio 1/6/2018 20:28 Puerta3 Alaska
1 de junio 1/6/2018 20:49 Puerta3 Alaska
1 de junio 1/6/2018 20:58 Puerta3 Alaska
1 de junio 1/6/2018 20:59 Puerta 1 Alaska
1 de junio 1/6/2018 21:47 Puerta 1 Alaska
1 de junio 1/6/2018 21:47 Puerta3 Alaska
1 de junio 1/6/2018 21:53 Puerta3 AJ
1 de junio 1/6/2018 21:54 Puerta3 AJ
1 de junio 1/6/2018 21:54 Puerta2 AJ
1 de junio 1/6/2018 21:55 Puerta 1 AJ
1 de junio 1/6/2018 22:11 Puerta 1 AJ
1 de junio 1/6/2018 22:15 Puerta 1 AJ
1 de junio 1/6/2018 22:16 Puerta3 AJ
1 de junio 1/6/2018 23:17 Puerta3 Alaska
1 de junio 1/6/2018 23:42 Puerta 1 Alaska
1 de junio 1/6/2018 23:43 Puerta3 Alaska
1 de junio 2/6/2018 0:11 Puerta3 AJ
1 de junio 2/6/2018 0:11 Puerta2 AJ
1 de junio 2/6/2018 0:14 Puerta3 AJ
1 de junio 2/6/2018 1:45 Puerta3 AJ
1 de junio 2/6/2018 1:45 Puerta2 AJ
1 de junio 2/6/2018 1:46 Puerta2 AJ
1 de junio 2/6/2018 1:46 Puerta3 AJ
1 de junio 2/6/2018 2:46 Puerta3 Alaska
1 de junio 2/6/2018 2:47 Puerta 1 Alaska
1 de junio 2/6/2018 4:06 Puerta3 AJ

Romanbull

En respuesta a Phil_Seamark

Hola @Phil_Seamark,

Sí, necesito tu ayuda para modificar el código. El objetivo es dejar fuera la primera y última puerta de acceso para el inicio y el final del turno. Luego, necesito calcular la diferencia de tiempo entre cada par de accesos de door3 como se indica en la imagen donde he calculado manualmente y luego sumar esos tiempos de descanso.

yppd

La solución no me está funcionando.

Minutes To next Door = 
VAR PreviousDoorTime = 
    MAXX(
        FILTER(
            'Table1',
            'Table1'[Name] = EARLIER(Table1[Name]) &&
            'Table1'[Time] < EARLIER('Table1'[Time]) 
            ), 
       'Table1'[Time]
       )
        
VAR PreviousDoorNumber = 
    MAXX(
        FILTER(
            'Table1',
            'Table1'[Name] = EARLIER(Table1[Name]) && 
            'Table1'[Time] = PreviousDoorTime),
           'Table1'[Door])        
        
VAR x = 
    MINX(
        FILTER(
            'Table1',
            'Table1'[Name] = EARLIER(Table1[Name]) && <-- it shows me red line and says (EARLIER/EARLIEST refers to an earlier row context which doesn't exists
             'Table1'[Time] > EARLIER('Table1'[Time]) 
            ),
        'Table1'[Time])
RETURN 
    SWITCH(
        TRUE() , 
        PreviousDoorNumber = "Door3" && 'Table1'[Door] = "Door3",
        DATEDIFF('Table1'[Time],x,MINUTE))

¿Has tenido alguna solución a esto?

Hola @romanbull

Es posible que se requiera algo en este sentido. Tienes algunas filas para la misma persona que comparten exactamente el mismo minuto, lo que lo hace complicado. Con algunos pequeños ajustes, podría ser lo que necesita. He adjuntado un archivo PBIX

Minutes To next Door = 
VAR PreviousDoorTime = 
    MAXX(
        FILTER(
            'Table1',
            'Table1'[Name] = EARLIER(Table1[Name]) &&
            'Table1'[Time] < EARLIER('Table1'[Time]) 
            ), 
       'Table1'[Time]
       )
        
VAR PreviousDoorNumber = 
    MAXX(
        FILTER(
            'Table1',
            'Table1'[Name] = EARLIER(Table1[Name]) && 
            'Table1'[Time] = PreviousDoorTime),
           'Table1'[Door])        
        
VAR x = 
    MINX(
        FILTER(
            'Table1',
            'Table1'[Name] = EARLIER(Table1[Name]) && 
             'Table1'[Time] > EARLIER('Table1'[Time]) 
            ),
        'Table1'[Time])
RETURN 
    SWITCH(
        TRUE() , 
        PreviousDoorNumber = "Door3" && 'Table1'[Door] = "Door3",
        DATEDIFF('Table1'[Time],x,MINUTE))

Romanbull

En respuesta a Phil_Seamark

Gracias @Phil_Seamark por tu ayuda, ya que dijiste que los datos son un poco engañosos. Los datos no especifican si la marca de tiempo es una salida o una entrada y solo conduce a la especulación. Trabajé con su PBIX y ¿es esta la forma correcta de lo que intenté crear a partir de su archivo?

image.png

De forma manual, intenté documentar el tiempo de descanso en Excel. No estoy seguro de cómo se puede codificar esto en powerbi para obtener un resultado similar.

Manual.JPG

En respuesta a Romanbull

Hola @romanbull

Entonces, ¿fue útil mi código sugerido? ¿Necesitas mi ayuda para modificarlo más?

Romanbull

En respuesta a Phil_Seamark

Hola @Phil_Seamark,

Sí, necesito tu ayuda para modificar el código. El objetivo es dejar fuera la primera y última puerta de acceso para el inicio y el final del turno. Luego, necesito calcular la diferencia de tiempo entre cada par de accesos de door3 como se indica en la imagen donde he calculado manualmente y luego sumar esos tiempos de descanso.

Deja un comentario

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