Calcular cambios de tarifa por hora por monto

Un usuario Pregunto ✅

Anónimo

Hola a todos,

Tengo problemas para calcular los cambios de tarifa por hora. Tengo una tabla de «Tarifas» y una tabla de «Habilidades» que actualmente coinciden en una relación de muchos a muchos (que puedo eliminar si no es necesario). Es posible que esté resolviendo este problema completamente mal, pero esto es lo que tengo ahora.

Una versión simplificada de estas tablas es la siguiente:

Tabla de tarifas:

Codigo de compañia Tipo de habilidad Tarifa por hora Fecha de inicio Fecha final

1 artesano 20.00 1/1/19 31/7/19

1 Craftsman II 21.00 1/8/19 31/12/20

2 Journeyman 20.00 1/1/19 1/31/19

2 Ast. Journeyman 19.00 1/2/19 31/12/20

Tabla de habilidades:

Codigo de compañia ID de empleado Tipo de habilidad Fecha de inicio Fecha final

1 1001 Craftsman 1/1/19 31/7/19

1 1001 Craftsman II 1/8/19 31/12/20

2 1002 Journeyman 1/1/19 1/31/19

2 1002 Ast. Journeyman 01/02/19 31/12/20

*Habilidad anterior *Fecha anterior de habilidad *Habilidad Curr *Tasa anterior *Tasa de cambio

Artesano 31/7/19 20.00

Artesano II 21.00

Journeyman 31/1/19 20.00

Ast. Journeyman 19.00

*Estas son columnas calculadas que he creado. (Sin embargo, esto deja muchos campos en blanco).

Las columnas calculadas se escriben como:

Habilidad actual = SI (Tabla_de_habilidades[eff_end_date]> HOY (), Skills_Table [skill_type] , BLANCO() )
(Esto me dice si su tipo de habilidad es actual o no).
Fecha anterior de habilidad = CALCULAR (MAX (Skills_Table [eff_end_date] ), FILTER (FILTER (Skills_Table, Skills_Table[eff_end_date]
Habilidad anterior = SI (Tabla_de_habilidades [Prev Skill Date] = Tabla_de_habilidades [eff_end_date] , Skills_Table[skill_type] , BLANCO() )
Tasa anterior = CALCULAR (FIRSTNONBLANK (Rates_Table [hourly_rate] , 1), FILTRO (FILTRO (Rates_Table, Rates_Table [skill_type] = Tabla_de_habilidades [Previous Skill] ), Rates_Table [company_code] = Tabla_de_habilidades [company_code] ))
Tasa de cambio = CALCULAR (FIRSTNONBLANK (Rates_Table [hourly_rate] , 1), FILTRO (FILTRO (Rates_Table, Rates_Table[skill_type] = Tabla_de_habilidades[Current Skill] ), Rates_Table[company_code] = Tabla_de_habilidades [company_code] ))

Mi meta final es calcular el cambios de tarifa por cantidad.

Por ejemplo, en el ejemplo anterior, el empleado # 1001 tuvo un aumento de $ 1.00 / hora, mientras que el empleado # 1002 tuvo un cambio de tarifa de -1.00 / hora.

Estoy atascado en este punto … tratando de calcular la diferencia entre la tasa anterior y la tasa actual. ¿Alguna sugerencia sobre cómo podría resolver mejor esto?

smpa01

@Anónimo espero que esto sea lo que estás buscando

Tabla E

Compañía ID de empleado Habilidad Fecha de inicio Fecha final
1 1001 Artesano 1/1/2019 31/7/2019
1 1001 Craftsman2 1/8/2019 31/12/2020
2 1002 Oficial 1/1/2019 31/01/2019
2 1002 Ast.Journeyman 01/02/2019 31/12/2020
3 1003 Artesano 1/1/2004 31/12/2004
3 1003 Craftsman2 1/1/2005 31/12/2005
3 1003 Oficial 1/1/2006 31/12/2006

Tabla T

Compañía Habilidad Calificar Fecha de inicio Fecha final
1 Artesano 20 1/1/2019 31/7/2019
1 Craftsman2 21 1/8/2019 31/12/2020
2 Oficial 20 1/1/2019 31/01/2019
2 Ast.Journeyman 19 01/02/2019 31/12/2020
3 Artesano 20 1/1/2004 31/12/2004
3 Craftsman2 25 1/1/2005 31/12/2005
3 Oficial 50 1/1/2006 31/12/2006

E Tabla_resultado finalE Tabla_resultado final

Las columnas caluladas son las siguientes

Rank = 
// To get a ranking of company-employeeID group based on EndDate
RANKX(
       FILTER(E,
               EARLIER(E[Company])=E[Company]
               &&
               EARLIER(E[EmployeeID])=E[EmployeeID]),
      E[End Date],
      ,ASC
)
All_Salary = LOOKUPVALUE(T[Rate],T[Company],E[Company],T[Skill],E[Skill],T[Start Date],E[Start Date],T[End Date],E[End Date])
Last_Salary = CALCULATE(MAX(E[All_Salary]),FILTER(E, E[Rank]=EARLIER(E[Rank])-1))
Rate_Change/Hour = IF(ISBLANK(E[Last_Salary]),0,[All_Salary]-[Last_Salary])

smpa01

@Anónimo espero que esto sea lo que estás buscando

Tabla E

Compañía ID de empleado Habilidad Fecha de inicio Fecha final
1 1001 Artesano 1/1/2019 31/7/2019
1 1001 Craftsman2 1/8/2019 31/12/2020
2 1002 Oficial 1/1/2019 31/01/2019
2 1002 Ast.Journeyman 01/02/2019 31/12/2020
3 1003 Artesano 1/1/2004 31/12/2004
3 1003 Craftsman2 1/1/2005 31/12/2005
3 1003 Oficial 1/1/2006 31/12/2006

Tabla T

Compañía Habilidad Calificar Fecha de inicio Fecha final
1 Artesano 20 1/1/2019 31/7/2019
1 Craftsman2 21 1/8/2019 31/12/2020
2 Oficial 20 1/1/2019 31/01/2019
2 Ast.Journeyman 19 01/02/2019 31/12/2020
3 Artesano 20 1/1/2004 31/12/2004
3 Craftsman2 25 1/1/2005 31/12/2005
3 Oficial 50 1/1/2006 31/12/2006

E Tabla_resultado finalE Tabla_resultado final

Las columnas caluladas son las siguientes

Rank = 
// To get a ranking of company-employeeID group based on EndDate
RANKX(
       FILTER(E,
               EARLIER(E[Company])=E[Company]
               &&
               EARLIER(E[EmployeeID])=E[EmployeeID]),
      E[End Date],
      ,ASC
)
All_Salary = LOOKUPVALUE(T[Rate],T[Company],E[Company],T[Skill],E[Skill],T[Start Date],E[Start Date],T[End Date],E[End Date])
Last_Salary = CALCULATE(MAX(E[All_Salary]),FILTER(E, E[Rank]=EARLIER(E[Rank])-1))
Rate_Change/Hour = IF(ISBLANK(E[Last_Salary]),0,[All_Salary]-[Last_Salary])

Anónimo

En respuesta a smpa01

¡Esto es fantástico! Gracias.

Solo hice un par de cambios …

LOOKUPVALUE seguía devolviendo un error debido a varios valores. Entonces usé:

All_Salary = CALCULATE (MAX (R [hourly_rate] ), FILTRO (R, R [skill_type] = E [skill_type] && R [company_code] = E [company_code] ))
* R = mi tabla de tarifas
También,
Last_Salary = CALCULATE(MAX(E[All_Salary]),FILTER(E, E[Rank]=EARLIER(E[Rank])-1))

Necesitaba un criterio más … Así que agregué esto al final …

Último Salario = CALCULAR (MAX (E [All_Salary]), FILTRO (E, E[Rank]= ANTES (E[Rank]) -1 && E[employee_id] = ANTES (E[employee_id] )))

@Anónimo

Puede utilizar la función LOOKUPVALUE para agregar una columna calculada y luego consulte esta publicación.

Anónimo

En respuesta a v-chuncz-msft

El problema que tengo con LOOKUPVALUE es que siempre devuelve «Se proporcionó una tabla de valores múltiples donde se esperaba un valor único».

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *