Skip to main content
cancel
Showing results for 
Search instead for 
Did you mean: 

Earn the coveted Fabric Analytics Engineer certification. 100% off your exam for a limited time only!

Reply
Syndicate_Admin
Administrator
Administrator

Puntuación de Bradford y cálculos de sesiones por enfermedad

Hola a todos,

Estoy tratando de calcular el puntaje de Bradford para todos en la compañía, pero ninguno de los hilos que encontré en línea fue suficiente para ayudarme a entender una forma de resolverlo. Mis datos no contienen sesión por enfermedad, solo el intervalo de días de trabajo en que los empleados han estado enfermos. En el siguiente ejemplo se ve que algunos miembros del equipo tienen semanas consecutivas de enfermedad que deben contarse como una sesión de enfermedad.

Tabla 'Enfermo'
Correo electrónicoFecha de inicioFecha final
team.member_1@company.co.uk19/07/202123/07/2021
team.member_1@company.co.uk26/07/202130/07/2021
team.member_1@company.co.uk02/08/202106/08/2021
team.member_2@company.co.uk18/03/202118/03/2021
team.member_2@company.co.uk21/04/202121/04/2021
team.member_2@company.co.uk17/05/202119/05/2021
team.member_3@company.co.uk18/03/202119/03/2021
team.member_3@company.co.uk03/08/202106/08/2021
team.member_3@company.co.uk09/08/202113/08/2021
team.member_3@company.co.uk16/08/202120/08/2021

¿Cuál sería el mejor enfoque que sugerirías?

Gracias.

6 REPLIES 6
Syndicate_Admin
Administrator
Administrator

@mihaiem ,

Estos son los pasos que puede seguir:

1. Crea un calendario

Date_Table = CALENDARAUTO()

2. Cree una columna calculada en la tabla del calendario.

week = WEEKDAY('Date_Table'[Date])
Tag = IF([week]>5,0,1)

vyangliumsft_0-1638175586288.png

3. Cree una columna calculada en la tabla Email_.

Workday =
CALCULATE(SUM('Date_Table'[Tag]),FILTER(ALL('Date_Table'),'Date_Table'[Date]>='Email_Table'[Begin Date]&&'Date_Table'[Date]<='Email_Table'[End Date]))
Sum_workday =
CALCULATE(SUM('Email_Table'[Workday]),FILTER(ALL('Email_Table'),'Email_Table'[Email]=EARLIER('Email_Table'[Email])))

4. Resultado:

vyangliumsft_1-1638175586290.png

Saludos

Liu Yang

Si esta publicación ayuda,entonces considere Aceptarla como la solución para ayudar a los otros miembros a encontrarla más rápidamente

Hi @v-yangliu-msft,

Gracias por su respuesta. He ajustado un poco la columna de etiquetas ya que estaba marcando el viernes (6) como 0.

Tag = IF([week]=7,0,if([week]=1,0,1))

Ahora tengo que combinar su solución con la de @jeroendekk y calcualte el puntaje de Bradford, el único problema que tengo es que hay personas que envían varias horas en un mismo día y que generan un número de 2 sesiones o más. Creo que tengo que resumir toda la tabla de 'Enfermos' en una nueva y tratar de cosechar esos pasos. Gracias a ambos por sus respuestas.

Syndicate_Admin
Administrator
Administrator

Hola @mihaiem
Yo crearía una medida algo como esto.

Number of sessions = 
SUMX(
    Sick,

var user = Sick[Email]  
-- gets employee for each row

var begindate = Sick[Begin Date] 
--find begindate for each row

var lastenddate = 
CALCULATE(
    MAX(
        Sick[End Date]), 
        ALLEXCEPT(
            Sick,Sick[Email]), Sick[End Date] <= begindate)
-- Calculates previous enddate for each employee (for each row)

var is_new_session = 
IF(
    AND(WEEKDAY(begindate)=2,begindate - lastenddate <= 3),0,1)

--determines if the begindate is a monday and the previous enddate was on the prev. friday or later 
--if true then 0 else 1 (new sessions)

RETURN is_new_session)

Cree que esto funcionará. Pero no será una medida rápida creo (dependiendo del tamaño de la mesa). También puede usar esto como una columna calculada.

Tal vez alguien tenga una mejor solución.

Si esta publicación ayuda,considere aceptarla como la solución para ayudar a los otros miembros a encontrarla más rápidamente.
Aprecia tus felicitaciones!!

Saludos
Jeroen


Gracias por su respuesta. He probado su medida, pero para algunas entradas no funciona como debería. Por lo que parece, los enteros que comienzan y terminan el mismo lunes no se contarán. A continuación he generado una nueva muestra de prueba.

Correo electrónicoFecha de inicioFecha final
team.member_1@company.co.uk19/07/202123/07/2021
team.member_1@company.co.uk26/07/202130/07/2021
team.member_1@company.co.uk02/08/202106/08/2021
team.member_2@company.co.uk18/03/202118/03/2021
team.member_2@company.co.uk21/04/202121/04/2021
team.member_2@company.co.uk17/05/202119/05/2021
team.member_3@company.co.uk18/03/202119/03/2021
team.member_3@company.co.uk03/08/202106/08/2021
team.member_3@company.co.uk09/08/202113/08/2021
team.member_3@company.co.uk16/08/202120/08/2021
team.member_4@company.co.uk18/01/202118/01/2021
team.member_4@company.co.uk20/01/202120/01/2021
team.member_5@company.co.uk24/05/202124/05/2021



Hola

Por favor, muestre claramente el resultado final que está esperando.

Hola @mihaiem
Correcto, tiene sentido. La fecha de inicio no puede ser la misma que la fecha anterior. Por lo tanto, en la variable lastenddate el operador debe ser < no <=
Así.

Number of sessions = 
SUMX(
    Sick,

var user = Sick[Email]  
-- gets employee for each row

var begindate = Sick[Begin Date] 
--find begindate for each row

var lastenddate = 
CALCULATE(
    MAX(
        Sick[End Date]), 
        ALLEXCEPT(
            Sick,Sick[Email]), Sick[End Date] < begindate)
-- Calculates previous enddate for each employee (for each row)

var is_new_session = 
IF(
    AND(WEEKDAY(begindate)=2,begindate - lastenddate <= 3),0,1)

--determines if the begindate is a monday and the previous enddate was on the prev. friday or later 
--if true then 0 else 1 (new sessions)

RETURN is_new_session)



Helpful resources

Announcements
April AMA free

Microsoft Fabric AMA Livestream

Join us Tuesday, April 09, 9:00 – 10:00 AM PST for a live, expert-led Q&A session on all things Microsoft Fabric!

March Fabric Community Update

Fabric Community Update - March 2024

Find out what's new and trending in the Fabric Community.

Top Solution Authors