miércoles, 8 de enero de 2014

ATRIBUTOS COMPUESTOS Y JOINS ENTRE FACTS

En algunos casos los campos clave de una Fact pueden ser más de uno. Cuando esto ocurre, es necesario mapear una representación compuesta por tantos elementos como sea necesario según el negocio.

En la siguiente imagen podemos ver una representación compuesta:


Para realizar esto, lo único que necesitamos es agregar una nueva representación con la misma categoría que la anterior, pero asignándole otro nombre.



Este tipo de Atributos no sólo permiten usar varios campos clave como join entre una Fact y su Dimensión, sino que además, mapeado correctamente puede servirnos como enlace entre dos facts.

COMO REALIZAR UN JOIN ENTRE FACTS

En el siguiente ejemplo, necesitamos utilizar una apertura de la dimensión L_AUSENTISMOS modelada con la FACT_AUSENTISMO, pero que a su vez es necesaria como apertura en la FACT_NOMINA, donde no se encuentra el ID de la dimensión.

Requisitos:
- Debe existir un campo común entre ambas facts para realizar el join.
- Debe tener sentido la unión en el modelo de negocio.

Pasos a seguir:
- Realizar un Atributo Compuesto que contenga el ID de la dimensión (PK_ID_Ausentismo) y el ID del
  campo común entre las facts (PK_ID_Persona).
- Establecer como tablas de Lookup, en ambas representaciones, la fact y dimensión que tienen relación
  entre sí (FACT_AUSENTISMO y L_AUSENTISMOS en nuestro caso).
- Agregar el Hijo mediante el cual se hará el join entre Facts. Para este ejemplo, se agregó PERSONA con 
  una relación del tipo UNO A UNO, el cual generará un join on (PK_ID_PERSONA = 
  PK_ID_PERSONA).


Resultado del SQL generado por MicroStrategy:

Select    a12.PK_ID_AUSENTISMO  PK_ID_AUSENTISMO,
    a11.PK_ID_PERSONA  PK_ID_PERSONA,
    a13.ID_AUSENTISMO  ID_AUSENTISMO,
    a13.DESC_AUSENTISMO  DESC_AUSENTISMO,
    count(distinct a11.PK_ID_PERSONA)  WJXBFS1
from    FACT_NOMINA    a11
    join    FACT_AUSENTISMOS    a12
      on     (a11.PK_ID_PERSONA = a12.PK_ID_PERSONA)
    join    L_AUSENTISMOS    a13
      on     (a12.PK_ID_AUSENTISMO = a13.PK_ID_AUSENTISMO)

No hay comentarios: