Cálculo de un recuento mensual de empleados a partir de un intervalo de fechas de inicio y finalización

Un usuario Pregunto ✅

josecomputadora1

Hola,

Solo necesito ayuda para organizar cómo hacer esto. Tengo una tabla que muestra los nombres de los empleados, el título, la fecha de inicio, la fecha de finalización y «¿activo?». La columna activa solo muestra si es un empleado activo hoy o no.

Lo que quiero es poder mostrar (basado en las columnas de fecha de inicio y fecha de finalización cuántos empleados teníamos para cada mes. El rango en este momento solo se remonta al 1 de enero, pero quiero comenzar con esto. Cualquiera se agradece la ayuda

**Pensé en tener una columna para cada mes con un 1 o un 0 si estaban activos durante el mes. Esto funcionaría, excepto que se agregan columnas adicionales para cada mes y esto no es libre de mantenimiento (al menos no como lo tenía). Estoy familiarizado con Excel pero soy nuevo en Power BI.

table= tblEmpleados

columna = EmpName

columna = colStartDate

columna= fechaFinalCol

columna = colActivo?

Hola @joshcomputer1,

Si lo entiendo correctamente, debería poder seguir los pasos a continuación para obtener el recuento mensual de empleados a partir de un rango de fechas de inicio y finalización.

1. Agregue una tabla de calendario individual si aún no tiene una.

Date = CALENDARAUTO()

2. Use la fórmula a continuación para crear una medida y mostrar la medida en el Gráfico visual con Fecha[Date] columna como eje.

Count of Active Employee =
VAR currentDate =
    MAX ( 'Date'[Date] )
RETURN
    CALCULATE (
        COUNTROWS ( Table1 ),
        FILTER (
            Table1,
            ( Table1[Start Date] <= currentDate
                && Table1[End Date] >= currentDate )
                && Table1[Active?] = 1
        )
    )

r4.png

Aquí está el archivo pbix de muestra para su referencia. carita feliz

Saludos

luisvp

Estimada comunidad, quiero crear una tabla similar pero luego en Power Query usando el lenguaje m Query. ¿Podría alguien ayudarme con esto? Cuando uso el código DAX en Power BI Desktop, mi archivo de escritorio se vuelve muy lento: Tamaño total en ejecución = CALCULAR (CONTARA (Datos [StaffLevelName]), FILTRO ( TODO (Datos) , Datos [FiscalStartYear] <= MÁX (Datos [FiscalStartYear])) ) Muchísimas gracias. Saludos cordiales Louis van Paassen

sergiogg86

En respuesta a luisvp

Hola a todos,

¿Qué sucede si se vuelve a contratar a un empleado con su mismo número de empleado? ¿Qué cambiaría? @louisvp @joshcomputer1 @Anónimo @Anónimo @justincordasco @JRe5777

Sacchini

Hola,

Estoy tratando de averiguar cómo calcular el recuento de empleados activos para diferentes fechas. Tengo dos tablas, Empleado y Fecha.

En la tabla de empleados tengo columnas con [DateIn] para cuando el empleado empezó en la empresa y [DateOut] para cuando el empleado dejó la empresa. Para todos los empleados actuales [DateOut] está en blanco.

Estoy usando lo siguiente:

CountofActiveEmployee1 =
VAR MaxCurrentDate = MAX(‘Fecha'[Date])
REGRESO
CALCULAR(
CUENTA(Empleado);
FILTRAR(
Empleado;
(Empleado[DateIn]<= fecha actual máxima
&& Empleado[DateOut] >= EN BLANCO())
)
)

También estoy intentando con esto:

Número de empleados activos =
VAR MaxCurrentDate = MAX(‘Fecha'[Date])
var MinCurrentDate = MIN(‘Fecha'[Date])
REGRESO
CALCULAR(
CUENTA(Empleado);
FILTRAR(
Empleado;
(Empleado[DateIn]<= fecha actual máxima
&& Empleado[DateOut] >= fecha actual mínima)
)
)
En ambas medidas obtengo los mismos resultados (excepto por el Gran Total), pero muy extrañamente (para mí) lo que obtengo es el conteo de empleados inactivos filtrados por la fecha en que salieron. Ver imagen
¡¡¡Alguien puede ayudarme porfavor!!!

JRe5777

En respuesta a Sacchini

Hola, @BSacchini, creo que tal vez es la forma en que estás usando la condición EN BLANCO.

Le sugiero que pruebe esta medida que combina la solución en este hilo con un hilo de casos en blanco, ya que funcionó para mí.

Entonces, primero, asegúrese de que su tabla de fechas termine en HOY ()

La fórmula que usé para la tabla de fechas fue

Dates=CALENDAR(DATE(1950,1,1),TODAY())

Hice esto en lugar de CALENDARAUTO() porque con esto obtendría la fecha máxima al 31/12/2019, lo que significa que sería el empleado activo para fin de año, y lo quería de forma dinámica durante meses o incluso días ( para poder obtener el número real de empleados activos cada día que reviso el informe)

Luego, en la medida para la tabla de empleados, puede hacer:

Employees = 
VAR currentDate =
    MAX ( 'Date'[Date] )
RETURN
    CALCULATE (
        DISTINCTCOUNT(Employee[Employee Number]),
        Employee[DateIn] <= currentDate,
        OR(ISBLANK(Employee[DateOut] ),
            Employee[DateOut]  > currentDate)
    )

Luego, en una matriz o gráfico de barras, utiliza la tabla Fechas para filtrar y la medida de los valores y puede obtener el número de empleados activos por mes, por ejemplo.

Déjame saber si esto funcionó para ti.

Atentamente

Hola @joshcomputer1,

Si lo entiendo correctamente, debería poder seguir los pasos a continuación para obtener el recuento mensual de empleados a partir de un rango de fechas de inicio y finalización.

1. Agregue una tabla de calendario individual si aún no tiene una.

Date = CALENDARAUTO()

2. Use la fórmula a continuación para crear una medida y mostrar la medida en el Gráfico visual con Fecha[Date] columna como eje.

Count of Active Employee =
VAR currentDate =
    MAX ( 'Date'[Date] )
RETURN
    CALCULATE (
        COUNTROWS ( Table1 ),
        FILTER (
            Table1,
            ( Table1[Start Date] <= currentDate
                && Table1[End Date] >= currentDate )
                && Table1[Active?] = 1
        )
    )

r4.png

Aquí está el archivo pbix de muestra para su referencia. carita feliz

Saludos

zwyatt

En respuesta a v-ljerr-msft

Gracias, gracias, muchas gracias por esta solución.

He estado pasando un tiempo increíble rastreando una solicitud de datos similar a mi problema, junto con una solución viable y aplicable, y me encontré con esto. Funcionó perfectamente cuando se aplicó a mi proyecto. ¡Salud!

Anónimo

En respuesta a v-ljerr-msft

Oye, esto es increíble, ¿puedes explicar el funcionamiento de esta medida dax para comprender lo que sucede debajo del capó?

maggigfrances

En respuesta a v-ljerr-msft

Necesito hacer lo mismo, pero recibo un error con esta solución y tal vez se deba a que todos mis empleados «activos» no tienen «fechas de licencia»: ese campo es nulo. como puedo dar cuenta de eso??

Como referencia, aquí está la fórmula que estoy usando con mis propias referencias:

Recuento de empleados activos3 = VAR fechaactual = MAX(‘Tabla de fechas'[Date]) RETURN CALCULATE(COUNTROWS(‘Lista de equipos’), FILTER(‘Lista de equipos’, (‘Lista de equipos'[Start Date] <= fecha actual && 'Lista de equipos'[Leave Date] >= fecha actual) && ‘Lista de equipos'[Status2] = 1))
Del mismo modo, aquí está el error que recibo en la imagen:

MdxScript(Modelo) (6, 236) Error de cálculo en la medida ‘Lista de equipos'[Count of Active Employee3]: Las operaciones de comparación de DAX no admiten la comparación de valores de tipo Texto con valores de tipo Integer. Considere usar la función VALOR o FORMATO para convertir uno de los valores.

JRe5777

En respuesta a maggigfrances

Hola @maggigfrench

Es tuyo [Status2] ¿Tipo de valor de columna texto o entero? Puede ser que necesites poner «1»

Además, para tener en cuenta las fechas de vacaciones nulas, debe usar la función ISBLANK.

Sugeriría usar la función de cálculo de esta manera:

Count of Active Employee3 =
VAR currentDate = MAX('Date Table'[Date])
RETURN
CALCULATE (
DISTINCTCOUNT('Team List' [ Employee ID ? ]),
'Team List'[Start Date] <= currentDate ,
OR(ISBLANK('Team List'[Leave Date]),'Team List'[Leave Date]> currentDate) ,
'Team List'[Status2] = 1
)

Déjame saber cómo funcionó esto para ti

soy

En respuesta a v-ljerr-msft

querido v-ljerr-msft

Mirando esta banda de rodadura, esto es exactamente lo que necesito.

Sin embargo, al usar su fórmula, tráigame el total de empleados hoy, en lugar de por mes, en mi caso obtengo 27 cada mes para todos los años (que es el total de empleados hoy), ¿qué estoy haciendo mal? Por cierto, debo mencionar que no tengo una fecha de finalización para cada empleado ya que todos están activos. Entonces tus [End Date] = Hoy() en mi tabla y tu ‘Fecha’ [Date] = Hoy() en mi tabla.

Count of Active Employee =
VAR currentDate =
    MAX ( 'Date'[Date] )
RETURN
    CALCULATE (
        COUNTROWS ( Table1 ),
        FILTER (
            Table1,
            ( Table1[Start Date] <= currentDate
                && Table1[End Date] >= currentDate )
                && Table1[Active?] = 1
        )
    )

Mi fórmula se ve así:

Recuento de empleados activos =
VAR fecha actual =
MAX ( Número de empleados[Today] )
REGRESO
CALCULAR (
CUENTAS(Número de personas),
FILTRO (
plantilla,
( Número de empleados[Hire Date] <= fecha actual
&& Número de empleados[Today] >= fecha actual )
&& Número de empleados[Active] = 1
)
)
Espero estar explicándome,
soy

JRe5777

En respuesta a soy

tengo el mismo problema y creo que es porque mi max (fecha) no es resultando el último día de cada mes.

La última fecha de mi calendarauto() es 31/12/2999 (o 31/12/2019 si tuviera que dejar la fecha de finalización en blanco).

Por eso también tengo el mismo número para cada mes:

imagen.png

imagen.png

¿Podemos resolver esto?

Terminé resolviendo esto cambiando la tabla de fechas a:

CALENDARIO(FECHA(1950,1,1),HOY())

justincordasco

En respuesta a JRe5777

También obtengo el mismo total para cada período. Cambiar la fórmula de la fecha no hace la diferencia. ¿Pensamientos?

gilbertq

En respuesta a JRe5777

Hola

Sugeriría crear una tabla de fechas personalizada, donde pueda limitarla para que se detenga en la última fecha en la que obtuvo datos.

Esto también le permitirá crear columnas personalizadas según sus requisitos.

Aquí está mi publicación de blog sobre cómo crear fácilmente una tabla de fechas: https://www.fourmoo.com/2016/09/07/create-dynamic-periods-for-fiscal-or-calendar-dates-in-power- bi/

GerritVeltman

En respuesta a v-ljerr-msft

En lugar de COUNTROWS, deberíamos usar DISTINCTCOUNT aquí y hacer referencia al nombre del empleado

rwod

En respuesta a v-ljerr-msft

Pregunta relacionada con esta publicación…

He copiado la fórmula, pero no estoy seguro de cuál es el

Table1[Active?] = 1

es para, y lo que podría necesitar agregar en términos de calcular esta columna de datos para completar el recuento que ha enumerado a continuación. Mi archivo actual tiene una columna activa, pero solo indica si están activos actualmente (no activos durante los períodos de tiempo variables mensualmente) y esa es una cantidad estática no variable pendiente de la jerarquía de fechas en el visual.

josecomputadora1

En respuesta a rwod

Tabla 1[Active?] se refiere a la Tabla 1 y la columna denominada «¿Activo?». Entonces, si tienen un 1, actualmente están activos. De hecho, usamos un filtro en la tabla para mostrar solo a los miembros activos del equipo. Esto suena como lo que estás usando.

La verdadera magia aquí son los campos de fecha de inicio y finalización. La fórmula DAX enumerada hace referencia a esas fechas y luego calcula si hubo miembros del equipo activos durante ciertos meses.

rwod

En respuesta a v-ljerr-msft

Pregunta relacionada con esta publicación…

He copiado la fórmula, pero no estoy seguro de cuál es el

Table1[Active?] = 1

es para, y lo que podría necesitar agregar en términos de calcular esta columna de datos para completar el recuento que ha enumerado a continuación. Mi archivo actual tiene una columna activa, pero solo indica si están activos actualmente (no activos durante los períodos de tiempo variables mensualmente) y esa es una cantidad estática no variable pendiente de la jerarquía de fechas en el visual.

gilbertq

Hola @joshcomputer1

¿Tiene algunos datos de muestra, que lo harán más fácil?

Podría tener una medida con la siguiente sintaxis a continuación, pero necesitaría tener una tabla de fechas para que esto funcione. Donde crea una relación de sus datos con la tabla Fecha.

radacad.com/do-you-need-a-date-dimension

Total Employees = 
VAR EarliestDate = CALCULATE(MIN('Calendar'[Date]),ALLSELECTED()) 
RETURN CALCULATE(DISTINCTCOUNT('tblEmployees'[colActive]),FILTER(ALL('Calendar'[Date]),'Calendar'[Date] <= MAX('Calendar'[Date]) && 'Calendar'[Date] >= EarliestDate))

josecomputadora1

En respuesta a gilbertq

¿Cómo agrego una relación al calendario de fechas? ¿Relacionar las columnas de fechas de inicio y finalización con él? Ya tengo columnas de números de meses, años y semanas en la mayoría de mis documentos de Excel y me gustaría alejarme de eso.

En respuesta a josecomputadora1

Hola @joshcomputer1,

La relación con la fecha del calendario es innecesario aquí.

¿Podría compartir un archivo pbix de muestra para que podamos ayudarlo mejor con este problema? Puedes subirlo a OneDrive o Dropbox y publicar el enlace aquí, o enviármelo por mensaje privado. Oculte los datos confidenciales antes de cargarlos. carita feliz

Saludos

Deja un comentario

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