Earn the coveted Fabric Analytics Engineer certification. 100% off your exam for a limited time only!
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ónico | Fecha de inicio | Fecha final |
team.member_1@company.co.uk | 19/07/2021 | 23/07/2021 |
team.member_1@company.co.uk | 26/07/2021 | 30/07/2021 |
team.member_1@company.co.uk | 02/08/2021 | 06/08/2021 |
team.member_2@company.co.uk | 18/03/2021 | 18/03/2021 |
team.member_2@company.co.uk | 21/04/2021 | 21/04/2021 |
team.member_2@company.co.uk | 17/05/2021 | 19/05/2021 |
team.member_3@company.co.uk | 18/03/2021 | 19/03/2021 |
team.member_3@company.co.uk | 03/08/2021 | 06/08/2021 |
team.member_3@company.co.uk | 09/08/2021 | 13/08/2021 |
team.member_3@company.co.uk | 16/08/2021 | 20/08/2021 |
¿Cuál sería el mejor enfoque que sugerirías?
Gracias.
@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)
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:
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.
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ónico | Fecha de inicio | Fecha final |
team.member_1@company.co.uk | 19/07/2021 | 23/07/2021 |
team.member_1@company.co.uk | 26/07/2021 | 30/07/2021 |
team.member_1@company.co.uk | 02/08/2021 | 06/08/2021 |
team.member_2@company.co.uk | 18/03/2021 | 18/03/2021 |
team.member_2@company.co.uk | 21/04/2021 | 21/04/2021 |
team.member_2@company.co.uk | 17/05/2021 | 19/05/2021 |
team.member_3@company.co.uk | 18/03/2021 | 19/03/2021 |
team.member_3@company.co.uk | 03/08/2021 | 06/08/2021 |
team.member_3@company.co.uk | 09/08/2021 | 13/08/2021 |
team.member_3@company.co.uk | 16/08/2021 | 20/08/2021 |
team.member_4@company.co.uk | 18/01/2021 | 18/01/2021 |
team.member_4@company.co.uk | 20/01/2021 | 20/01/2021 |
team.member_5@company.co.uk | 24/05/2021 | 24/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)