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:
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.
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 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 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é:
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] )))
v-chuncz-msft
@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».