martes, 3 de marzo de 2015

HABILITAR LEFT JOIN

MicroStrategy nos ofrece varias alternativas para realizar un Left (Outer) Join.

Lo que nos permitirá obtener todos los datos existentes de una Fact más los datos coincidentes de las dimensiones relacionadas, esto suele ser requerido en ciertas ocasiones por los clientes. Si desean saber mas sobre teoría de conjuntos, les recomiendo ver ésta representación visual de Christopher L. Moffatt.

Cabe recordar que para permitir realizar este tipo de joins, NO debemos tener marcada la opción Join 89 (viene por default configurado para el Tutorial en Access), ya que este tipo de joins no es soportado al ser sql implícito. Esto es seteable desde las propiedades VLDB, tanto a nivel de informe como a nivel de Instancia.


Una vez realizado el paso anterior, lo único que debemos hacer es ir a las opciones de los datos del
informe y configurar el tipo de join de los atributos. Eligiendo entre las opciones 3 y 4, según queramos mostrar todos los elementos, no teniendo en cuenta ningún filtro o sí, según nos interese.


Ejemplo de la tercera opción sin filtro:


select   pa11.[COUNTRY_ID] AS COUNTRY_ID,
             a14.[COUNTRY_NAME_ES] AS CUST_COUNTRY_DESC_ES,
             pa11.[REGION_ID] AS REGION_ID,
             a13.[REGION_NAME_ES] AS REGION_NAME_ES,
             pa12.[WJXBFS1] AS WJXBFS1
from      ((([ZZT7L1BLJLYOL002]      pa11
             left join    [ZZTOE18O52UOL001]        pa12
               on          (pa11.[REGION_ID] = pa12.[REGION_ID]))
             inner join                [LU_REGION]        a13
               on          (pa11.[REGION_ID] = a13.[REGION_ID]))
             inner join                [LU_COUNTRY]    a14
               on          (pa11.[COUNTRY_ID] = a14.[COUNTRY_ID]))

Ejemplo de la cuarta opción filtrando por País = Inglaterra:


select   pa11.[COUNTRY_ID] AS COUNTRY_ID,
             a14.[COUNTRY_NAME_ES] AS CUST_COUNTRY_DESC_ES,
             pa11.[REGION_ID] AS REGION_ID,
             a13.[REGION_NAME_ES] AS REGION_NAME_ES,
             pa12.[WJXBFS1] AS WJXBFS1
from      ((([ZZTUVWLFHDOOL002]  pa11
             left join    [ZZTQUVO3OAKOL001]      pa12
               on          (pa11.[REGION_ID] = pa12.[REGION_ID]))
             inner join                [LU_REGION]        a13
               on          (pa11.[REGION_ID] = a13.[REGION_ID]))
             inner join                [LU_COUNTRY]    a14
               on          (pa11.[COUNTRY_ID] = a14.[COUNTRY_ID]))
where   pa11.[COUNTRY_ID] in (3)

Por último, agregar que también podemos establecer las opciones de Left Join por defecto a nivel de instancia de base de datos, aunque francamente, dudo que sea recomendable o necesario para ningún proyecto.



No hay comentarios: