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.


    El siguiente script  muestra la creación de una Link Table y la Creación de una tabla  Calendario con las fechas de ambas fact tables, y se como se asicia con la Link Table.


    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;

     


         

    Referencia

    Definicion y reglas generales sobre Link Table (ingles):

    http://www.qliktips.com/2011/05/rules-for-creating-keylink-table-in.html

    http://community.qlik.com/docs/DOC-1303

    Ejemplo de Link Table (ingles):

    http://dailyqv.blogspot.com.ar/2012/12/link-tables.html

    Link Table para evitar referencia circular (ingles):

    http://www.quickqlearqool.nl/?p=910