MicroStrategy ONE

Conservar todos los elementos de la tabla de búsqueda

La propiedad Conservar todos los elementos de tablas de búsqueda VLDB se utiliza para mostrar todos los elementos de atributo existentes en la tabla de búsqueda, aunque no haya un hecho correspondiente en el conjunto de resultados. Por ejemplo, el informe contiene Tienda y Suma (Ventas) y es posible que una tienda no tenga ninguna venta. No obstante, quiere mostrar todos los nombres de tiendas en el informe final, incluso los de las tiendas que no tengan ventas. Para ello, no puede basarse en las tiendas de la tabla de hechos de ventas. En su lugar, debe asegurarse de que el informe final incluya todas las tiendas de la tabla de búsqueda. El Motor SQL debe utilizar un outer join izquierdo de la tabla de búsqueda a la tabla de hechos.

Es posible que haya varios atributos en la plantilla. Para conservarlos todos, el Motor analítico debe utilizar un cartesian join entre las tablas de búsqueda de los atributos antes de efectuar el outer join izquierdo a la tabla de hechos.

Conservar los elementos comunes de la tabla de resultados del paso final y de búsqueda (por defecto)

El Motor analítico efectúa un join normal (equi-join) a la tabla de búsqueda.

Conservar elementos de la tabla de búsqueda unidos con la tabla de resultados del paso final en función de las claves de la tabla de hechos.

En ocasiones, el nivel de la tabla de hechos no siempre es el mismo que el del informe o la plantilla. Por ejemplo, supongamos que un informe contiene Tienda, Mes y el indicador Suma(Ventas), pero la tabla de hechos está en el nivel de Tienda, Día y Artículo. Hay dos formas de mantener todos los elementos de la tienda y el mes:

  • Efectúe primero un outer join izquierdo para conservar todos los elementos de atributo en los niveles Tienda, Día y Artículo y, a continuación, agregue los datos a los niveles Tienda y Mes.
  • Efectúe primero la agregación y, a continuación, un outer join izquierdo para incluir todos los elementos de atributo.

    Esta opción es para el primer enfoque. En el ejemplo anterior, realiza dos pasos SQL:

    Paso 1: LOOKUP_STORE cross join LOOKUP_DAY cross join LOOKUP_ITEM èTT1

    Paso 2: TT1 outer join izquierdo Tabla_de_hechos el (tienda, día, artículo)

La ventaja de este enfoque reside en que se puede realizar un outer join izquierdo y una agregación en el mismo paso (paso 2). El inconveniente es que, dado que se efectúa un cartesian join con las tablas de búsqueda en un nivel muy inferior (paso 1), el resultado de la tabla del cartesian join (TT1) puede ser muy grande.

Conservar elementos de la tabla de búsqueda unidos a la tabla de resultados del paso final en función de los atributos de plantilla sin filtro

Esta opción corresponde al segundo enfoque descrito anteriormente. Siguiendo el mismo ejemplo, consta de tres pasos SQL:

  • Paso 1: agregue la Fact_Table a TT1 en la tienda y el mes. Esto constituye, en realidad, el paso final de un informe normal cuando este parámetro no está activado.
  • Paso 2: LOOKUP_STORE cross join LOOKUP_MONTH> TT2
  • Paso 3: TT2 left outer join TT1 en (tienda, mes)

Este enfoque requiere un paso más que la opción anterior, pero la tabla resultante del cross join (TT2) suele ser menor.

Conservar los elementos de tabla de búsqueda junto con la tabla de resultados del paso final en función de atributos de plantilla con filtro

Esta opción es parecida a la opción 3. La única diferencia es que el filtro de informe se aplica en el paso final (paso 3). Por ejemplo, supongamos que un informe contiene Tienda, Mes y el indicador Sum(Ventas) con un filtro de año = 2002. Desea mostrar todas las tiendas en todos los meses del año 2002, sin importar si hubo ventas. Sin embargo, no quiere reflejar ningún mes de otros años, solamente los 12 meses del año 2002. La opción 4 resuelve este problema.

Ejemplo

El Conservar los elementos comunes de la tabla de resultados del paso final y de lookup simplemente genera un join directo entre la tabla de hechos y la tabla de búsqueda. Los resultados y la secuencia SQL son los siguientes.

Tienda Ventas en dólares

Este (East)

5000

Centro (Central)

8000

Sur (South)

12000

select a11.Store_id Store_id,
max(a12.Store) Store,
sum(a11.DollarSls) WJXBFS1
from Fact a11
join Store a12
on (a11.Store_id = a12.Store_id)
agrupar por a11.Store_id

La opción "Conservar elementos de la tabla de búsqueda unidos a la tabla de resultados del paso final en función de las claves de hecho" crea una tabla temporal que es una Cartesian join de todas las columnas clave de la tabla de búsqueda. A continuación, se crea un outer join de la tabla de hechos con la tabla temporal. Así, se conservan todos los elementos de la tabla de búsqueda. Los resultados y la secuencia SQL son los siguientes:

Tienda Ventas en dólares

Este (East)

5000

Centro (Central)

8000

Sur (South)

12000

Norte

 

select distinct a11.Year Year
en #ZZOL00
from Fact a11
select pa1.Year Year,
a11.Store_id Store_id
en #ZZOL01
from #ZZOL00 pa1
cross join Store a11
seleccione pa2.Store_id Store_id,
max(a12.Store) Store,
sum(a11.DollarSls) WJXBFS1
de #ZZOL01 pa2
left outer join Fact a11
on (pa2.Store_id = a11.Store_id and
pa2.Year = a11.Year)
join Store a12
encendido (pa2.Store_id = a12.Store_id)
grupo por pa2.Store_id
drop table #ZZOL00
arrastrar tabla #ZZOL01

La opción "Conservar los elementos de la tabla de búsqueda unidos a la tabla de resultados del paso final en función de los atributos de la plantilla sin filtro" conserva los elementos de la tabla de búsqueda mediante un outer join izquierdo con el paso final de SQL y solo une los atributos que están en la plantilla. En este ejemplo y el siguiente, se añade el filtro de "Tienda distinta de Central". Los resultados y la secuencia SQL son los siguientes.

Tienda Ventas en dólares

Este (East)

5000

Centro (Central)

 

Sur (South)

12000

Norte

 

select a11.Store_id Store_id,
sum(a11.DollarSls) WJXBFS1
en #ZZT5X00003UOL000
from Fact a11
where a11.Store_id not in (2)
agrupar por a11.Store_id
select a11.Store_id Store_id,
a11.Store Store,
pa1.WJXBFS1 WJXBFS1
from Store a11
left outer join #ZZT5X00003UOL000 pa1
encendido (a11.Store_id = pa1.Store_id)
tabla de arrastre #ZZT5X00003UOL000

La opción "Conservar los elementos de la tabla de búsqueda unidos a los de la tabla del paso final en función de los atributos de plantilla con filtro" es la misma que antes, pero el filtro se aplica en el paso final. Los resultados y la secuencia SQL son los siguientes.

Tienda Ventas en dólares

Este (East)

5000

Sur (South)

12000

Norte

 

select a11.Store_id Store_id,
sum(a11.DollarSls) WJXBFS1
en #ZZT5X00003XOL000
from Fact a11
where a11.Store_id not in (2)
agrupar por a11.Store_id
select a11.Store_id Store_id,
a11.Store Store,
pa1.WJXBFS1 WJXBFS1
from Store a11
outer join izquierdo #ZZT5X00003XOL000 pa1
encendido (a11.Store_id = pa1.Store_id)
where a11.Store_id not in (2)
tabla de arrastre #ZZT5X00003XOL000