Unlock a world of possibilities! Login now and discover the exclusive benefits awaiting you.
Buen Dia
Disculpen estoy intentando hacer un switch case con mi tabla ya que en este caso quiero multiplicar tarifas dependiendo el ID de n producto y como son varias tarifas se me ocurrio hacerlo por medio de un switch case en vez de muchos IF anidados encontre esta documentacion pero no he podido aplicarla
Hola Nacianceno,
El SWITCH en este caso se utiliza como la sentencia IF..THEN..ELSE y no la función If(); es decir, como una estructura de control de script.
En tu caso te podría servir la combinación de funciones Pick() y Match():
If(Match([ID Producto], '001', '002', '008', '999') = 0, // Se comprueba si es un producto que no tiene tarifa propia
vdTarifa_Resto, // Tarifa por defecto (resto)
Pick(Match([ID Producto], '001', '002', '008', '999'), // Productos con tarifa propia
vdTarifa_001,
vdTarifa_002,
vdTarifa_008,
vdTarifa_999)
; aunque te recomiendo que te crees una tabla de mapeo (MAPPING LOAD) en la que almacenes los códigos de producto y las tarifas y luego uses la función ApplyMap() para traerte la tarifa de cada registro:
MAP_TARIFAS:
MAPPING LOAD *
INLINE [
MAP_TARIFAS Producto, MAP_TARIFAS Tarifa
001, 100
002, 120
008, 125
999, 200
];
SET vdTarifa_Resto = 50;
HECHOS:
LOAD *,
ApplyMap('MAP_TARIFAS', [ID Producto], vdTarifa_Resto) AS Tarifa
FROM mi_Fichero.txt;
Creo que las tablas de mapeo son mejor solución que el Pick() y el Match() combinados ya que requieren menos mantenimiento.
Espero que te sirva...
Saludos,
H
Hola Nacianceno,
El SWITCH en este caso se utiliza como la sentencia IF..THEN..ELSE y no la función If(); es decir, como una estructura de control de script.
En tu caso te podría servir la combinación de funciones Pick() y Match():
If(Match([ID Producto], '001', '002', '008', '999') = 0, // Se comprueba si es un producto que no tiene tarifa propia
vdTarifa_Resto, // Tarifa por defecto (resto)
Pick(Match([ID Producto], '001', '002', '008', '999'), // Productos con tarifa propia
vdTarifa_001,
vdTarifa_002,
vdTarifa_008,
vdTarifa_999)
; aunque te recomiendo que te crees una tabla de mapeo (MAPPING LOAD) en la que almacenes los códigos de producto y las tarifas y luego uses la función ApplyMap() para traerte la tarifa de cada registro:
MAP_TARIFAS:
MAPPING LOAD *
INLINE [
MAP_TARIFAS Producto, MAP_TARIFAS Tarifa
001, 100
002, 120
008, 125
999, 200
];
SET vdTarifa_Resto = 50;
HECHOS:
LOAD *,
ApplyMap('MAP_TARIFAS', [ID Producto], vdTarifa_Resto) AS Tarifa
FROM mi_Fichero.txt;
Creo que las tablas de mapeo son mejor solución que el Pick() y el Match() combinados ya que requieren menos mantenimiento.
Espero que te sirva...
Saludos,
H
Y s yo estuviera extrayendo mis datos de un excel solo debo poner el nombre de las variables cierto?
Es que por ejemplo en mi tabla tengo 3 tipo de ID
idToneladas | Tonelada minima | Peso Real | Tarifa |
---|---|---|---|
10 | N/A | 10000 | 100 |
20 | N/A | 10000 | 200 |
30 | 35, 000 | 25,000 | 350 |
40 | 50, 000 | 35,000 | 450 |
Lo que busco es por ejemplo que apartir del idToneladas 30 si es que el peso real es menor a 35,000 se multiplique la tarifa que tenga asignada (la tarifa puede variar) por las 35,000 toneladas minimas y si es mayor a 35,000 que multiplique el peso por la tarifa que tiene asignada.
Todos estos datos los tengo en un excel y realmente no se como hacer una tabla de mapeo.
Ya le entendi muchas gracias