Earn a 50% discount on the DP-600 certification exam by completing the Fabric 30 Days to Learn It challenge.
Saludos a todos 🙂 Intenté resolver este problema a continuación en SQL (mi preferencia), pero no pude, así que ahora estoy tratando de resolverlo en DAX.
Existe un escenario en el que un empleado se considera activo con la empresa en función de si está activo con al menos uno de los clientes de la empresa. El siguiente ejemplo ilustra esto. Los seis registros pertenecen al mismo empleado, EmpX, que se muestra en la columna Full_Name. Sin embargo, debido a que EmpX proporciona servicios a seis clientes, C1, C2, etc., como se muestra en la columna Código, EmpX aparece 6 veces con diferentes fechas de inicio (siempre tiene un valor) y End_Date (que tendrá un valor solo si el servicio de EmpX a este cliente se ha interrumpido).
Lo que estoy tratando de hacer es contar el número de empleados que han estado activos en cada año. El criterio activo es que si el empleado ha estado activo durante al menos un cliente durante ese año (la fecha de inicio es igual o inferior al año), entonces este empleado se cuenta como activo en, digamos, 2020. Logré hacer este paso agregando las últimas tres columnas que indican si el empleado estuvo / está activo durante ese año para ese cliente. Sin embargo, ahora necesito contar los empleados que estaban / están activos cada año. Si agrego los 1s debajo de cada una de las columnas, contaré claramente al mismo empleado varias veces como activo durante este año.
En el siguiente ejemplo, EmpX debe contarse como solo 1 bajo cada año, en lugar de ahora 5 bajo 2020, 4 bajo 2021 y 4 bajo 2022.
En resumen, necesito contar al empleado como activo para nuestra empresa (no el cliente) durante un año determinado. El empleado está activo para la empresa si está activo con al menos un cliente. Una vez que se logra, puedo resumir el número de empleados activos por año para producir el total por año de empleados activos para nuestra empresa.
Gracias.
| | de código FULL_NAME | Start_Date | End_Date | ACTIVE_2020 | ACTIVE_2021 | ACTIVE_2022 |
| ----------- | ----------- | ----------- | ----------- | ----------- | ----------- | ----------- |
| c1 | | EmpX 2017-04-21 | | NULL 1 | 1 | 1 |
| c2 | | EmpX 2014-12-24 | 2021-05-12 | 1 | 0 | 0 |
| c3 | | EmpX 2013-01-11 | | NULL 1 | 1 | 1 |
| c4 | | EmpX 31/05/2013 | | NULL 1 | 1 | 1 |
| c5 | | EmpX 2014-12-24 | | NULL 1 | 1 | 1 |
| c6 | | EmpX 2017-04-21 | 2017-04-21 | 0 | 0 | 0 |
Hola @yasbos
Otra forma de hacerlo: https://www.dropbox.com/t/MvlaosDA8p7vw6dD
Lo que no entiendo es por qué no quieres incluir a EmpZ en 2020 mientras estuvo activo hasta agosto de 2020. Por favor, aclare este punto y cuál es su criterio.
Active Employees =
VAR CurrentPeriod =
VALUES ( 'Date'[Date] )
RETURN
SUMX (
VALUES ( Data[FULL_NAME] ),
VAR StartDate =
CALCULATE ( MIN ( Data[Start_Date] ) )
VAR EndaDateCheck =
COUNTROWS ( CALCULATETABLE ( Data, Data[End_Date] <> BLANK ( ) ) )
= COUNTROWS ( CALCULATETABLE ( Data ) )
VAR EndDate =
IF ( EndaDateCheck, CALCULATE ( MAX ( Data[End_Date] ) ), TODAY ( ) )
VAR ServicePeriod =
CALENDAR ( StartDate, EndDate )
RETURN
IF ( NOT ISEMPTY ( INTERSECT ( CurrentPeriod, ServicePeriod ) ), 1 )
)
Muchas gracias, @tamerj1 . Si el año terminó y el empleado todavía estaba activo, entonces me gustaría contarlos. Entonces, si el empleado comenzó en 2014 y terminó en 2014, entonces me gustaría excluirlo del conteo. Además, si el empleado comenzó en 2013 y terminó en, digamos, 2016, entonces estuvo activo en 2013, 2014 y 2015. Sin embargo, todavía necesito contar todos los empleados activos para el año en curso (2022) porque necesito comparar 2022 con los años anteriores. Verá, en mi opinión, la solución debería ser fácilmente convertible entre incluir el año en que el empleado dejó de estar activo o excluirlo. Básicamente pensé / creo que deberían ser solo los signos de igualdad / desigualdad los que deberán ajustarse como se desee. Gracias de nuevo. Te @tamerj1 y @Jihwan_Kim son maravillosos.
@YASBOS HI
Transformé la misma fórmula a otra trabajando solo a nivel de año y con una simple resta ( - 1 ) podemos obtener el resultado deseado. Esta solución es más rápida en términos de rendimiento, pero funciona solo a nivel de año, no de fecha, no de semana, ni de mes. https://www.dropbox.com/t/zkNkoE4gdTOvgLKC
Annual Active Employees =
VAR CurrentPeriod =
VALUES ( 'Date'[Date].[Year] )
RETURN
SUMX (
VALUES ( Data[FULL_NAME] ),
VAR StartDate =
YEAR ( CALCULATE ( MIN ( Data[Start_Date] ) ) )
VAR EndaDateCheck =
COUNTROWS ( CALCULATETABLE ( Data, Data[End_Date] <> BLANK ( ) ) )
= COUNTROWS ( CALCULATETABLE ( Data ) )
VAR EndDate =
IF ( EndaDateCheck, YEAR ( CALCULATE ( MAX ( Data[End_Date] ) ) ) - 1, YEAR ( TODAY ( ) ) )
VAR ServicePeriod =
GENERATESERIES ( StartDate, EndDate, 1 )
RETURN
IF ( NOT ISEMPTY ( INTERSECT ( CurrentPeriod, ServicePeriod ) ), 1 )
)
Gracias, @tamerj1 . Sin embargo, algo parece estar mal, a menos que me falte algo. Por ejemplo, tiene 3 para 2015, cuando 2015 solo tiene una entrada. Problemas similares con 2016, etc. No parecen cumplir con los criterios.
@tamerj1 ¡ oh mi! ¡¡Tienes razón!! Arrepentido... en reuniones (y en una ahora) y claramente no estoy enfocado. Revisaré después de hecho en la próxima hora más o menos. Me pondré en contacto contigo en menos de 2 horas. ¡Muchas gracias!
Hola
Intenté crear un archivo pbix de muestra como el siguiente.
Por favor, compruebe la imagen de abajo y el archivo pbix adjunto.
Active FullName count measure: =
VAR _mindate =
MIN ( 'Calendar'[Date] )
VAR _maxdate =
MAX ( 'Calendar'[Date] )
VAR _activeemptable =
SUMMARIZE (
FILTER (
ADDCOLUMNS (
SUMMARIZE ( Data, Data[Code], Data[FULL_NAME] ),
"@active",
CALCULATE (
COUNTROWS (
FILTER (
Data,
Data[Start_Date] <= _maxdate
&& OR ( Data[End_Date] >= _mindate, Data[End_Date] = BLANK () )
)
)
)
),
[@active] >= 1
),
Data[FULL_NAME]
)
RETURN
IF( HASONEVALUE('Calendar'[Year CC] ), COUNTROWS(_activeemptable) )
@Jihwan_Kim ¡Muchas gracias! Parece que hay una pequeña falla allí. por ejemplo, los empleados activos de 2020 deben ser 2, pero la tabla se muestra 3. De todos modos, realmente aprecio su trabajo. ¡¡Esto es genial!!
Hola
EmpZ para code10 funcionó en 2020.
Gracias @Jihwan_Kim . La pantalla que proporcioné arriba y abajo muestra que el total de 202 debería ser 2. Sin embargo, la tabla en su pbix muestra 3 para 2020. Muchas gracias por el esfuerzo.
@Jihwan_Kim He estado haciendo modificaciones a la lógica de fecha en su código, en vano. 😞
Covering the world! 9:00-10:30 AM Sydney, 4:00-5:30 PM CET (Paris/Berlin), 7:00-8:30 PM Mexico City
Check out the April 2024 Power BI update to learn about new features.