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).
Relación de tabla
Lo que estoy tratando de calcular es
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:
Total de empleados por período
Solved! Go to 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.
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:
Tengo un modelo de datos simple:
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).
@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?
@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) )
@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?
@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.
@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.
@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 )
Ignora lo anterior - acaba de darse cuenta de que dijo una fecha antes de la fecha mínima, no una fecha en blanco!
@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
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.
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.
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() ) ) )
@rado81 Supongo que depende de lo que intentes contar. Si la misma persona es contratada dos veces en el mismo año, ¿no es lo mismo que contratar a dos personas ese año? Sólo porque sea la misma persona no cambia el hecho de que hubo dos contrataciones. En otras palabras, si ignora el nombre del empleado, los eventos son 1) y se contrata al empleado, 2) se separa un empleado, 3) se contrata a un empleado. Son dos contrataciones y una separación que ocurrió en el año. Eso no cambia el número de empleados que estuvieron activos en un período determinado.
@rl_evans Estuve de acuerdo con usted, pero también no estoy tratando de mostrar cuántas personas donde se contrata en un período dado, pero ¿cuántas en su actividad, y si usted tiene la misma persona contratada dos veces en un año, en términos de empleados activos sólo debe ser contado como uno, ¿verdad? parece cambiar mucho el número de empleados activos en los años, cada mes se ve mejor.
@rado81 Mirando tu DAX más de cerca, una cosa que salta es que tu filtro es incorrecto:
(v_FSASHRBIDATA[EmploymentDate] <- EndOfPeriod && v_FSASHRBIDATA[TerminationDate] >- StartOfPeriod)
Debería tener este aspecto:
(v_FSASHRBIDATA[EmploymentDate] <- EndOfPeriod &&
v_FSASHRBIDATA[TerminationDate] > EndOfPeriod)
Para contar todos los empleados activos en un período determinado, desea incluir aquellos cuya fecha de terminación es posterior al final del período.
Btw - Un año también es un período, así que si la misma persona fue contratada dos veces en ese período es irrelevante. Si ese período sigue activo al final del año, solo debe haber un registro que muestre a ese individuo como activo. Por lo tanto, sólo se contarían una vez. Si su recuento está apagado, se debe a un problema diferente con su DAX.
Por último, en sus datos, hay una fecha de terminación que muestra el año 1753. Esto no funcionará con su declaración dax, ya que esto significa que la persona fue cancelada antes de ser contratada. Si esa fecha se utiliza para indicar que la persona sigue activa, debe modificar su DAX para buscar esa fecha específica (1/1/1753).
User | Count |
---|---|
2 | |
2 | |
1 | |
1 | |
1 |