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

Be one of the first to start using Fabric Databases. View on-demand sessions with database experts and the Microsoft product team to learn just how easy it is to get started. Watch now

Reply
Syndicate_Admin
Administrator
Administrator

Aumento salarial irregular

¡Hola a todos!

Soy bastante nuevo en Power BI y no estoy realmente acostumbrado a todas las fórmulas. Hasta ahora podía evitarlo, pero ahora necesito una solución sofisticada.

Tengo esta tabla de muestras, que muestra mutaciones (no son regulares) en el salario y la carrera de alguien, que no están necesariamente vinculadas (véase el nombre C) y no todo el mundo comienza como un junior (ver nombre B).

NombreFechaSalarioCarreraEstado
A20-1-2021 2.750,00 €JuniorEn
B5-12-2020 3.500,00 €Senior
C1-12-2020 Medior
C20-10-2020 3.100,00 €
D8-3-2020 FUERA
B10-11-2019 3.100,00 €MediorEn
C8-8-2019 2.750,00 €JuniorEn
D5-6-2019 2.750,00 €JuniorEn

Tengo una tabla de calendario separada.

Necesito la siguiente información para un informe anual (con una segmentación de datos):

  • Cuántas personas han tenido un aumento
  • El cambio porcentual en el salario por persona que tuvo un aumento
  • Cuántas personas fueron promovidas
  • La corriente ... de todos (necesito estos valores en otra tabla, pero también por año)
    • Salario
    • Carrera
    • Estado

Creo que para cada pregunta, necesito mirar hacia abajo en este orden (espero que mi notación tenga sentido):

  1. Nombre = CurrentName
  2. Fecha < CurrentDate

Y hacer las cosas con medidas, CALCULAR y FILTRAR. He intentado muchas cosas, pero recibo errores todo el tiempo y todavía no tengo un presentimiento por estas cosas. Ya he mirado publicaciones como esta https://community.powerbi.com/t5/Desktop/Year-over-Year-salary-increase-for-each-employee/td-p/35398... pero este ejemplo tiene intervalos regulares y no tiene valor vacío.

Por favor, dígame si mi información no está clara o cuándo necesita más información. Si usted puede ayudarme con una pregunta ya estoy muy agradecido!

1 ACCEPTED SOLUTION
Syndicate_Admin
Administrator
Administrator

No hay @akraamer

Probé su medida, su medida seguirá mostrando valores en D (Status = OUT) cuando currentdate >Date.

Su medida:

Current Salary = 
var CurrName = LASTNONBLANK('Table'[Name],[Name])
return

var LastSalDate = 
CALCULATE(
    MAX('Table'[Date]),
    FILTER(
        'Table',
        'Table'[Date] <= MAX('Calendar'[Date]) &&
        'Table'[Name] = CurrName &&
        'Table'[Salary] > 0)
)
return

LOOKUPVALUE(
    'Table'[Salary],
    'Table'[Name],
    CurrName,
    'Table'[Date],
    LastSalDate
)

Resultado:

CurrentDate = 2021/12/31, D debe salir de la empresa, pero todavía obtenemos el resultado.

1.png

Por favor, pruebe mi medida:

Measure = 
VAR _SelectDate = MAX('Calendar'[Date])
VAR _LastDate = MAXX(FILTER('Table','Table'[Date]<=_SelectDate),'Table'[Date])
VAR _LastStatus = CALCULATE(MAX('Table'[Status]),FILTER('Table','Table'[Date] = _LastDate))
VAR _LastSalary = CALCULATE(SUM('Table'[Salary]),FILTER('Table','Table'[Date] = _LastDate&&_LastStatus<>"OUT"))
VAR _LastDateNoBlank = MAXX(FILTER('Table','Table'[Date]<=_SelectDate&&'Table'[Salary]<>BLANK()),'Table'[Date])
VAR _LastSalaryNoblank = CALCULATE(SUM('Table'[Salary]),FILTER('Table','Table'[Date] = _LastDateNoBlank))
Return
IF(_LastStatus = "OUT",BLANK(),IF(_LastSalary= BLANK(),_LastSalaryNoblank,_LastSalary))

El resultado es el siguiente.

CurrentDate = 2021/12/31

3.png

CurrentDate = 2019/11/10

4.png

Saludos

Rico Zhou

Si este post ayuda, entonces considere Aceptarlo como la solución para ayudar a los otros miembros a encontrarlo más rápidamente.

View solution in original post

6 REPLIES 6
Syndicate_Admin
Administrator
Administrator

No hay @akraamer

Probé su medida, su medida seguirá mostrando valores en D (Status = OUT) cuando currentdate >Date.

Su medida:

Current Salary = 
var CurrName = LASTNONBLANK('Table'[Name],[Name])
return

var LastSalDate = 
CALCULATE(
    MAX('Table'[Date]),
    FILTER(
        'Table',
        'Table'[Date] <= MAX('Calendar'[Date]) &&
        'Table'[Name] = CurrName &&
        'Table'[Salary] > 0)
)
return

LOOKUPVALUE(
    'Table'[Salary],
    'Table'[Name],
    CurrName,
    'Table'[Date],
    LastSalDate
)

Resultado:

CurrentDate = 2021/12/31, D debe salir de la empresa, pero todavía obtenemos el resultado.

1.png

Por favor, pruebe mi medida:

Measure = 
VAR _SelectDate = MAX('Calendar'[Date])
VAR _LastDate = MAXX(FILTER('Table','Table'[Date]<=_SelectDate),'Table'[Date])
VAR _LastStatus = CALCULATE(MAX('Table'[Status]),FILTER('Table','Table'[Date] = _LastDate))
VAR _LastSalary = CALCULATE(SUM('Table'[Salary]),FILTER('Table','Table'[Date] = _LastDate&&_LastStatus<>"OUT"))
VAR _LastDateNoBlank = MAXX(FILTER('Table','Table'[Date]<=_SelectDate&&'Table'[Salary]<>BLANK()),'Table'[Date])
VAR _LastSalaryNoblank = CALCULATE(SUM('Table'[Salary]),FILTER('Table','Table'[Date] = _LastDateNoBlank))
Return
IF(_LastStatus = "OUT",BLANK(),IF(_LastSalary= BLANK(),_LastSalaryNoblank,_LastSalary))

El resultado es el siguiente.

CurrentDate = 2021/12/31

3.png

CurrentDate = 2019/11/10

4.png

Saludos

Rico Zhou

Si este post ayuda, entonces considere Aceptarlo como la solución para ayudar a los otros miembros a encontrarlo más rápidamente.

Syndicate_Admin
Administrator
Administrator

¡Yo mismo he descubierto una parte de mi pregunta!
Para encontrar la última fecha por persona que tenía un valor para salario, hice esto:

FirstNextSalaryDate = 
IF(NL_Mutations[Salary]>0,
CALCULATE(
    MAX(NL_Mutations[Date]),
    FILTER(
        NL_Mutations,
        NL_Mutations[Name] = EARLIER(NL_Mutations[Name]) &&
        NL_Mutations[Salary]>0 &&
        NL_Mutations[Date] < EARLIER(NL_Mutations[Date])
        )
    )
)

Esto funcionó perfectamente. Luego usé esta columna para calcular el SalaryIncrease:

SalaryIncrease = 
IF(
    NOT(ISBLANK(NL_Mutations[FirstNextSalaryDate])),
    NL_Mutations[Salary]-LOOKUPVALUE(
        NL_Mutations[Salary],
        NL_Mutations[Name],
        NL_Mutations[Name],
        NL_Mutations[Date],
        NL_Mutations[FirstNextSalaryDate]),
    BLANK()
)

Además, olvidé decir que ya sabía quién tenía un aumento, pero necesito compararlos con las personas cuyo estatus estaba en el inicio del año elegido en la cortadora. Por lo tanto, la única pregunta que todavía está en pie es cómo hacer una medida para el estatus.

Raise = 
IF(
    NOT(ISBLANK(NL_Mutations[SalaryIncrease])),
    "Yes",
    "No"
    )

No hay @akraamer

¿Podría mostrarme su lógica de cálculo para calcular por segmentación de fechas?

En la muestra:

1.png

¿Por qué el salario de C's en 2020/12/1 está en blanco? Y todos los estados excepto la primera fecha (2019/08/08) están en blanco. ¿Rasie y promover tienen el mismo significado?

Si tengo una segmentación de fechas de 2019/01/01 a 2021/01/01, por favor muéstreme una muestra como cuando seleccione date = xxxx, y desea obtener el resultado como xxx. Es mejor para ti mostrarme una captura de pantalla.

Saludos

Rico Zhou

Si este post ayuda, entonces considere Aceptarlo como la solución para ayudar a los otros miembros a encontrarlo más rápidamente.

Hola @RicoZhou , gracias por su respuesta!

Subir y promover es algo diferente. El aumento es un aumento en el salario, la promoción es cuando se obtiene un nuevo puesto. A menudo esto está vinculado, pero no siempre. El estado indica cuándo alguien comenzó a trabajar en la empresa o cuando alguien se fue.

No entiendo completamente lo que estás pidiendo, pero así es como quiero que parezca para el salario cuando tendría una mesa y la cortadora establecida en 2020:

akraamer_0-1614593382091.png

Creo que he descubierto parte de la solución para el salario, pero todavía tengo algunos problemas. Este es mi código:

Current Salary = 
var CurrName = LASTNONBLANK(Table[Name],[Name])
return

var LastSalDate = 
CALCULATE(
    MAX(Table[Date]),
    FILTER(
        Table,
        Table[Name] = CurrName &&
        Table[Salary] > 0)
)
return

LOOKUPVALUE(
    Table[Salary],
    Table[Name],
    CurrName,
    Table[Date],
    LastSalDate
)

Los problemas que he encontrado hasta ahora son:

  • Cuando la última mutación fue una diferencia salarial, no se muestra y toma el último salario antes
  • Cuando alguien no tiene una mutación salarial en 2020, no muestra a la persona en absoluto en la lista, pero debería mostrar el último salario de la persona desde, por ejemplo, el año anterior.

Además, me gustaría una manera de mostrar sólo a las personas cuyo estatus no estaba fuera a principios de ese año, porque que no estaban trabajando en la empresa ese año. Pero primero necesito arreglar los puntos mencionados anteriormente. Espero que puedas ayudarme 😊

¡Resolví mis dos problemas!

Bueno, en realidad el primero no existía, lo vi mal. Pero para el segundo, esto ayudó a
https://community.powerbi.com/t5/Desktop/Ignore-Slicer-in-measure/td-p/49734

Eliminé todas las relaciones con el calendario y cambié la parte de cálculo a:

CALCULATE(
    MAX(Table[Date]),
    FILTER(
        Table,
        Table[Date] <= MAX(Calendar[Date]) &&
        Table[Name] = CurrName &&
        Table[Salary] > 0)
)

Oh, el primer problema que he mencionado no es cierto, me veía mal. Así que eso me deja al segundo problema; ¿cómo puedo ver los datos antes del año en la segmentación de datos?

Helpful resources

Announcements
Las Vegas 2025

Join us at the Microsoft Fabric Community Conference

March 31 - April 2, 2025, in Las Vegas, Nevada. Use code MSCUST for a $150 discount!

Dec Fabric Community Survey

We want your feedback!

Your insights matter. That’s why we created a quick survey to learn about your experience finding answers to technical questions.

ArunFabCon

Microsoft Fabric Community Conference 2025

Arun Ulag shares exciting details about the Microsoft Fabric Conference 2025, which will be held in Las Vegas, NV.

December 2024

A Year in Review - December 2024

Find out what content was popular in the Fabric community during 2024.

Top Solution Authors
Top Kudoed Authors