MicroStrategy ONE
Preservar todos os elementos da tabela de pesquisa
A propriedade VLDB Preservar todos os elementos da tabela de pesquisa é usada para mostrar todos os elementos de atributo que existem na tabela de pesquisa, mesmo que não haja fato correspondente no conjunto de resultados. Por exemplo, seu relatório contém Loja e Soma(Vendas) e é possível que uma loja não tenha nenhuma venda. Entretanto, você quer exibir todos os nomes de lojas no relatório final, até mesmo as lojas sem vendas. Para fazer isso, você não deve contar com as lojas na tabela de fatos de vendas. Em vez disso, você deve se certificar de que todas as lojas da tabela de pesquisa estejam incluídas no relatório final. O mecanismo SQL precisa fazer uma associação externa esquerda da tabela de pesquisa à tabela de fatos.
É possível que existam vários atributos no modelo. Para manter todos os elementos de atributo, o Mecanismo Analítico precisa fazer uma associação cartesiana entre as tabelas de pesquisa de atributos envolvidas antes de fazer uma associação externa esquerda com a tabela de fatos.
Preservar elementos comuns da tabela de pesquisa e tabela de resultados da aprovação final (padrão).
O Mecanismo Analítico faz uma associação (igual) normal com a tabela de pesquisa.
Preservar elementos da tabela de pesquisa associados à tabela de resultados de aprovação final com base em chaves da tabela de fatos.
Às vezes o nível da tabela de fatos não é o mesmo que o relatório ou nível do modelo. Por exemplo, um relatório contém a métrica Loja, Mês, Soma(Vendas), mas a tabela de fatos está no nível de Loja, Dia e Item. Existem duas maneiras de manter todos os elementos de loja e mês:
- Fazer uma associação externa esquerda para manter todos os elementos de atributo no nível de Loja, Dia e Item, depois agregar para o nível de Loja e Mês.
- Faça agregação primeiro, depois faça uma associação externa esquerda para reunir todos os elementos de atributo.
Esta opção é para a primeira abordagem. No exemplo dado anteriormente, são feitas duas aprovações SQL:
Aprovação 1: LOOKUP_STORE cross join LOOKUP_DAY cross join LOOKUP_ITEM èTT1
Aprovação 2: TT1 left outer join Fact_Table on (store, day, item)
A vantagem desta abordagem é que você pode fazer uma associação externa esquerda e a agregação na mesma aprovação (aprovação 2). A desvantagem é que como você faz uma associação cartesiana com as tabelas de pesquisa em um nível bem mais baixo (aprovação 1), o resultado da tabela associada cartesiana (TT1) pode ser muito grande.
Preservar elementos da tabela de pesquisa associados à tabela de resultados de aprovação final com base em atributos de modelo sem filtro.
Esta opção corresponde à segunda abordagem descrita acima. Ainda usando o mesmo exemplo, ela faz três aprovações SQL:
- Aprovação 1: agregar a Fact_Table a TT1 em Loja e Mês. Esta é na verdade a aprovação final de um relatório normal sem ativar esta configuração.
- Aprovação 2: Junção cruzada de LOOKUP_STORE LOOKUP_MONTH > TT2
- Aprovação 3: TT2 left outer join TT1 on (store, month)
Esta abordagem precisa de mais uma aprovação do que a opção anterior, mas a tabela de associação cruzada (TT2) é geralmente menor.
Preservar elementos da tabela de pesquisa associados à tabela de resultados de aprovação final com base em atributos de modelo com filtro.
Esta opção é semelhante à Opção 3. A única diferença é que o filtro do relatório é aplicado na aprovação final (Aprovação 3). Por exemplo, um relatório contém Loja, Mês e Soma(Vendas) com um filtro de Ano = 2002. Você quer exibir cada loja em cada mês em 2002, independentemente do fato de haver vendas. No entanto, você não quer mostrar qualquer mês de outros anos (somente os 12 meses no ano 2002). A Opção 4 resolve este problema.
O Preservar elementos comuns da pesquisa e da tabela de resultados da passagem final opção simplesmente gera uma junção direta entre a tabela de fatos e a tabela de pesquisa. Os resultados e SQL são os seguintes.
Loja | Vendas em dólar |
Leste |
5000 |
Central |
8000 |
Sul |
12000 |
select a11.Store_id Store_id,
max(a12.Store) Store,
sum(a11.DollarSls) WJXBFS1
from Fact a11
join Store a12
ativado (a11.Store_id = a12.Store_id)
group by a11.Store_id
A opção "Preservar elementos da tabela de pesquisa associados à tabela de resultados de aprovação final com base em chaves da tabela de fatos" cria uma tabela temporária que é uma associação cartesiana de todas as colunas chave da tabela de pesquisa. Depois, a tabela de fatos é associada externamente à tabela temporária. Isso preserva todos os elementos da tabela de pesquisa. Os resultados e SQL são os seguintes:
Loja | Vendas em dólar |
Leste |
5000 |
Central |
8000 |
Sul |
12000 |
Norte |
|
select distinct a11.Year Year
into #ZZOL00
from Fact a11
select pa1.Year Year,
a11.Store_id Store_id
into #ZZOL01
from #ZZOL00 pa1
cross join Store a11
selecione pa2.Store_id Store_id,
max(a12.Store) Store,
sum(a11.DollarSls) WJXBFS1
from #ZZOL01 pa2
left outer join Fact a11
on (pa2.Store_id = a11.Store_id and
pa2.Year = a11.Year)
join Store a12
on (pa2.Store_id = a12.Store_id)
agrupar por pa2.Store_id
drop table #ZZOL00
drop table #ZZOL01
A opção "Preservar elementos da tabela de pesquisa associados à tabela de resultados de aprovação final com base em atributos de modelo sem filtro" preserva os elementos da tabela de pesquisa fazendo a associação externa esquerda com a aprovação final de SQL e somente em atributos que estejam no modelo. Neste exemplo e no próximo, é adicionado o filtro "Loja não igual a Central". Os resultados e SQL são os seguintes:
Loja | Vendas em dólar |
Leste |
5000 |
Central |
|
Sul |
12000 |
Norte |
|
select a11.Store_id Store_id,
sum(a11.DollarSls) WJXBFS1
into #ZZT5X00003UOL000
from Fact a11
where a11.Store_id not in (2)
group by a11.Store_id
select a11.Store_id Store_id,
a11.Store Store,
pa1.WJXBFS1 WJXBFS1
from Store a11
left outer join #ZZT5X00003UOL000 pa1
ativado (a11.Store_id = pa1.Store_id)
drop table #ZZT5X00003UOL000
A opção "Preservar elementos da tabela de pesquisa associados à tabela de resultados de aprovação final com base em atributos de modelo com filtro" é a opção mais nova e é igual acima, mas você obtém o filtro na aprovação final. Os resultados e SQL são os seguintes:
Loja | Vendas em dólar |
Leste |
5000 |
Sul |
12000 |
Norte |
|
select a11.Store_id Store_id,
sum(a11.DollarSls) WJXBFS1
into #ZZT5X00003XOL000
from Fact a11
where a11.Store_id not in (2)
group by a11.Store_id
select a11.Store_id Store_id,
a11.Store Store,
pa1.WJXBFS1 WJXBFS1
from Store a11
left outer join #ZZT5X00003XOL000 pa1
ativado (a11.Store_id = pa1.Store_id)
where a11.Store_id not in (2)
drop table #ZZT5X00003XOL000