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
skasper
Responsive Resident
Responsive Resident

Empleados activos por período

Hola

luchando con lo que debería ser simple. Tengo dos tablas ('crm_employees' y 'DimDates'). Existe una relación entre ellos (ver imagen a continuación).

Table RelationshipRelación de tabla

Lo que estoy tratando de calcular es

  1. el total de personas que han comenzado en un período determinado, y
  2. el total de personas que siguen activas (es decir, "Fecha de finalización del contrato" vacías o en el futuro)

Esta es mi medida para los activos:

Empleados activos: 
CALCULATE(
	COUNTA(crm_employees[Empleado]);
	crm_employees[Código de estado] - "Activo"
)

Y esto para el total de carreras:

Empleados activos que se ejecutan en total en Fecha , 
CALCULATE(
	'Medidas clave'[Empleados activos];
	FILTER(
		ALLSELECTED('DimDates'[Date]);
		ISONORAFTER('DimDates'[Fecha]; MAX('DimDates'[Fecha]); DESC)
) )

Mis problemas:

  1. es que no cuenta los empleados donde la fecha de inicio del contrato está vacía. Supongo que es porque no puede relacionar el 'inicio de contrato' vacío con el campo 'DimDates' Date.
  2. el total sólo está aumentando, lo cual no es correcto. por ejemplo, tuvimos más empleados en agosto de 2016 que en junio de 2017, pero esto no se refleja como se puede ver a continuación. La medida aplica obviamente el filtro 'activo' independientemente de cuándo un empleado se volvió inactivo ('fecha de finalización del contrato'). Creo que necesito redefinir la medida para contar los empleados "activos" para considerar el período durante el cual estuvieron activos (desde la "fecha de inicio del contrato" hasta la "fecha de finalización del contrato"), pero no sé cómo hacerlo.

Total Employees per PeriodTotal de empleados por período

Best - Sascha
Please always mark accepted solutions. It helps others with similar questions or problems. Thank you.
1 ACCEPTED SOLUTION

Gracias por el consejo. Lo intenté y tampoco obtengo el resultado correcto. Lo que consigo es el número de empleados que se fueron en un período específico (por ejemplo, mes).

Como tengo que entregar el informe hoy, decidí adoptar un enfoque diferente, mostrando el número de uniones, abandonadores y la evolución general del personal activo como en la siguiente tabla.

Clipboard02.jpg

Best - Sascha
Please always mark accepted solutions. It helps others with similar questions or problems. Thank you.

View solution in original post

30 REPLIES 30
Syndicate_Admin
Administrator
Administrator

Tengo exactamente el mismo problema. ¿Alguien puede compartir cómo calcular los ensambladores, los egresados y el total de activos en ejecución?

Sería muy apreciado

Syndicate_Admin
Administrator
Administrator

Hola
¿Puede algún cuerpo ayudarme lo que está mal en este dax para obtener el outpu final? Antes de dax explicaré mi requisito que es simple pero no puede obtener el resultado.
1. Quiero encontrar empleados activos, bajo el cuadro de gerente que están activos.

He escrito dax como se muestra a continuación.. Por favor, corrígeme, me equivoqué.

Personas activas =
Dónde fecha actual =
Máximo('FECHA DEL CALENDARIO'[Fecha])
devolución
CALCULAR(
CUENTAS(EMPLOYEE_D),
FILTRO(EMPLOYEE_D,(EMPLOYEE_D[DATE_OF_JOINING] <= fecha actual
&& EMPLOYEE_D[DATE_OF_RELIEVING] >= fecha actual), TODOSSELECCIONADOS( EMPLOYEE_D[ACTIVE_FLG] = "Y", EMPLOYEE_D[DESIGNACIÓN] en {"Gerente de ventas", "sr.sales Manager"})))
Syndicate_Admin
Administrator
Administrator

Tengo una tabla que contiene datos col's de EmpID, Shift Start Time, Shift End Time & Resonable Notice Time en caso de cierre de negocios antes del horario comercial. Estoy tratando de filtrar a los empleados cuyo ShiftStartTime es menos de 2 horas de Tiempo de Aviso Resonable de Cierre para que obtengan una compensación según la política. Mi sintaxis no encaja para filtrar a esos empleados. Por favor, avise.

También intenté calcular la diferencia de tiempo usando DATEDIFF como

Paso 1

Diferencia de tiempo = DATEDIFF('Tabla1'[ShiftStartTime],'Tabla1'[Tiempo de aviso resonable],MINUTO)
Paso 2
Tratando de filtrar solo aquellos EmpID que tienen menos de 120 minutos y > = 0, ya que muchos no han tenido la oportunidad de registrarse. pero no obtienen la sintaxis correcta
EmpID's para Compensación = VALOR DE BÚSQUEDA(«Tabla1»[iEmpID],('Tabla1'[Diferencia de tiempo]<120 &&'Tabla1'[Diferencia de tiempo]>=0),ESPACIO EN BLANCO())
Anonymous
Not applicable

Hola

Estaba tratando de hacer algo similar, pero para las requisas de trabajo. Desea contar el número de solicitudes abiertas a lo largo del tiempo. Mi equivalente de "Fecha de inicio" es "Fecha aprobada" y mi equivalente de "Fecha de finalización" es "Fecha de última modificación".

La siguiente fórmula funcionó para mí:

Solicitudes abiertas - 
VAR MinDate
    ? MIN ( 'Tabla de fechas'[Fecha] )
VAR MaxDate ? MAX (
    'Tabla de fechas'[Fecha] )
RETURN CALCULATE (
        DISTINCTCOUNT (Requisitions[Job Req ID] ),
        Solicitudes[Fecha de aprobación] <- MinDate,
        Solicitudes[Last Modified] >- MaxDate
    )

Esta es mi salida:

Capture2.PNG

Tengo un modelo de datos simple:

Capture.PNG

Feliz de proporcionar más detalles si eso ayuda.

Gracias

mate

mtomlinson - La diferencia con su fórmula es que no incluirá las solicitudes que se abrieron antes de la fecha mínima y todavía están abiertas. Esto puede o no ser relevante en su solución. Al contar todos los empleados activos dentro de un intervalo de fechas especificado, es necesario incluir aquellos con una fecha contratada antes del intervalo de fechas (y siguen activos).

Anonymous
Not applicable

@rl_evans En realidad, no veo por qué eso importaría - si un empleado tuviera una fecha antes de minDate, todavía cumpliría con los criterios a contar...

¿Me estoy perdiendo algo?

Anonymous
Not applicable

@rl_evans también, como un aparte - ¿cómo ha definido su modelo de datos? ¿Está utilizando relaciones inactivas? Si es así, ¿puede mantener las inercciones funcionando para que pueda, por ejemplo, seleccionar un mes en particular y ver todos los empleados activos para ese mes en particular?

@mtomlinson - Tengo una relación activa entre la tabla de fechas y la tabla de empleados con una relación de uno a muchos entre la fecha[fecha] y el empleado[contratado].

Cada barra del gráfico de barras (con el ejemplo) representa un período determinado (es decir, un intervalo de fechas). Este intervalo de fechas establece el contexto de fecha para la instrucción DAX. El contexto de fecha filtra la tabla de empleados solo a los empleados contratados dentro del contexto de intervalo de fechas (debido a la relación con la tabla de fechas). Piense en ello como si la instrucción DAX se ejecuta por separado para cada período. Al buscar a todos los empleados activos al final del período, todos los empleados contratados antes del contexto del intervalo de fechas deben incluirse, ya que pueden seguir siendo empleados activos. La función ALL() permite a CalculateTable ignorar el contexto del intervalo de fechas del período.

Intenté usar su declaración DAX y encontré (en mi modelo) que no incluye a los empleados contratados antes del período. ¿Ha verificado que su fórmula incluye todas las solicitudes abiertas antes del período y sigue abierta?

@mtomlinson - Hice un poco más de excavación. Dado que no tiene una relación activa entre la fecha y la solicitud, no tiene un contexto de fecha que limite los registros en la instrucción de cálculo. Por lo tanto, si ha modificado la instrucción DAX para que se parezca a la siguiente, debe comportarse igual que la mía. Esto supone que la fecha de la última modificación está en blanco si la solicitud sigue abierta.

Solicitudes abiertas : 
VAR MaxDate
    ( 'Tabla de fechas'[Fecha] )
RETURN CALCULATE (
        DISTINCTCOUNT (Requisitions[Job Req ID] ),
        Requisitions[Fecha aprobada] <- MaxDate,
        OR(ISBLANK(Requisitions[Last Modified]),
Solicitudes[Last Modified] > MaxDate) )

Anonymous
Not applicable

@rl_evans Gracias por indagó en esto - es más complicado de resolve de lo que pensé.

He probado la fórmula que sugeriste, pero esto todavía no me permite filtrar usando el gráfico por desgracia.

También he intentado replicar lo que tiene eliminando mi relación con [Fecha de última modificación] y [Fecha] en mi tabla de fechas, y luego activando la relación entre [Fecha aprobada] y [Fecha]. Entonces he usado tu fórmula original. El gráfico se ve bien, pero cuando veo un mes en el gráfico para filtrar, todas mis filas aparecen en blanco (ver captura de pantalla a continuación).

¿Puede filtrar correctamente para los empleados relevantes activos en el período utilizando el gráfico?

Capture.PNG

Anonymous
Not applicable

@rl_evans Supongo que el filtrado que no funciona se debe al hecho de que si estoy seleccionando un mes determinado, y la relación entre [Fecha aprobada] y [Fecha] está activa, entonces solo estoy filtrando los datos para todas las [Fechas aprobadas] en ese mes. El filtro no tiene en cuenta la medida en absoluto.

Anonymous
Not applicable

@rl_evans He hecho un poco de pruebas y este parece ser el caso

@mtomlinson: se devuelve cualquier objeto visual que cuente las solicitudes activas debe basarse en un cálculo que pueda omitir el contexto de fecha (cuando hay una relación activa entre date y ApprovedDate.

Anonymous
Not applicable

@rl_evans es un buen punto. En mi caso, todas las solicitudes tienen una fecha aprobada y mi tabla de fechas se define dinámicamente utilizando la fecha mínima aprobada.

¿Una cláusula OR simple no resolvería esto? Eg...

Solicitudes abiertas - 
VAR MinDate
    ? MIN ( 'Tabla de fechas'[Fecha] )
VAR MaxDate ? MAX (
    'Tabla de fechas'[Fecha] )
RETURN CALCULATE (
        PREGUNTAS[ID de req de trabajo] ),
        OR(Requisitions[Fecha de aprobación] <-MinDate,ISBLANK(Requisitions[Fecha de aprobación])),
        Solicitudes[Last Modified] >- MaxDate
    )
Anonymous
Not applicable

Ignora lo anterior - acaba de darse cuenta de que dijo una fecha antes de la fecha mínima, no una fecha en blanco!

v-yuezhe-msft
Employee
Employee

@skasper,

Utilice el DAX a continuación para calcular los empleados activos y comprobar si obtiene el resultado esperado.

Empleados activos: 
CALCULATE(
	COUNTA('crm_employees'[Empleado]);
	FILTER('crm_employees' , ('crm_employees'[Inicio del contrato] <'LASTDATE('DimDates'[Fecha]) 
&& 'crm_employees'[Fin del contrato]> ? FIRSTDATE('DimDates'[Fecha])))

)



saludos

Community Support Team _ Lydia Zhang
If this post helps, then please consider Accept it as the solution to help the other members find it more quickly.

Gracias por el consejo. Lo intenté y tampoco obtengo el resultado correcto. Lo que consigo es el número de empleados que se fueron en un período específico (por ejemplo, mes).

Como tengo que entregar el informe hoy, decidí adoptar un enfoque diferente, mostrando el número de uniones, abandonadores y la evolución general del personal activo como en la siguiente tabla.

Clipboard02.jpg

Best - Sascha
Please always mark accepted solutions. It helps others with similar questions or problems. Thank you.
Anonymous
Not applicable

Hola Sascha,

Me gusta tu apporach. Soy nuevo en Power BI y estoy buscando ordenar Joiners, Leavers y Active Running total por mes, trimestre e YTD. Nuestro año fiscal es julio-junio. Agradezco su ayuda aquí.

Gracias.

He encontrado este mismo requisito esta semana. Así es como lo resolví.

• Empleados al final del período ?
VAR MaxDate á MAX ( 'Fecha'[Fecha] )

Empcnt vara ( VAR EmpCnt)
CALCULAR (
COUNTROWS (
CALCULATETABLE ( 'Empleados', 'Empleados'[HireDate] <-MaxDate, ALL ( 'Fecha' )

),
(ISBLANK ( 'Empleados'[TerminationDate] ) 'Employees' [TerminationDate] > MaxDate)
)
devolución
IF ( ISBLANK ( EmpCnt ), 0, EmpCnt )

En mi conjunto de datos, los empleados que están activos actualmente tienen una fecha de terminación en blanco. La función Calcular devuelve Blank, en lugar de cero, cuando el recuento es cero para un período determinado; por eso el último IF se utiliza después de la DEVOLUCIÓN.

Anonymous
Not applicable

Hola @rl_evans

Así que terminé con este cálculo DAX con algo de ayuda,

Recuento de empleados activos : 

VAR EndOfPeriod ? MAX ('Calendar'[Date])
VAR StartOfPeriod ? MIN ('Calendar'[Date])

RETURN CALCULATE (
DISTINCTCOUNT(v_FSASHRBIDATA[EmpId]),
FILTER(
ALL('v_FSASHRBIDATA'), 
(v_FSASHRBIDATA[EmploymentDate] <- EndOfPeriod &&&
v_FSASHRBIDATA[TerminationDate] >- StartOfPeriod)
) ) +
CALCULATE(
DISTINCTCOUNT('v_FSASHRBIDATA'[EmpId]),
FILTER(
ALL(v_FSASHRBIDATA),
('v_FSASHRBIDATA'[EmploymentDate]<-EndOfPeriod
&& 'v_FSASHRBIDATA'[TerminationDate] á blank()
) )
) 
 
Pero si un empleado tiene 2 juegos de fecha de contratación en el mismo año, parece ser contado como dobbel.
ex.
Capture.JPG
El último empleado solo debe contarse como 1 si el año se filtra a 2015.
¿Puedo de alguna manera tener eso en cuenta?
Cualquier ayuda/asesoramiento sería apreciado.
Gracias.

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