Skip to main content
Announcements
New: No-code data prep in Qlik Cloud Analytics™ TAKE A TOUR
cancel
Showing results for 
Search instead for 
Did you mean: 
Anonymous
Not applicable

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

https://help.qlik.com/es-ES/sense/September2017/Subsystems/Hub/Content/Scripting/ScriptControlStatem...

1 Solution

Accepted Solutions
hector_munoz
Specialist
Specialist

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

View solution in original post

4 Replies
hector_munoz
Specialist
Specialist

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

Anonymous
Not applicable
Author

Y s yo estuviera extrayendo mis datos de un excel solo debo poner el nombre de las variables cierto?

Anonymous
Not applicable
Author

Es que por ejemplo en mi tabla tengo 3 tipo de ID

idToneladasTonelada minima
Peso Real Tarifa

10

N/A10000100
20N/A10000200
3035, 00025,000350
4050, 00035,000450

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.

Anonymous
Not applicable
Author

Ya le entendi muchas gracias