Muitas vezes necessitamos associar dados entre duas ou mais Tabelas Fatos, o maior problema é que nem sempre temos 100% das informações associadas entre as Tabelas Fato ou temos dimensões diferentes entre elas.
Para resolvermos isso vamos criar uma tabela de ligação (Link Table).
Neste post falarei sobre a solução através de Link Table.
Temos as seguintes tabelas para criar o nosso modelo de dados associativo no QlikView.
Vendas, Orçamento, Cliente, Filial, Vendedor e Tipo Venda.
Como vamos utilizar a solução de Link Table, primeiramente temos que criar um campo chave utilizando a função AutoNumber() concatenando os campos comuns entre as tabelas fato e iremos comentar os campos envolvidos na chave.
Venda:
LOAD
AutoNumber(Data&'|'&[Código Vendedor]) as %ChaveLinkTable,
//Data,
[Código Venda],
[Código Cliente],
//[Código Vendedor],
[Código Tipo Venda],
[Código Filial],
[Valor Venda]
FROM
QVD\Venda.QVD
(qvd);
Orçamento:
LOAD
AutoNumber(MakeDate(Right([Mês Ano],4),Left([Mês Ano],2),1)&'|'& [Código Vendedor]) as %ChaveLinkTable,
//[Código Vendedor],
[Valor Orçado]
FROM
QVD\Orçamento.QVD
(qvd);
Agora que já criamos a chave e eliminamos os campos comuns entre as tabelas fatos, vamos criar a tabela de ligação (LinkTable).
//===========================================
// LINK TABLE
//===========================================
LinkTable:
LOAD DISTINCT
AutoNumber(Data&'|'&[Código Vendedor]) as %ChaveLinkTable,
Data,
[Código Vendedor]
FROM
QVD\Venda.QVD
(qvd);
LinkTable:
LOAD DISTINCT
AutoNumber(MakeDate(Right([Mês Ano],4),Left([Mês Ano],2),1)&'|'& [Código Vendedor]) as %ChaveLinkTable,
Date(MakeDate(Right([Mês Ano],4),Left([Mês Ano],2),1),'DD/MM/YYYY') as Data,
[Código Vendedor]
FROM
QVD\Orçamento.QVD
(qvd);
Agora temos três tabelas no nosso modelo de dados associativo.
Com essa nova tabela gerada com base nas informações das duas fatos, garantimos que teremos todos possibilidade de combinações entre as Tabelas Fato.
Podemos continuar a carga das demais tabelas do modelo.
Cliente:
LOAD
[Código Cliente],
[Nome Cliente]
FROM
QVD\Cliente.QVD
(qvd);
Filial:
LOAD
[Código Filial],
[Descrição Filial]
FROM
QVD\Filial.QVD
(qvd);
Vendedor:
LOAD
[Código Vendedor],
[Nome Vendedor]
FROM
QVD\Vendedor.QVD
(qvd);
[Tipo Venda]:
LOAD
[Código Tipo Venda],
[Descrição Tipo Venda]
FROM
[QVD\Tipo Venda.QVD]
(qvd);
Agora temos a nossa dimensão Vendedor associada a nossa tabela de ligação (LinkTable).
Para concluirmos o nosso modelo de dados associativo, vamos criar a tabela de calendário.
TMP_Calendario:
LOAD DISTINCT
Data
FROM
QVD\Venda.QVD
(qvd);
TMP_Calendario:
LOAD DISTINCT
Date(MakeDate(Right([Mês Ano],4),Left([Mês Ano],2),1),'DD/MM/YYYY') as Data
FROM
QVD\Orçamento.QVD
(qvd);
Calendario:
NoConcatenate
LOAD
[Data] as Data,
Day(Data) as Dia,
Month(Data) as Mês,
Year(Data) as Ano,
DayNumberOfQuarter(Data) as [Dia Trimestre],
DayNumberOfYear(Data) as [Dia Ano],
MonthName(Data) as [Mes Ano],
QuarterName(Data) as [Quarter],
Week(Data) as [Semana],
ceil(Month(Data)/3)&'º Trim' as [Trimestre],
WeekDay(Data) as [Dia Semana]
Resident TMP_Calendario;
DROP table TMP_Calendario;
Após a criação da tabela calendário com base nas informações das tabelas de Venda e Oraçamento, temos o seguinte modelo.







