Link Table — Trabalhando com algumas Tabelas FATO

Autor: Luiz Ricardo de Jesus / Consultor QlikView na QConsulting

Bom, me deparei com um desafio hoje onde abri um projeto e nele existia um monte de tabelas fato, fui atrás para saber o que era aquilo e me deparei com este nome (Link Table), então vi que é bastante usado e é para certificação é bastante usado como melhores praticas e etc.

Acontece que são muitas as vezes que não temos todos os dados necessários em uma unica fato então é necessário associar duas ou mais tabelas fatos com dimensões diferentes umas das outras e como solução para este cenário é necessário criar a ligação entre elas com (Link Table).

Em nosso cenário temos as seguintes tabelas para criar o nosso modelo de dados associativo no QlikView, são elas (Vendas, Orçamento, Cliente, Filial, Vendedor e Tipo Venda).

Como solução estamos usando o Link Table então primeiro temos que criar uma campo chave e para criar este campo chave vamos usar a função AutoNumber() precisando concatenar os campos de chaves entre tabelas fatos e atribuir (Alias) apelidos para os campos.

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);

Uma vez criado a chave e eliminamos os campos comuns para não criar aquela salada de dados 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);

Acabamos de criar três tabelas no nosso modelo de dados associativo, com essas novas tabelas gerada com base nos registros das duas fatos, criamos uma amarração e garantimos todas as possibilidades de combinações entre as Tabelas Fato, agora podemos continuar com a carga das demais tabelas do nosso 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);

Nossa Nuvem esta formada e temos a nossa dimensão Vendedor associada a nossa tabela de ligação (LinkTable).

Agora 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;

Agora vamos dropar(apagar) a TMP_Calendario para que ela não fique a mostra em nossa nuvem:

DROP table TMP_Calendario;

Após a criarmos a tabela calendário com base nos registros das tabelas de Venda e Oraçamento, temos o modelo final.

One clap, two clap, three clap, forty?

By clapping more or less, you can signal to us which stories really stand out.