Mostrando entradas con la etiqueta Modelo de Datos. Mostrar todas las entradas
Mostrando entradas con la etiqueta Modelo de Datos. Mostrar todas las entradas

10 de enero de 2014

Generic Keys para comparar Ventas

Una empresa quiere comparar las ventas de productos con promoción Vs sin promoción.
Se tienen estas promociones:
Promoción 100 =  Empanada+Café
Promoción 200 = Empanada+Jugo

Las tablas serian las siguientes:














Al cargar estas tablas tendríamos el siguiente modelo:



Si se quiere comparar las ventas de Empanadas y Café realizadas con la Promoción 100 Vs las ventas de Empana y Café pero sin promoción, este modelo no lo permitiría, ya que al seleccionar la promoción Empanada+Café, excluye las ventas sin promoción.

Para lograr esto, se crea una tabla Link_Dimensional (usando teoría de GenericKey. Ver pdf de Referencia), que contenga las promociones asociadas a los artículos que la componen, y ademas la asociación de cada promoción con sus artículos sin promoción.

El nuevo modelo quedaría así:










El script de este modelo seria el siguiente:

Fact_Ventas:
LOAD IdPromocion_Ventas&'-'&Articulo as Key_Link,
INLINE [
     Articulo, Venta, IdPromocion_Ventas
     Empanada, 25,        100
     Café,     10,        100
     Empanada, 25,        200
     Jugo,     10,        200
     Empanada, 25,        SinPromo
     Café,     10,        SinPromo
     Jugo,     10,        SinPromo]
;

Promociones:

LOAD * INLINE [
    IdPromocion,     NombrePromocion,     IdArticuloPromo
    100,             Empanada+Café,       Empanada
    100,             Empanada+Café,       Café
    200,             Empanada+Jugo,       Empanada
    200,             Empanada+Jugo,       Jugo]
;

Link_Dimensional:

LOAD
IdPromocion,
IdPromocion&'-'&IdArticuloPromo   as Key_Link
Resident Promociones;
Concatenate (Link_Dimensional)
LOAD
IdPromocion,
'SinPromo'&'-'&
IdArticuloPromo    as Key_Link
Resident Promociones;
 

Referencia: http://community.qlikview.com/docs/DOC-3451

15 de diciembre de 2013

Creacion Link Table

Cuando se tiene un modelo de datos con más de una Fact Table,  pueden presentarse relaciones circulares y “Synthetic Key”.  La primera técnica para solucionar esto es unir las Fact Tables en una sola tabla usando la función Concatenate, siempre que compartan la mayoría de las Key.


Cuando no comparten la mayoria de las Keys, entonces es conveniente usar LinkTables.


Si se tiene una Fact Table de Ventas, y otra de Compras, y se desea saber, por ejemplo, las ventas y  las compras de un producto específico al seleccionar una fecha,  esto no se obtendría con la asociación natural que hace qlikview. Si se ejecutara sólo el PASO 1 del script debajo, se crean las tablas con la asociación natural de qlikview:

Asociación Natural de Qlikview:















El siguiente script  muestra la creación de una Link Table, considerando las fechas de las tablas Ventas y Compras.


Para más información sobre Link Table, ver referencias al final.


//PASO 1: ==========  CARGA DE DATOS  =============================================
Ventas:
LOAD * INLINE [
  IdVenta, IdProducto, Venta, FechaVenta
  V1, P1, 54, 28/11/2011
  V2, P2, 29, 29/11/2011
  V3, P2, 73, 30/11/2011
  V4, P2, 66, 01/12/2011
  V5, P1, 55, 01/01/2012];
Compras:
LOAD * INLINE [
  IdCompra, IdProducto, Compra, FechaCompra
  C1, P1, 61, 28/11/2011
  C2, P1, 29, 29/11/2011
  C3, P1, 55, 30/11/2011
  C4, P2, 88, 01/12/2011
  C5, P2, 84, 15/01/2012];
Productos:
LOAD * INLINE [
  IdProducto, Producto_Desc
  P1, Silla
  P2, Mesa ];
//PASO 2: ====== CREACIÓN DE FACT TABLES CON NUEVA KEY  ===============================
// Se renombrar las foreign key existentes en las Facts, que solo irán en la Link Table 
Fact_Ventas:
LOAD IdVenta,
     IdProducto as temp_idproducto,
     Venta,
     FechaVenta
  Resident Ventas; DROP Table Ventas;
Fact_Compras:
LOAD IdCompra,
     IdProducto as temp_idproducto,
     Compra,
     FechaCompra
     Resident Compras; DROP Table Compras;
//PASO 3: ============= CREACION DE LINK TABLE =========================================
//Concatena todas las key y foreign key existentes en las Fact Tables.
//La LinkTable solo tiene campos de las Fact.
//Los Campos de las tablas de dimensiones no se incluyen en la LinkTable
LinkTable:
LOAD
IdVenta,
temp_idproducto      as IdProducto,
FechaVenta                as Fecha
Resident Fact_Ventas;
Concatenate (LinkTable)
LOAD IdCompra,
temp_idproducto      as IdProducto,
FechaCompra            as Fecha
Resident Fact_Compras;
DROP Field temp_idproducto;
//PASO 4: //==============  CREACION CALENDARIO MAESTRO   ==========================
Calendario_tmp:
LOAD
FechaCompra  as Fecha
Resident Fact_Compras;
Outer Join
LOAD
FechaCompra  as Fecha
Resident Fact_Compras;
Calendario:
LOAD
Fecha,
Year (Fecha)      as Año,
Month (Fecha)     as Mes,
day(Fecha)        as Dia
Resident Calendario_tmp;
DROP Table Calendario_tmp;



Con LinkTable el modelo de datos queda así:


     












Referencia: