Skip to main content
Announcements
Qlik Introduces a New Era of Visualization! READ ALL ABOUT IT
cancel
Showing results for 
Search instead for 
Did you mean: 
walter_hardy
Contributor III
Contributor III

Calendario maestro con dos campos fecha

Hola a todos! Estoy trabajando en un modelo que relaciona productos y materias primas.

tengo 3 tablas:

materias_primas:

LOAD

     materia_prima_key,

     materia_prima_nombre,

     fecha_precio_materia_prima,

     precio_materia_prima

FROM materias_primas;

// Materias primas muestra las materias primas cargadas y una fecha de cotización junto a su precio, a medida que va variando el mismo.

productos:

LOAD

     producto_key,

     producto_nombre,

     fecha_precio_producto,

     precio_producto

FROM productos;

// productos muestra los productos cargados y una fecha de cotización junto a su precio, a medida que va variando el mismo.

materias_primas_productos:

LOAD

     producto_key,

     materia_prima_key

FROM materias_primas_productos;

// materias_primas_productos hace la relación de las tablas


Necesito un calendario asociando los campos fecha_precio_materia_prima y fecha_precio_producto para poder hacer informes acerca de la variación del precio de las materias primas y los productos en el mismo lapso de tiempo, ya que cada materia prima tiene asociada productos.

Uno de los gráficos debería ser un combinado donde muestre los precios en 2 ejes "y", mientras que en el eje "x" muestre los meses (ene, feb, mar, etc) cuyo campo debe asociar los dos campos fechas de las dos tablas.

Saludos.

17 Replies
hector_munoz
Specialist
Specialist

Hola Walter,

¿Puedes poner algunos registros de ejemplo?

Saludos,

H

walter_hardy
Contributor III
Contributor III
Author

Hola Héctor. Por supuesto.

Materias_primas.PNG

productos.PNG

rel.PNG

hector_munoz
Specialist
Specialist

Hola Walter,

Te cuento lo que yo haría teniendo en cuenta que,por los datos que nos pasas, parece que una materia prima y su producto relacionado tienen precio en los mismos meses exactamente (aunque en distintos días):

  • Crearía el campo año_mes en la tabla de enlace haciendo un LEFT JOIN desde la tabla de materias primas o la de productos. Daría igual desde cual puesto que, vista la precondición anterior, se pone precio a las materias primas y productos en el mismo mes.
  • Añadiría a los campos 'materia_prima_key' y 'producto_key' de la tabla de enlace el año_mes (1|201705 y 121|201705 para la primera combinación de "Petróleo" y "Plastico para envase") puesto que una materia prima se relaciona con un producto pero los precios dependen del mes.
  • Utilizaría el nuevo campo año_mes de la tabla de enlace como dimensión del gráfico.

Espero que te ayude.

Saludos,
H

diego_a_barboza
Creator
Creator

Para encarar este tema creo que deberías tener en cuenta lo siguiente: Si los precios de cada producto y materia prima solo tienen validez dentro de un periodo determinado, te conviene armar la relación entre las tablas con un interval match, para poder definir el precio correcto de un item en una fecha determinada.

Para poder armar esa relación, Primero vas a tener que armar un ETL que modifique la tabla que contiene los precios, para que cada registro contenga dos columnas de fecha para los precios: No solo la fecha en la que el precio comienza a tener validez, sino también hasta cuando (que sería la fecha de inicio del registro siguiente, o la actual si no hay ninguna)

Una vez que armes esa relación vas a poder saber cual era el precio de la materia prima y del producto final en cualquier fecha.

walter_hardy
Contributor III
Contributor III
Author

Héctor e intentado hacer una "link table" con un campo fecha, porque no siempre tienen actualizaciones dentro del mismo mes las materias primas y los productos relacionados a ella. Pero no tuve éxito con ello. Te paso mas o menos el código que utilicé para hacerlo.

materias_primas:

LOAD

    materia_prima_key,

    materia_prima_nombre,

    fecha_precio_materia_prima,

    precio_materia_prima

FROM materias_primas;


fact_materias_primas:

LOAD

    materia_prima_key                    as materia_prima_key_temp,

    materia_prima_nombre,

    fecha_precio_materia_prima,

    precio_materia_prima

Resident materias_primas;


Drop table materias_primas;


// materias_primas_productos:

Mapping LOAD

    producto_key,

    materia_prima_key

FROM materias_primas_productos;


productos:

LOAD

    producto_key,

    AppliMap ('materias_primas_productos', producto_key, null())    as materia_prima_key,

    producto_nombre,

    fecha_precio_producto,

    precio_producto

FROM productos;


fact_productos:

LOAD

    producto_key,

    producto_nombre,

    fecha_precio_producto,

    precio_producto,

    materia_prima_key    as materia_prima_key_temp

Resident productos;


Drop table productos;


LinkTable:

Load

     materia_prima_key_temp      as materia_prima_key,

     fecha_precio_materia_prima as fecha

Resident fact_materias_primas;

Concatenate (LinkTable)

Load

    producto_key,

    materia_prima_key_temp  as materia_prima_key,

    fecha_precio_producto      as fecha

Resident fact_productos;

Drop field materia_prima_key_temp;

calendario_temp:

Load

     fecha_precio_producto as fecha

  Resident  fact_productos;

outer Join

Load

     fecha_precio_producto as fecha

Resident  fact_productos;

Calendario:

LOAD

     fecha,

     Year (fecha)      as Año,

     Month (fecha)    as Mes,

     day(fecha)         as Dia

Resident calendario_temp;

DROP Table calendario_temp;

hector_munoz
Specialist
Specialist

Hola Walter,

Si las materias primas y los productos actualizan sus precios no siempre en el mismo mes, lo que tienes que hacer es lo que propone Diego Barboza en su post: hallar la vigencia de cada precio de materias primas y de precio de producto y enlazar los valores donde "encajen" creando unas nuevas relaciones.

Si puedes pásanos datos (que no estén en un pantallazo) y e intentamos ayudarte con el script.

Saludos,

H

walter_hardy
Contributor III
Contributor III
Author

Paso un QVW que verán que no es exactamente como el ejemplo de la Discusión solamente para hacerlo mas comprensible. Cualquier cosa me consultan, también van los QVD. Espero que puedan ayudarme.

sorrakis01
Specialist
Specialist

Hola,

Lo que podrías hacer es:

Generar una tabla intermedia relacionado con la tabla de hechos (por Id) para llegar al calendario común con un campo Tipo. ejemplo:

Id, Fecha, Tipo (Materia prima o producto), Precio

Luego generas el calendario común relacionado con Fecha.

De esta forma podrás saber fácilmente a una fecha que precio tenias para los 2 casos.....

Saludos,

walter_hardy
Contributor III
Contributor III
Author

Jordi hola. Creo que a lo que te refieres ya lo he hecho. Es lo que pasé más arriba, no sé si me estoy equivocando en algo o qué, pero me da datos erróneos.

P/d: en la captura no se alcanza a ver pero en Fact_productos hay otro campo que es la fecha.

Captura.PNG