Calendário para Multiplas Dimensões

De Qknow
Ir para: navegação, pesquisa

Introdução

MasterLinkedCalendar1.png

Um calendário mestre pode ser criado para apresentar ao usuário filtros, gráficos e outras opções gráficas de tomada de decisão com base nas datas disponíveis em uma certa dimensão. Por exemplo, a Data da Venda pode ser a dimensão desejada para se criar um calendário mestre. No entanto, em alguns casos multiplos campos contendo data/hora fazem parte do modelo de dados, tal como no caso de Data de Entrega, Data do Pedido, Data do Embarque, entre outros. A criação de vários calendários completos não auxilia na construção de elementos gráficos que possam combinar as diferentes datas em uma só visão de negócio. Por isso, a criação de um calendário mestre a partir de todas as dimensões desejadas contendo as datas de diferentes origens permitirá que gráficos e outros elementos possam ser criados a partir de um único campo de data.

Suponha, por exemplo, que se esteja trabalhando com três datas: Data da Venda a partir da tabela de registro de vendas. Data de Entrega a partir da tabela de transportes. E Data da Fatura da tabela de faturamento. Estas três datas de diferentes origens devem resultar em um único calendário, de maneira que o usuário possa visualizar em uma única seleção de data todas as operações daquela data.

Para montar um calendário mestre reunindo todas as datas das diferentes dimensões utilize o fragmento de exemplo abaixo. Alternativamente o arquivo deste exemplo está disponível para download aqui. Para o teste proposto por este artigo três tabelas serão carregadas: Sales (Vendas), Shipments (Transportadores) e Billing (Faturamento).

Sales:
LOAD * INLINE [
SalesId, SalesDate, Qty
1, 01/01/2014, 123
2, 01/01/2014, 311
3, 02/01/2015, 321
4, 02/01/2015, 213 
5, 04/03/2015, 113
6, 04/04/2015, 221];
Shipments:
LOAD *  INLINE [
SalesId, ShipmentDate
1, 03/02/2014
2, 20/01/2014
3, 10/01/2015
4, 01/02/2015
5, 03/05/2015];
Billing:
LOAD * INLINE [
SalesId, BillingDate
1, 20/02/2014
2, 28/01/2014
3, 19/01/2015
4, 04/06/2015];

Tabela de Ligação (Linked Table)

A tabela de ligação reune as informações previamente carregadas em uma nova tabela interligando as informações provenientes de cada dimensão em uma nova estrutura que possa acomodar todas as datas registradas nas diferentes tabelas. Para isso, é necessário reler as tabelas já carregadas em memória com a instrução RESIDENT. Em linhas gerais este comando permite que uma tabela que esteja "residente" na memória do QlikView ou QlikSense possa ser lida sem que seja necessário voltar a base de dados original.

LinkedCalendar:
LOAD SalesId, SalesDate       As TransactionDate, 'Sales'    As DateType  Resident Sales;
LOAD SalesId, ShipmentDate    As TransactionDate, 'Ship'     As DateType  Resident Shipments;
LOAD SalesId, BillingDate     As TransactionDate, 'Billing'  As DateType  Resident Billing
MasterLinkedCalendar2.png

A criação de uma nova tabela com três instruções LOAD concatena os dados de cada tabela de origem semelhante ao que ocorre em uma instrução UNION da maioria dos bancos de dados. No entanto, a concatenação no QlikView ocorre de maneira automática, embora escrever o comando CONCATENATE possa deixar o script mais fácil de ser compreendido.

Cada campo do tipo Data é carregado de sua respectiva tabela em memória e armazenado em um único campo de nome TransactionDate. Um campo adicional também é criado para determinar a que tipo de transação pertence aquela data, seja para vendas, transporte ou faturamento. Em memória o resultado é a figura apresentada ao lado.

A partir de uma tabela de datas comum será possível a criação de gráficos contendo a data compartilhada por todas as tabelas de origem. Geralmente um calendário com datas completas é gerado para permitir filtros e seleções sem quebras nos anos, meses, dias da semana, etc. Como criar um calendário mestre (master calendar) pode ser consultado no artigo sobre criação de calendários completos.

Calendário Completo (Master Calendar)

MasterLinkedCalendar4.png

Um calendário com períodos completos visa preencher as lacunas que podem ocorrer entre nas datas registradas em detemrinada carga de dados. Por exemplo, caso existam registros mensais espera-se que o usuário possa usar uma lista mensal para realizar filtros, ou mesmo apresentar dados em forma de gráficos por período. No entanto, é possível que nem todos os meses possuam uma data preenchida no cadastro, gerando um buraco (gap) no calendário.

Usando um Master Calendar permite preencher todas as datas sequencialmente entre a menor e maior datas registradas nas tabelas carregadas. Assim, evita-se que haja uma lacuna em anos, meses, dias da semana e qualquer outra derivação que se deseja apresentar no painel. O passo a passo para criar um calendário completo pode ser encontrado em outro artigo, útil para preencher as datas completas.

O fragmento de script a seguir pode ser acrescentado ao término do script deste artigo para criar um calendário mestre que contenha todas as datas de todas as dimensões. O campo DateType permite filtrar apenas as datas de determinada dimensão, se necessário.



Temp:
LOAD Max(TransactionDate) As MaxDate,
     Min(TransactionDate) As MinDate
     Resident LinkedCalendar;

LET vMaxDate = Peek('MaxDate');
LET vMinDate = Peek('MinDate');

Drop Table Temp;

MasterCalendar:
Load
   Date(TransactionDate, 'DD/MM/YYYY')               As TransactionDate,
   Day(TransactionDate)                              As Day,
   Month(TransactionDate)                            As Month,
   Year(TransactionDate)                             As Year,
   MonthName(TransactionDate)                        As [Month/Year],
   Ceil(Month(TransactionDate)/3) & 'º Trimestre'    As Quarter,
   Weekday(TransactionDate)                          As WeekDay;

Load Date('$(vMinDate)' + Recno() - 1)   As TransactionDate AutoGenerate (YearEnd(vMaxDate) - vMinDate + 1);

O resultado é um calendário completo que contém todos os anos, meses e dias entre os intervalos da menor data de transação até a maior data carregada. Isso permite que elementos gráficos em forma de listas possam ser utilizados pelos usuários sem que haja lacunas entre os valores das listas.

MasterLinkedCalendar5.png


Funções Utilizadas

  • MIN
  • MAX
  • DATE
  • DAY
  • MONTH
  • MONTHNAME
  • CEIL
  • WEEKDAY
  • YEAREND


Assuntos Relacionados


Download Disponível



Índice de Artigos | Página Principal