Calcular horas de trabajo dentro de un rango de fechas

Un usuario Pregunto ✅

Anónimo

Hola

Tengo tres mesas. Uno básico con empleados, también conocido como

Empleado
aileen
Tomás
Bárbara

Otro con sus horas de trabajo por día (son posibles múltiples entradas por día)

Empleado Fecha Horas Laborales
aileen 2019/01/05 5
aileen 2019/01/05 3
aileen 2019/01/06 8
aileen 2019/01/08 6
Tomás 2019/01/05 1
Tomás 2019/01/06 2
Tomás 2019/01/08 3
Bárbara 2019/01/05 3
Bárbara 2019/01/06 8
Bárbara 2019/01/08 6

Y una tercera con un periodo de trabajo (desde..hasta). Esta tabla no está relacionada con las demás.

Período Desde A
Período 01 2019/01/01 2019/01/06
Período 02 2019/01/07 2019/01/13
Período 03 2019/01/14 2019/01/20

Quiero agregar una medida a la tercera que incluye la SUMA de horas de trabajo de los empleados en cada período. En un menú desplegable luego puse los empleados. Si no se selecciona ningún empleado, quiero ver la SUMA de todas las horas de trabajo. Si solo se selecciona uno/algunos, quiero ver solo las horas de trabajo de los empleados seleccionados.

Espero que puedas ayudarme

Gracias zemi

mfelix

Hola @Anónimo,

Cree la siguiente medida:

Hours =
CALCULATE (
    SUM ( WorkingHours[working hours] );
    FILTER (
        ALL ( WorkingHours[Date] );
        WorkingHours[Date] >= SELECTEDVALUE ( Periods[From] )
            && WorkingHours[Date] <= SELECTEDVALUE ( Periods[To] )
    )
)

Saludos,

mfelix

tommartens

En respuesta a mfelix

Hola @Anónimo,

esta es una solución ligeramente diferente a la proporcionada por @MFelix.

Tenga en cuenta que mi solución también requiere una tabla de calendario (aunque no tiene que estar relacionada con una de las tablas).

Crea esta medida:

Working Hours = 
SUMX(
    VALUES(Period)
    ,CALCULATE(
        SUM(Working[working hours]),
        TREATAS(DATESBETWEEN('Calendar'[Date],'Period'[From],'Period'[To]),Working[Date])
    )
)

Saludos,
Tomás

mfelix

Hola @Anónimo,

Cree la siguiente medida:

Hours =
CALCULATE (
    SUM ( WorkingHours[working hours] );
    FILTER (
        ALL ( WorkingHours[Date] );
        WorkingHours[Date] >= SELECTEDVALUE ( Periods[From] )
            && WorkingHours[Date] <= SELECTEDVALUE ( Periods[To] )
    )
)

Saludos,

mfelix

Anónimo

En respuesta a mfelix

Hola @mfelix

Funciona bien. Gracias.

Si coloco la medida en una tabla, no obtengo la suma de todas las filas. ¿Por qué?

Saludos, zemi

tommartens

En respuesta a mfelix

Hola @Anónimo,

esta es una solución ligeramente diferente a la proporcionada por @MFelix.

Tenga en cuenta que mi solución también requiere una tabla de calendario (aunque no tiene que estar relacionada con una de las tablas).

Crea esta medida:

Working Hours = 
SUMX(
    VALUES(Period)
    ,CALCULATE(
        SUM(Working[working hours]),
        TREATAS(DATESBETWEEN('Calendar'[Date],'Period'[From],'Period'[To]),Working[Date])
    )
)

Saludos,
Tomás

Anónimo

En respuesta a tommartens

¡Gracias @TomMartens!

Grüsse nach Hamburgo

Deja un comentario

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