
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
Switch Case en Qlik Sense
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
- Tags:
- Group_Discussions
Accepted Solutions


- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
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


- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
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

- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
Y s yo estuviera extrayendo mis datos de un excel solo debo poner el nombre de las variables cierto?

- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
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.

- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
Ya le entendi muchas gracias
