Skip to main content
Announcements
Qlik Announces Qlik Talend Cloud and Qlik Answers: LEARN MORE
cancel
Showing results for 
Search instead for 
Did you mean: 
Not applicable

Búsqueda de precio "vigente"

Tengo una tabla de ventas mas o menos así:

Fecha_venta, Articulo, cantidad, Precio_venta

El precio es libre, aunque existe una tarifa. Ppara comparar los precios reales de venta con la tarifa, necesito añadir un campo "precio_tarifa".

Mi problema es que la tarifa cambia en el tiempo, asi

TABLA TARIFAS:

Articulo 1 , Fecha 1, Precio 1

Artículo 1, Fecha 2, Precio 2,

Articulo 2.....

Es decir, cuando voy a buscar el precio vigente de Artículo 1 depende de la fecha de la venta,  necesito la última fecha anterior a la de la venta para  extraer el precio vigente.

¿Alguna sugerencia?

1 Solution

Accepted Solutions
salto
Specialist II
Specialist II

Hola,

Si la tabla de tarifas tiene estos campos: Articulo, FechaInicio, Tarifa, yo la leeria y le añadiria el campo FechaFinTarifa siendo esta la fecha anterior a la de Inicio de la siguiente Tarifa para ese producto, con este script:

Temp_Tarifas:

LOAD

    Articulo

    FechaInicioTarifa,

   date(if(isnull(previous(FechaInicioTarifa)),today(),

       if(previous(Articulo)<>Articulo,Today(),previous(FechaInicioTarifa)-1)),'DD/MM/YYYY') as Fecha_Fin_Tarifa, 

    Tarifa;

SQL SELECT * .....

Order by Articulo, FechaInicioTarifa desc ;

Tarifas:

Load *,

  If(Articulo<> peek(Articulo),'01/01/2000',FechaInicioTarifa) as Fecha_Inicio_Tarifa;

Load

  Articulo,

  Fecha_Inicio_Tarifa,

  Fecha_Fin_Tarifa,

  Tarifa

Resident Temp_Tarifas

Order By Articulo, FechaInicioTarifa asc;

Drop Table Temp_Tarifas;

Esto no es necesario si en la tabla de tarifas ya tienes la fecha de fin.

Ahora tienes que saber para cada venta, que tarifa era la tarifa vigente en esa fecha. Eso lo puedes hacer con intervalmatch() con la tabla Ventas:

join intervalmatch (FechaVenta, Articulo) load Fecha_Inicio_Tarifa, Fecha_Fin_Tarifa, Articulo resident Tarifas;

LEFT JOIN (Ventas) load * RESIDENT Tarifas;

DROP TABLE Tarifas;

Espero que te ayude!

View solution in original post

4 Replies
jolivares
Specialist
Specialist

Revisa si esto puede dar solucion a tu pregunta:

Asume los siguiente datos

LOAD * INLINE [

    Art, Fecha, Precio

    a1, 1/11/2013, 10

    a1, 5/11/2013, 11

    a1, 7/11/2013, 12

    a2, 1/11/2013, 5

    a2, 8/11/2013, 6

    a3, 1/11/2013, 8

    a4, 1/11/2013, 2

    a4, 4/11/2013, 3

    a4, 10/11/2013, 5

];

Haces una tabla con dimesion Art y en la expresion lo siguiente:

If(IsNull(FirstSortedValue(Precio,-Aggr(Max(Fecha),Art,Fecha),2)),FirstSortedValue(Precio,-Aggr(Max(Fecha),Art,Fecha)),FirstSortedValue(Precio,-Aggr(Max(Fecha),Art,Fecha),2))

Te producira la siguiente tabla

Art     PrecioVigente

a1     11

a2     5

a3     8

a4     3

salto
Specialist II
Specialist II

Hola,

Si la tabla de tarifas tiene estos campos: Articulo, FechaInicio, Tarifa, yo la leeria y le añadiria el campo FechaFinTarifa siendo esta la fecha anterior a la de Inicio de la siguiente Tarifa para ese producto, con este script:

Temp_Tarifas:

LOAD

    Articulo

    FechaInicioTarifa,

   date(if(isnull(previous(FechaInicioTarifa)),today(),

       if(previous(Articulo)<>Articulo,Today(),previous(FechaInicioTarifa)-1)),'DD/MM/YYYY') as Fecha_Fin_Tarifa, 

    Tarifa;

SQL SELECT * .....

Order by Articulo, FechaInicioTarifa desc ;

Tarifas:

Load *,

  If(Articulo<> peek(Articulo),'01/01/2000',FechaInicioTarifa) as Fecha_Inicio_Tarifa;

Load

  Articulo,

  Fecha_Inicio_Tarifa,

  Fecha_Fin_Tarifa,

  Tarifa

Resident Temp_Tarifas

Order By Articulo, FechaInicioTarifa asc;

Drop Table Temp_Tarifas;

Esto no es necesario si en la tabla de tarifas ya tienes la fecha de fin.

Ahora tienes que saber para cada venta, que tarifa era la tarifa vigente en esa fecha. Eso lo puedes hacer con intervalmatch() con la tabla Ventas:

join intervalmatch (FechaVenta, Articulo) load Fecha_Inicio_Tarifa, Fecha_Fin_Tarifa, Articulo resident Tarifas;

LEFT JOIN (Ventas) load * RESIDENT Tarifas;

DROP TABLE Tarifas;

Espero que te ayude!

Not applicable
Author

Será muy fácil traer la tabla de origen con fecha_fin, aunque me ha sido muy ilustrativo como la has construido.

Muchas gracias.

Not applicable
Author

Esta solución me sirve para saber los precios vigentes a día de hoy pero ¿y cualquier fecha intermedia? Debo de conocer el precio de tarifa por ejemplo de a1 el dia 2/11/13 que no es el precio actual