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

Multiples Tarifas con Mapping

Buenas tardes compañeros

Hace poco tenia la duda de como aplicar distintos pesos segun el ID de toneladas me comentaron que usara MAPPING para hacer este mapeo de IDS y valores

Ahora la pregunta es

En los valores que se le asignan al ID puede tener multiples valores dependiendo de un rango por ejemplo

Actualmente mi mapeo es de esta manera

IDTonelada

Peso Minimo

10

35 000

2030 000

30

20 000

MAP_TARIFAS:

MAPPING LOAD *

INLINE [

MAP_TARIFAS  IDTONELADA, MAP_TARIFAS  PESOMINIMO

30, 35 000

40, 30 000

50, 20 000

];

Pero ahora ocupo utilizar multiples tarifas

Destino

0 a 4 Ton's

4 a 7 Ton's

7 a 15 Ton's

15 a 30 Ton's

28 a 30 Ton's

10

$ 2,070

$ 2,530

$ 4,025

$ 6,900

20

$ 2,070

$ 2,530

$ 4,025

$ 6,900

30

$ 2,070

$ 2,530

$ 4,025

$ 6,900

40

$ 6,325

$ 9,775

Gracias por su paciencia y ayuda

5 Replies
jolivares
Specialist
Specialist

tu puede hacer que el ID de busqueda sea la sumatoria de los dos campos... por ejemplo:

ID_T, PesoM

10-4, 35000

10-7, 2555

10-15, 2133

20-4, 2555

etc...

hector_munoz
Specialist
Specialist

Hola Nacianceno,

En este caso no puedes utilizar tabla de mapeo (MAPPING LOAD) porque no tienes un listado de valores discretos con los que hacer la asignación, sino un listado de valores por tramo.

En estos casos lo que yo hago es un JOIN entre la información de hechos y la maestra por la clave haciendo un producto cartesiano (siempre que no haya problemas de rendimiento por ser los conjuntos muy grandes; en caso contrario mirar la sentencia INTERVALMATCH) y luego "limpiándolo" de los registros que no sirvan.

Te adjunto un ejemplo en el que verás, con tus datos, paso a paso lo que comento, y lo pego aquí también:

HECHOS:

LOAD *

INLINE [

IDTonelada, Peso Minimo

10, 35000

20, 30000

30, 20000

];

TARIFAS1:

LOAD *

INLINE [

Destino, 0 a 4 Ton's, 4 a 7 Ton's, 7 a 15 Ton's, 15 a 28 Ton's, 28 a 30 Ton's, 30 a 99 Ton's

10, 2.070, 2.530, 4.025, , 6.900,

20, 2.070, 2.530, 4.025, , 6.900,

30, 2.070, 2.530, 4.025, , 6.900,

40, 6.325, , 9.775, , ,

];

TARIFAS2:

CROSSTABLE   (Límite, Tarifa, 1)

LOAD         ! !*

RESIDENT     TARIFAS1;

TARIFAS3:

LOAD         Destino                         AS [ID Destino],

             SubField(Límite, ' ', 1) * 1000 AS [Límite Inferior],

             SubField(Límite, ' ', 3) * 1000 AS [Límite Superior],

             Tarifa                          AS [Importe Tarifa]

RESIDENT     TARIFAS2;

LEFT JOIN    (HECHOS)

LOAD         [ID Destino]      AS IDTonelada,

             [Límite Inferior] AS [Límite Inferior Hechos],

             [Límite Superior] AS [Límite Superior Hechos],

             [Importe Tarifa]  AS [Importe Tarifa Hechos]

RESIDENT     TARIFAS3;

HECHOS_FINALES:

LOAD         IDTonelada              AS [ID Tonelada],

             [Peso Minimo]           AS [Peso],

             [Importe Tarifa Hechos] AS [Importe Tarifa Hechos2]

RESIDENT     HECHOS

WHERE        [Peso Minimo] > [Límite Inferior Hechos] AND

             [Peso Minimo] <= [Límite Superior Hechos];

  • Mira la sentencia CROSSTABLE para entender por qué la he utilizado.
  • Cuidado cuando declares los tramos, que no se superpongan.

Espero que te sirva...

Saludos,

H

Anonymous
Not applicable
Author

Gracias por responder Hector pero entonces ahora como podre usar el mapeo en mi script ya que anteriormente usaba apply map para consultar los datos de mi mapeo te adjunto la aplicacion

hector_munoz
Specialist
Specialist

Hola Nacianceno,

Ahora no tengo instalado Qlik Sense en mi equipo actual por lo que no puedo abrir tu QVF... Si quieres usar la función ApplyMap() tienes que tener antes una tabla de mapeo (MAPPING LOAD) con todas las posibles combinaciones de IDs y toneladas más su tarifa... Algo así como:

MAP_TARIFAS:

MAPPING LOAD *

INLINE [

ID MAPPING, Tarifa MAPPING

10|0, 2.070

10|1, 2.070

10|2, 2.070

10|3, 2.070

10|4, 2.070

10|5, 2.530

...

...

30|99, 9.775

];

, y luego en la carga de los hechos:

HECHOS:

LOAD     *,

               ApplyMap('MAP_TARIFAS', Destino & '|' & Toneladas, 0)     AS Tarifa

FROM    Hechos.csv;

Esta solución, aunque sería viable de generar a partir de tramos iniciales convertidos es valores en serie con bucles o JOINS, no te la recomiendo porque lo mismo tienes tramos de toneladas (decimales) y la cosa se complica...

Yo adaptaría la solución que te pasaba en mi comentario anterior.

Saludos,

H

Anonymous
Not applicable
Author

Eso ya lo he aplicado primeramente con el mappping mi duda surge de como aplicar la solucion que me diste ya que antes el mapeo lo usaba para ciertas condicionales te adjnto el script en un txt