Skip to main content
cancel
Showing results for 
Search instead for 
Did you mean: 

Earn a 50% discount on the DP-600 certification exam by completing the Fabric 30 Days to Learn It challenge.

Reply
Syndicate_Admin
Administrator
Administrator

Registros únicos basados en el nombre del empleado

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 |

12 REPLIES 12
Syndicate_Admin
Administrator
Administrator

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.

1.png

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

1.png2.png

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.

yasbos_0-1658768048665.pngyasbos_1-1658768094355.png

@yasbos
Sí, pero los empleados de años anteriores siguen activos. ¿No es así?

@tamerj1 , Muchas gracias. Sí. Esto parece estar funcionando. Muy apreciado.

@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!

Syndicate_Admin
Administrator
Administrator

Hola

Intenté crear un archivo pbix de muestra como el siguiente.

Por favor, compruebe la imagen de abajo y el archivo pbix adjunto.

Untitled.png

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!!

yasbos_0-1658688758785.png

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.

yasbos_0-1658721386992.pngyasbos_1-1658721410226.png

@Jihwan_Kim He estado haciendo modificaciones a la lógica de fecha en su código, en vano. 😞

Helpful resources

Announcements
Microsoft Fabric Learn Together

Microsoft Fabric Learn Together

Covering the world! 9:00-10:30 AM Sydney, 4:00-5:30 PM CET (Paris/Berlin), 7:00-8:30 PM Mexico City

PBI_APRIL_CAROUSEL1

Power BI Monthly Update - April 2024

Check out the April 2024 Power BI update to learn about new features.

April Fabric Community Update

Fabric Community Update - April 2024

Find out what's new and trending in the Fabric Community.