Skip to main content
Announcements
Join us on Sept. 17 to hear how our new GenAI Assistant empowers data professionals: REGISTER
cancel
Showing results for 
Search instead for 
Did you mean: 
carlosac
Creator II
Creator II

PROBLEMA CON RANGOS

Buenos dias:

Tengo el siguiente problema en el que me he atascado.

Parto de 2 tablas y quiero calcular la columna coste final de la primera tabla.

Esta se calcula multiplicando el nº de Km por el COEFICIENTE que aparece en la tabla de la derecha : Sobra decir que el sistema lo que deberia hacer es coger los km, buscar en el rango y agencia correspondiente y aplicarle el COEFICIENTE

Si alguien me puede ayudar se lo agradaceria de antemano....

agenciaKmcoste finalagenciaRANGO KmCOEFICIENTE
4949*10-501
125125*2mas de 502
B2424*3B0-753
B200200*4Bmas de 754
5 Replies
ecolomer
Master II
Master II

Lo mas sencillo sería que la tabla 2 la transformaras en:

Agencia     Rango (Km)     Coef_1     Coef_2

A               50                    1               2

B               75                    3               4

de forma que si los Km < Rango aplicas C1 y si es superior aplicas C2.

No se si me he explicado bien.

Si no lo sacas, dímelo y lo trabajamos mas.

ecolomer
Master II
Master II

Te añado un ejemplo con lo dicho

sorrakis01
Specialist
Specialist

Hola,

La solución de Enrique es buena y sino lo tendrás que hacer con If's, pero te saldrán unos "cuantos", dependiendo de la cantidad de agencias y rangos que tengas.

Saludos,

sorrakis01
Specialist
Specialist

Hola,

Le estaba dando vueltas al tema.. y no se me ocurre nada más que la opción que te da Enrique o en el caso de que tengas pocas agencias, rangos y coeficientes hacer unos simple IF

If(agencia='A',If(Km<=50,Km*1,Km*2),If(Km<=75,Km*3,Km*4))

Otras funciones que podrían serte útiles para este caso son las de Pick y Match.

Si quieres lo seguimos viendo para ver que opciones más hay.

Saludos,

Not applicable

Hola.

Una alternativa de solución es que estructures bien tus tablas en el Editor de Script, esto puede ayudarte para múltiples Rangos de Kms que pueda tener las Agencias.

Detallo un ejemplo (Las tablas INLINE puede ser reemplazada con cualquier fuente de datos).

//Primera tabla que se carga

Agencia:

LOAD * INLINE [

    Agencia, Km

    A, 49

    A, 125

    B, 24

    B, 200

];

//haciendo un left con la segunda tabla, cada fila de la primera tabla sera repetido n veces según la llave de la segunda tabla

//Se ha creado mas campos adicional a los que mostraste con la finalidad de hacer mas robusta el diseño de las tablas

//Campo Secuencia va servir de llave al final, RangoKm como descripción, RangoMin y RangoMax como campos de evaluación

left join (Agencia)

LOAD * INLINE [

    Agencia,Secuencia,RangoKm,RangoMin, RangoMax, Coeficiente

    A, A1,0-50, 0, 50, 1

    A, A2,mas de 50, 50, 1000,2

    B, B1,0-75, 0, 75, 3

    B, B2,mas de 75, 75, 1000, 4

];

//En base a la tabla Agencia creamos la tabla TempAgencia, en donde aplicamos una condicional que determina si el campo "Km" esta en un rango.

TempAgencia:

LOAD

Agencia,

Km,

Secuencia,

if(Km>RangoMin and Km<RangoMax,1,0) as Cod

Resident Agencia;

//Borramos la tabla Agencia ya que la tabla TempAgencia ahora nos sirve como base

Drop table Agencia;

//En base a la tabla TempAgencia volvemos crear una tabla con el nombre Agencia, el cual sera filtrado solo los que se encuentren en su rango y agregamos el campo "Secuencia" el cual sera llave de la 2da Tabla.

Agencia:

LOAD

Agencia,

Km,

Secuencia

Resident TempAgencia

where Cod=1;

//Borramos la tabla TempAgencia por que ya no se va utilizar

Drop Table TempAgencia;

//Creamos la 2da Tabla AgenciaKm pero acá no estamos considerando el campo "Agencia" ya que si se considera se tendría 2 llaves en ambas tablas y esto crearía tabla con llaves sintéticas.

AgenciaKm:

LOAD * INLINE [

    Secuencia,RangoKm, RangoMin, RangoMax, Coeficiente

    A1,0-50, 0, 50, 1

    A2,mas de 50, 50, 1000,2

    B1,0-75, 0, 75, 3

    B2,mas de 75, 75, 1000, 4

];


En base a esa nueva estructura podrás realizar tu expresión.


13.JPG.jpg


Espero te ayude en algo.


Atte.

Luis Valencia