es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Diferencia de fechas / intervalo de tiempo entre los eventos de entrada / salida.

Tenemos una base de datos de SQL Server que registra la fecha y hora en que alguien pasa su tarjeta de identificación en varios lectores de tarjetas, así como otra información como el número de identificación de la persona, el número y nombre del lector de tarjetas (ubicación), etc. Cada paso es una transacción separada en su propia fila. Se me ha pedido que cree un informe (idealmente en SSRS) que calcule la diferencia entre el momento en que alguien marca la entrada y cuando marca la salida, es decir, cuando marca la entrada en uno de los dos lectores de tarjetas y la salida en uno de los dos lectores de tarjetas. Los datos relevantes en la base de datos son similares a esto:

TRANSACK_ID Fecha y Hora TR_SLA TR_DEV_NAME TR_MASTER_ID
41506 2021-12-16 09:18:33.000 03010302 Puerta 1 (Entrada) 33
41684 2021-12-16 17:08:32.000 03010303 Puerta 1 (Salida) 33
41131 2021-12-15 07:10:46.000 03010302 Puerta 1 (Entrada) 80
41326 2021-12-15 15:34:58.000 03010303 Puerta 1 (Entrada) 80

La consulta que debo realizar para obtener los datos relevantes es:

SELECT TRANSACK_ID, CAST(TRANSACK.TR_DATETIMELOCAL AS datetime) AS [Fecha y Hora], TR_SLA, TR_DEV_NAME, TR_MASTER_ID
FROM TRANSACK
WHERE (TRANSACK.TR_SLA = '03010301' OR TRANSACK.TR_SLA = '03010302' OR TRANSACK.TR_SLA = '03010303' OR TRANSACK.TR_SLA = '03010304')
GROUP BY TR_MASTER_ID, TRANSACK_ID, TR_DATETIMELOCAL, TR_COMP_NAME, TR_DEV_NAME, TR_SLA
ORDER BY TR_MASTER_ID

Puedo usar esta consulta para poblar un conjunto de datos en SSRS. Lo que no puedo descifrar es cómo calcular la diferencia de tiempo entre cada fila de Puerta 1 (Entrada) y Puerta 1 (Salida), para cada ID en la columna TR_MASTER_ID. He probado todas las expresiones de datediff que se me ocurren en SSRS sin éxito, pero probablemente esté pasando por alto algo obvio.

Se agradecerán cualquier sugerencia o aporte.

Tags:  , ,

Answer

  1. Avatar for davy.ai

    Para calcular la diferencia de tiempo entre las filas de la Puerta 1 (Entrada) y la Puerta 1 (Salida) para cada ID en la columna TR_MASTER_ID, puedes seguir los siguientes pasos:

    1. En el informe SSRS, agrega un nuevo tablix y configura el conjunto de datos que has creado utilizando la consulta SQL proporcionada.
    2. Agrupa el tablix por TR_MASTER_ID para que el informe muestre los datos agrupados por cada ID.

    3. Agrega dos nuevas columnas al tablix y nómbralas “Punch In” y “Punch Out”.

    4. En la columna “Punch In”, agrega una expresión que mostrará el valor de tiempo para las filas donde TR_DEV_NAME sea igual a “Gate 1 (In)”. La expresión debe verse así:

      =IIF(Fields!TR_DEV_NAME.Value = “Gate 1 (In)”, Fields!Time.Value, Nothing)

    5. En la columna “Punch Out”, agrega una expresión que mostrará el valor de tiempo para las filas donde TR_DEV_NAME sea igual a “Gate 1 (Out)”. La expresión debe verse así:

      =IIF(Fields!TR_DEV_NAME.Value = “Gate 1 (Out)”, Fields!Time.Value, Nothing)

    6. Agrega una nueva columna al tablix y nómbrala “Diferencia de Tiempo”.

    7. En la columna “Diferencia de Tiempo”, agrega una expresión que calculará la diferencia de tiempo entre los valores de Punch In y Punch Out para cada grupo de ID. La expresión debe verse así:

      =DateDiff(DateInterval.Minute, Min(Fields!Punch In.Value), Max(Fields!Punch Out.Value))

    8. Formatea la columna “Diferencia de Tiempo” como un valor de tiempo para mostrar la diferencia de tiempo en minutos u horas.

    Siguiendo estos pasos, deberías poder crear un informe en SSRS que calcule la diferencia de tiempo entre las filas de Punch In y Punch Out para cada ID en la columna TR_MASTER_ID.

Comments are closed.