Unlock a world of possibilities! Login now and discover the exclusive benefits awaiting you.
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 |
20 | 30 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
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...
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];
Espero que te sirva...
Saludos,
H
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
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
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