Skip to main content
Announcements
Announcing Qlik Talend® Cloud and Qlik Answers™ to accelerate AI adoption! LEARN MORE
cancel
Showing results for 
Search instead for 
Did you mean: 
Not applicable

Join que relacione un intervalo fechas de tablaA con una fecha de tablaB

Hola¡

Tengo una tabla de "Ventas" que guarda un campo "PrecioCosteVenta" con el precio de coste del articulo vendido, y una tabla TB_Precios_coste con el PrecioCoste de coste de esos articulos para uno intervalo de fecha concreto (Desde, Hasta).

Lo que deseo saber son las ventas que tienen PrecioCosteVenta diferente al que deberian segun la tabla TB_Precios_coste dada la fecha de venta.

Osea relacionar el campo VENTAS.fecha con el intervalo [TB_Precios_coste.Desde, TB_Precios_coste.Hasta]

Lo ideal seria hacerlo directametne el Join del script de carga pero al no tener el Join de Qlik la posibilidad de "ON <condicion>" y solo une por valores iguales (de los campos que se llaman igual) no se como hacerlo.

He probado  haciendo el siguiente Join:

VENTAS:

LOAD 

  Articulo,

  fecha,

  PrecioCosteVenta

FROM

  H:\QlikView\TablasAux\Ventas.qvd (qvd)

;

inner join

SQL SELECT 

    Articulo,

    Desde,

    Hasta,

    PrecioCoste

FROM `TB_Precios_coste`

;

y luego filtrar en una segunda tabla

VENTAS_2:

LOAD

     articulo as articulo_2,

     fecha as fecha_2,

     PrecioCosteVenta as PrecioCosteVenta _2,

     Desde as Desde_2,

     Hasta as Hasta_2,

     PrecioCoste as Precio_2

resident VENTAS

where fecha <= Hasta and fecha >= Desde

;

Pero no me vale porque en cuanto hay dos intervalos de fechas para el mismo articulo (aunque sean disjuntas, de hecho todos los intervalos son disjuntos por articulo) me saca precios diferentes.

1 Solution

Accepted Solutions
Miguel_Angel_Baeyens

Hola,

Probablemente la función IntervalMatch() es lo que estás buscando, y sirve, entre otras cosas, para unir datos discretos con rangos.

Mira este post con el código de ejemplo, cópialo en tu aplicación QlikView y recárgalo para que funcione. En tu caso, la tabla DatesTable del ejemplo sería la que contiene el Desde-Hasta, y la tabla con PrecioCosteVenta sería la FactsTable del ejemplo.

Modificando los nombres de campo en el ejemplo debería funcionar.

Espero que te sirva.

Miguel

View solution in original post

3 Replies
Miguel_Angel_Baeyens

Hola,

Probablemente la función IntervalMatch() es lo que estás buscando, y sirve, entre otras cosas, para unir datos discretos con rangos.

Mira este post con el código de ejemplo, cópialo en tu aplicación QlikView y recárgalo para que funcione. En tu caso, la tabla DatesTable del ejemplo sería la que contiene el Desde-Hasta, y la tabla con PrecioCosteVenta sería la FactsTable del ejemplo.

Modificando los nombres de campo en el ejemplo debería funcionar.

Espero que te sirva.

Miguel

Not applicable
Author

Muchas gracias Miguel Angel¡

Lo probe y me funciono. Me dio los mismos resultados que con lo que yo hacía (que despues de estudiarlos resultan que son correctos desde el principio).

Pero bueno, asi he aprendido a utillizar el INTERVALMATCH , aunque debe decir que la solución que utiliza el INTERVALMATCH va más lenta que la mia uriginal, por lo menos en mi caso.

Miguel_Angel_Baeyens

Hola Emilio,

Sin duda, IntervalMatch() es más lento que otras funciones como ApplyMap() y desde luego, cualquier JOIN que hagas en el SQL select (ya que la carga del trabajo no está en QlikView sino en la base de datos). En cualquier caso, hay veces que es mejor descargar el trabajo del transaccional o del DWH y hacerlo con QlikView.

Un saludo,

Miguel