Calendário com Períodos Completos

De Qknow
Ir para: navegação, pesquisa

Introdução

Análise de dados no QlikView envolve, geralmente, a carga de uma data/hora de referência sobre as operações analisadas. As datas carregadas, via de regra, estão em formato que inclui o dia, mês e ano, independente da formatação apresentada. Quando um gráfico é criado no QlikView utilizando uma dimensão como data, cada registro diário será utilizado no eixo X, populando com dados existentes. Embora esta configuração possa ser útil para muitos casos, é provável que os painéis precisem de gráficos que possam apresentar dados mensais, por dia da semana, anuais, trimestrais ou semestrais. Para isso, é preciso que as dimensões existam no modelo de dados. Este artigo aborda como criar um calendário com o máximo de dimensões possíveis para permitir diferentes visões temporais.

Para montar um calendário a que se refere este artigo, basta criar um novo projeto no QlikView Desktop e carregar os dados abaixo, delimitados por uma tabulação.

26/01/2011	978	Recife
27/01/2011	688	Porto Alegre
27/01/2011	689	Porto Alegre
12/02/2011	541	Manaus
14/02/2011	537	São Luís
14/02/2011	538	São Luís
14/02/2011	539	São Luís
14/03/2011	1037	Rio de Janeiro
14/03/2011	1053	Rio de Janeiro
16/03/2011	599	São Paulo
08/04/2011	1073	Rio de Janeiro
11/04/2011	685	Florianópolis
16/05/2011	803	Recife
18/05/2011	739	São Paulo
06/06/2011	810	Manaus
06/06/2011	811	São Luís
06/06/2011	813	São Luís
19/07/2011	881	Manaus
19/07/2011	882	Manaus

Note que o calendário proposto utilizará as datas acima para preencher todo o ano de 2011, permitindo assim que os campos derivados possam ser utilizados em filtros em formato de listas sem que alguma data esteja faltando.

Montando o Calendário

Identificando o Intervalo de Datas

Assuma que a tabela de dados exibida na introdução tenha sido carregada com campos nomeados como Data, ID e Cidade. É possível notar que há intervalos de datas vazias onde nenhuma operação foi registrada. Caso uma lista seja criada com os dados acima apenas utilizando funções de data, haverá lacunas nas listas utilizadas como filtros. Ou seja, alguns valores não serão exibidos provocando uma distorção visual ao usuário. O seguinte fragmento de código carrega os dados exibidos acima gravados em um arquivo Dados_Para_Calendario.txt.

Dados:
LOAD Data, ID, Cidade FROM [C:\Users\Documents\Dados_Para_Calendario.txt]
(txt, codepage is 1252, embedded labels, delimiter is '\t', msq);

Seria simples montar um calendário a partir dos dados carregados se não houvesse a preocupação de preencher as datas faltantes. Por exemplo, para obter o dia, mês e ano na carga acima, bastaria incluir as funções correspondentes durante o processo de carga, derivando um script semelhante ao abaixo exibido.

Dados:
LOAD Data, 
     Year(Data)   As Ano,
     Month(Data)  As Mês,
     Day(Data)    As Dia,
     ID, 
     Cidade
FROM  [C:\Users\Documents\Dados_Para_Calendario.txt]
(txt, codepage is 1252, embedded labels, delimiter is '\t', msq);
Filter List 1.PNG

Apesar da derivação simples do calendário acima, é possível notar que eventuais listas baseadas nos dados contarão apenas com as datas carregadas. Na figura ao lado percebe-se que alguns meses estão faltando na relação de filtros, justamente porque nas datas fornecidas nem todos os períodos estão preenchidos. Assim, para ter um cronograma com todas as datas possíveis e evitar lapsos de intervalos no calendário, o script precisa contar com a data inicial e final, preenchendo diariamente o conteúdo entre os dois intervalos.

Utilizando a instrução Resident cria-se uma referência de carga a uma tabela já carregada em memória que será útil para identificar os períodos válidos previamente carregados. A operação LOAD no fragmento a seguir demonstra como carregar a maior e menor data registrada no arquivo.

Considerações importantes:

  • A instrução LOAD ... Resident deve ocorrer após a carga da tabela Dados.
  • A instrução Dados: nomeia a tabela em memória. Caso a data esteja em outra tabela, esta deve ser mencionada no LOAD.
  • Max e Min são funções de script que retornam o valor máximo e mínimo, respectivamente.
  • TMP_MaxMinData é o nome da tabela que armazenará a maior e menor data.
TMP_MaxMinData:
LOAD
    Max(Data) AS Max,
    Min(Data) AS Min
Resident Dados;

Com os valores da maior e menor data em memória, basta adicioná-las a variáveis que serão posteriormente utilizadas no restante do script de calendário. A instrução LET define duas variáveis, vMaiorData e vMenorData, respectivamente. Uma vez que os valores tenham sido identificados, a tabela temporária não é mais necessária e pode ser excluída com o comando DROP TABLE.

LET vMaiorData = Peek('Max');
LET vMenorData = Peek('Min');

DROP Table TMP_MaxMinData;
Nota: Não é propósito deste artigo descrever em detalhes o uso das funções Max, Min ou Peek.

Criando Dimensões Adicionais

A partir da identificação da maior e menor data deriva-se os campos (dimensões) desejadas a partir de uma tabela de calendário. É fundamental que a tabela

Calendario:
Load 
    Date(Data, 'DD/MM/YYYY')               As Data,
    Day(Data)                              As Dia,
    Month(Data)                            As Mês,
    Year(Data)                             As Ano,
    MonthName(Data)                        As [Mês Ano],
    Ceil(Month(Data)/3) & 'º Trimestre'    As Trimestre,
    Weekday(Data)                          As [Dia Semana];

Load Date('$(vMenorData)' + Recno() - 1)   As Data AutoGenerate (YearEnd(vMaiorData) - vMenorData + 1);

O resultado da carga será a criação de novos campos contendo a quebra da data por Dia, Mês, Ano, Trimestre, Etc. O Load do calendário conecta-se ao restante do modelo associativo pelo campo Data e ao mesmo tempo é carregado a partir da segunda instrução Load que utiliza a função AutoGenerate.

Listing 3.png

Informações Complementares:

  • É possível usar o comando Load para carregar outro comando Load, tal como no exemplo acima.
  • O operador de função $() é usado para interpretar o conteúdo da variável vMenorData.
  • RecNo() é utilizado para numeração dos registros que serão criados pelo comando AutoGenerate.
  • YearEnd retorna o último dia do ano informado como parâmetro.


Funções e Instruções Utilizadas

  • Date
  • RecNo
  • YearEnd
  • Day
  • Month
  • MonthName
  • WeekDay
  • Ceil
  • Year
  • AutoGenerate
  • Peek
  • Max
  • Min


O que mais você precisa?

Listing 2.jpg Chart Tricks 1.jpg Engrenagem 1.png
Voltar ao Índice Design Visual Uso de Rotinas


Envelope01.jpg
Procurando Algo? Fale Conosco!

Voltar | Página Principal