March 31 - April 2, 2025, in Las Vegas, Nevada. Use code MSCUST for a $150 discount! Early bird discount ends December 31.
Register NowBe 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
¡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).
Nombre | Fecha | Salario | Carrera | Estado |
A | 20-1-2021 | 2.750,00 € | Junior | En |
B | 5-12-2020 | 3.500,00 € | Senior | |
C | 1-12-2020 | Medior | ||
C | 20-10-2020 | 3.100,00 € | ||
D | 8-3-2020 | FUERA | ||
B | 10-11-2019 | 3.100,00 € | Medior | En |
C | 8-8-2019 | 2.750,00 € | Junior | En |
D | 5-6-2019 | 2.750,00 € | Junior | En |
Tengo una tabla de calendario separada.
Necesito la siguiente información para un informe anual (con una segmentación de datos):
Creo que para cada pregunta, necesito mirar hacia abajo en este orden (espero que mi notación tenga sentido):
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!
Solved! Go to Solution.
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.
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
CurrentDate = 2019/11/10
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.
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.
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
CurrentDate = 2019/11/10
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.
¡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"
)
¿Podría mostrarme su lógica de cálculo para calcular por segmentación de fechas?
En la muestra:
¿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:
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:
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?
March 31 - April 2, 2025, in Las Vegas, Nevada. Use code MSCUST for a $150 discount!
Your insights matter. That’s why we created a quick survey to learn about your experience finding answers to technical questions.
Arun Ulag shares exciting details about the Microsoft Fabric Conference 2025, which will be held in Las Vegas, NV.