Gjakova
Hola, tengo la siguiente pregunta …
Tengo que calcular el porcentaje de absentismo por año con la siguiente situación:
- En 2017 trabajarán en la empresa 5 personas. Nadie informó estar enfermo de enero a abril, por lo que el absentismo cero es del 100%.
- En mayo, la persona A informa que está enferma, por lo que el absentismo cero se ha reducido al 80%.
- En junio, nadie informó estar enfermo, por lo que el ausentismo cero seguía siendo del 80%.
- En julio, la persona C informa que está enferma, por lo que el absentismo cero se ha reducido al 60%.
- En agosto, septiembre y octubre nadie reporta estar enfermo, por lo que el absentismo cero sigue siendo del 60%.
- La persona A informa que está enferma en noviembre, pero debido a que la persona A ya informó que estaba enferma una vez en mayo, el porcentaje permanece en el 60% y, por lo tanto, NO llega al 40%.
- En diciembre, nadie informó tampoco que estuviera enfermo.
Como resultado, el porcentaje de absentismo es del 100% en enero de 2017 y del 60% en diciembre de 2017.
¿Alguien sabe cómo hacer esto en Power BI?
Gjakova
Gracias a todos por las respuestas, pero logré resolver mi problema de esta manera:
Empleados ausentes =
CALCULAR (DISTINCTCOUNT (Sickleave[EmployeeID] ),
DATESYTD (Calendario[Date] ),
USERELATIONSHIP (Sickleave[Date], Calendario[Date] )
)
Empleados anuales totales =
CALCULAR (DISTINCTCOUNT (Relaciones laborales[EmployeeID] ),
FILTRO (TODOS (Calendario), Calendario[Year] = MAX (Calendario[Year] ))
)
Porcentaje mensual =
DIVIDIR (Total de empleados anuales – Empleados ausentes, Total de empleados anuales)
Gjakova
Gracias a todos por las respuestas, pero logré resolver mi problema de esta manera:
Empleados ausentes =
CALCULAR (DISTINCTCOUNT (Sickleave[EmployeeID] ),
DATESYTD (Calendario[Date] ),
USERELATIONSHIP (Sickleave[Date], Calendario[Date] )
)
Empleados anuales totales =
CALCULAR (DISTINCTCOUNT (Relaciones laborales[EmployeeID] ),
FILTRO (TODOS (Calendario), Calendario[Year] = MAX (Calendario[Year] ))
)
Porcentaje mensual =
DIVIDIR (Total de empleados anuales – Empleados ausentes, Total de empleados anuales)
v-yuaj-msft
Hola @Gjakova,
Según su descripción, puede seguir algunos de los siguientes pasos.
- Crea una tabla de calendario
calendar = CALENDAR("1/1/2017","12/31/2020")
2. Cree una relación entre dos tablas (fecha de inicio: fecha = 1: 1)
3. Cree algunas columnas.
EMployeeID = IF('calendar'[Date]=RELATED(Table1[StartDate]),RELATED(Table1[EmployeeID]))
Value = CALCULATE(DISTINCTCOUNTNOBLANK('calendar'[EMployeeID]),'calendar'[Date]<=EARLIER('calendar'[Date]))
Column =
var x1=
CALCULATE(
LASTNONBLANK('calendar'[Date],1),
FILTER(
ALL('calendar'),
'calendar'[Date]<=EARLIER('calendar'[Date])&&
NOT(ISBLANK('calendar'[Value]))))
var x2=
CALCULATE(
SUM('calendar'[Value]),
FILTER(ALL('calendar'),'calendar'[Date]=x1))
return
DIVIDE(x2,5)
4. Cree una tabla visual.
Resultado:
Espero que eso sea lo que estabas buscando.
Atentamente,
Yuna
Si esta publicación ayuda, entonces por favor considere Acéptalo como la solución para ayudar a los demás miembros a encontrarlo más rápidamente.
Amitchandak
@Gjakova, ¿puedes compartir datos de muestra y salida de muestra en formato de tabla? O un pbix de muestra después de eliminar datos confidenciales.
Puedes probar una medida como
medida =
dividir (calcular (cuenta distinta (Tabla[employee]), filtro (todos los seleccionados (Tabla), Tabla[date]<= tabla[date])), calcular (cuenta distinta (Tabla[employee]), todos (empleado)))
mahoneypat
Si proporciona datos de ejemplo, se puede sugerir una expresión específica, pero básicamente puede hacerlo filtrando una tabla virtual de empleados y contando los que no tenían filas de días de enfermedad. Suponiendo que tiene una tabla de fecha y los días de enfermedad se capturan en la tabla de datos, aquí hay un ejemplo,
Pct no ausente =
VAR vMaxDate =
MAX ( Fecha[Date] )
VAR vEmpleados =
VALORES ( Empleados[Employee] )
VAR vEmployeeCount =
COUNTROWS ( vEmpleados )
VAR vEmployeesNotAbsent =
COUNTROWS (
FILTRAR (
vEmpleados,
ESTÁ EN BLANCO (
CALCULAR (
COUNTROWS ( Datos ),
TODOS ( Fecha[Date] ),
Fecha[Date] <= vMaxDate
)
)
)
)
REGRESO
DIVIDIR (
vEmployeesNotAbsent,
vEmployeeCount
)
Saludos,
Palmadita
Gjakova
En respuesta a mahoneypat
¡Gracias por tu sugerencia! Voy a echar un vistazo, todavía no puedo acceder a los datos, pero se ve así:
La fecha de inicio y la fecha de finalización (supongo) no son tan importantes, solo con la fecha de inicio verificaré en qué año informaron estar enfermos (por lo que la persona D no debe contarse para 2017). La persona A ha informado que está enferma varias veces en 2017, pero solo se cuenta la primera notificación de enfermedad de la persona A (por lo tanto, 01/02/2017) y, por lo tanto, la persona A debe excluirse del resto del año.