Máximo de
Símbolos
nos Gráficos
A configuração Max Symbols in Charts é usada para definir o número de dados a serem
exibidos nos gráficos do QlikView. Como uma consulta Direct Discovery pode retornar
muitos valores diferentes, é recomendado revisar essa configuração para permitir que o
Trabalhando com o QlikView - QlikView 12, November 2017
250
8 Introdução ao carregamento de dados
QlikView exiba o número desejado de dados nos gráficos.
Configuração
de Tempo de
Espera QVS
no Arquivo
Config.xml
Quando o Direct Discovery é usado para consultar um sistema externo separado do
QlikView Server, a configuração de tempo limite do Servidor no arquivo config.xml deve
ser ajustada para dar tempo para que o QlikView obtenha de volta os resultados da
consulta. Falha ao permitir tempo suficiente para concluir os resultados das consultas
em um erro "Conexão com o servidor perdida" durante o uso do cliente Ajax.
A configuração padrão é de 60 segundos. A configuração pode precisar ser aumentada
para o tempo máximo de consulta. O arquivo config.xml está localizado no diretório
C:\ProgramData\QlikTech\WebServer
. A tag XML é .
Observe que, durante as atualizações, a configuração será substituída pelo valor
padrão.
QlikView Publisher
O QlikView Publisher requer acesso de leitura às tabelas do banco de dados utilizadas por Discovery Direct.
Quando os aplicativos do QlikView que empregam o Publisher usarem Direct Discovery, certifique-se de que
a conta de serviço executando o Publisher tenha o acesso de leitura necessário. Se isso não acontecer, o
Publisher não conseguirá ler a tabela de Direct Discovery durante as atualizações de dados programadas.
8.16 Práticas recomendadas para a modelagem de dados
Esta seção descreve várias maneiras diferentes de carregar seus dados no documento do QlikView,
dependendo de como os dados estão estruturados e de qual modelo de dados você deseja alcançar.
Em geral, a maneira como os dados são carregados no documento pode ser explicada pelo processo Extrair,
Transformar e Carregar:
1. Extrair
O primeiro passo é extrair os dados do sistema da fonte de dados. No script, você pode usar os
comandos
SELECT ou LOAD para definir isso. As diferenças entre esses comandos são:
l
SELECT é usado para selecionar dados de uma fonte de dados ODBC ou provedor OLE DB.
O comando
SELECT SQL é avaliado pelo provedor de dados, e não pelo QlikView.
l
LOAD é usado para carregar dados de um arquivo, de dados definidos no script, de uma
tabela carregada anteriormente, de uma página da web, do resultado de um comando
SELECT subsequente ou gerando dados automaticamente
2. Transformar
A fase de transformação envolve a manipulação dos dados utilizando funções de script e regras para
derivar a estrutura do modelo de dados desejado. As operações típicas são:
l
Cálculo de novos valores
l
Tradução de valores codificados
l
Renomeando campos
l
União de tabelas
l
Agregação de valores
Trabalhando com o QlikView - QlikView 12, November 2017
251
8 Introdução ao carregamento de dados
l
Criação de tabela dinâmica
l
Validação de dados
3. Carregar
Na etapa final, execute o script para carregar o modelo de dados definido no documento.
Seu objetivo deve ser o de criar um modelo de dados que permita uma manipulação eficiente dos dados no
QlikView. Geralmente, isso significa que você deve apontar para um esquema de estrela ou de floco de neve
razoavelmente normalizado, sem referências circulares, isto é, um modelo no qual cada entidade seja
mantida em uma tabela separada. Em outras palavras, um modelo de dados típico teria a seguinte
aparência:
l
uma tabela central de fatos que contém as chaves para as dimensões e os números usados para
calcular medidas (como o número de unidades, o volume das vendas e os valores do orçamento).
l
tabelas adjacentes contendo as dimensões com todos os seus atributos (como produtos, clientes,
categorias, calendário e fornecedores).
Em muitos casos é possível resolver uma tarefa (por exemplo, agregações) criando um
modelo de dados mais rico no script de carregamento ou executando as agregações nas
expressões do gráfico. Como regra geral, o desempenho será melhor se você mantiver as
transformações de dados no script de carregamento.
Recomenda-se esboçar seu modelo de dados no papel. Isso ajuda a fornecer uma estrutura de
quais dados extrair e quais transformações executar.
Cada tabela do modelo de dados geralmente corresponde a um comando
SELECT ou LOAD. As diferenças
entre esses comandos são:
l
SELECT é usado para selecionar dados de uma fonte de dados ODBC ou provedor OLE DB. O
comando
SELECT SQL é avaliado pelo provedor de dados, e não pelo QlikView.
l
LOAD é usado para carregar dados de um arquivo, de dados definidos no script, de uma tabela
carregada anteriormente, de uma página da web, do resultado de um comando
SELECT
subsequente ou gerando dados automaticamente
Usando arquivos QVD para carregamento incremental
A carga incremental é uma tarefa muito comum em relação às bases de dados. É a carga somente de
registros novos ou alterados da base de dados. Todos os outros dados já devem estar disponíveis, de uma
forma ou de outra. Com
Arquivos QVD (página 232) é possível executar carga incremental na maioria dos
casos.
O processo básico está descrito abaixo:
1. Carregue os
novos dados
da tabela da Base de Dados (um processo lento, carregando um número
limitado de registros).
Trabalhando com o QlikView - QlikView 12, November 2017
252
8 Introdução ao carregamento de dados
2. Carregue os dados antigos do arquivo QVD (um processo bem mais rápido, carregando muitos
registros).
3. Criar um novo arquivo QVD.
4. Repetir o procedimento para cada tabela carregada.
A complexidade da solução depende da natureza da base de dados de origem, mas os seguintes casos
básicos podem ser identificados:
1)
Caso 1: Anexar Apenas (página 253) (normalmente arquivos de log
2)
Caso 2: Inserir Apenas (Sem Atualizar nem Excluir) (página 254)
3)
Caso 3: Inserir e Atualizar (Sem Excluir) (página 255)
4)
Caso 4: Inserir, Atualizar e Excluir (página 256)
Veja a seguir, as soluções descritas para cada um desses casos. A leitura dos arquivos QVD pode ser feita
no modo otimizado ou no modo padrão. (O método usado é automaticamente selecionado pela linguagem
de script do QlikView, dependendo da complexidade da operação.) O modo otimizado é (bem
aproximadamente) 10 vezes mais rápido do que o modo padrão ou 100 vezes mais rápido do que carregar a
base de dados do modo comum.
Caso 1: Anexar Apenas
O caso mais simples é aquele dos arquivos de log; arquivos nos quais os registros só são acrescentados e
jamais excluídos. As seguintes condições se aplicam:
l
O banco de dados deve ser um arquivo de log (ou algum outro arquivo no qual os registros são
acrescentados e não inseridos ou excluídos) contido em um arquivo de texto (sem ODBC/OLE DB).
Trabalhando com o QlikView - QlikView 12, November 2017
253
8 Introdução ao carregamento de dados
l
O QlikView controla o número de registros lidos anteriormente e carrega apenas registros incluídos no
final do arquivo.
Exemplo:
Buffer (Incremental) Load * From LogFile.txt (ansi, txt, delimiter is '\t', embedded labels);
Caso 2: Inserir Apenas (Sem Atualizar nem Excluir)
Se os dados residirem em uma base de dados, não em um arquivo de log simples, a solução do caso 1 não
funcionará. No entanto, o problema poderá ser solucionado com um mínimo de trabalho adicional. As
seguintes condições se aplicam:
l
A fonte de dados pode ser qualquer base de dados.
l
O QlikView carrega os registros inseridos na base de dados após a execução do último script.
l
É necessário um campo ModificationDate (ou semelhante) para que o QlikView reconheça os
registros novos.
Trabalhando com o QlikView - QlikView 12, November 2017
254
8 Introdução ao carregamento de dados
Exemplo:
QV_Table:
SQL SELECT PrimaryKey, X, Y FROM DB_TABLE
WHERE ModificationTime >= #$(LastExecTime)#
AND ModificationTime < #$(BeginningThisExecTime)#;
Concatenate LOAD PrimaryKey, X, Y FROM File.QVD (qvd);
STORE QV_Table INTO File.QVD;
(Os sinais de sustenido na cláusula SQL WHERE definem o início e o final de uma data. Verifique o manual
do banco de dados para obter a sintaxe de data correta do banco de dados.)
Caso 3: Inserir e Atualizar (Sem Excluir)
O caso seguinte se aplica quando os dados nos registros carregados anteriormente são alterados entre as
execuções de script. As seguintes condições se aplicam:
l
A fonte de dados pode ser qualquer base de dados.
l
O QlikView carrega os registros inseridos ou atualizados na base de dados após a execução do último
script
l
É necessário um campo ModificationDate (ou semelhante) para que o QlikView reconheça os
registros novos.
l
É necessário um campo chave primário para que o QlikView classifique os registros atualizados do
arquivo QVD.
l
Esta solução forçará a leitura do arquivo QVD no modo padrão (em vez do otimizado), que ainda será
consideravelmente mais rápido do que carregar a base de dados inteira.
Trabalhando com o QlikView - QlikView 12, November 2017
255
8 Introdução ao carregamento de dados
Exemplo:
QV_Table:
SQL SELECT PrimaryKey, X, Y FROM DB_TABLE
WHERE ModificationTime >= #$(LastExecTime)#;
Concatenate LOAD PrimaryKey, X, Y FROM File.QVD
WHERE NOT Exists(PrimaryKey);
STORE QV_Table INTO File.QVD;
Caso 4: Inserir, Atualizar e Excluir
O caso mais difícil de solucionar é quando os registros são excluídos da base de dados de origem entre as
execuções de script. As seguintes condições se aplicam:
l
A fonte de dados pode ser qualquer base de dados.
l
O QlikView carrega os registros inseridos ou atualizados na base de dados após a execução do último
script.
l
O QlikView remove os registros excluídos da base de dados após a execução do último script.
l
É necessário um campo ModificationDate (ou semelhante) para que o QlikView reconheça os
registros novos.
l
É necessário um campo chave primário para que o QlikView classifique os registros atualizados do
arquivo QVD.
l
Esta solução forçará a leitura do arquivo QVD no modo padrão (em vez do otimizado), que ainda será
consideravelmente mais rápido do que carregar a base de dados inteira.
Trabalhando com o QlikView - QlikView 12, November 2017
256
8 Introdução ao carregamento de dados
Exemplo:
Let ThisExecTime = Now(
);
QV_Table:
SQL SELECT PrimaryKey, X, Y FROM DB_TABLE
WHERE ModificationTime >= #$(LastExecTime)#
AND ModificationTime < #$(ThisExecTime)#;
Concatenate LOAD PrimaryKey, X, Y FROM File.QVD
WHERE NOT EXISTS(PrimaryKey);
Inner Join SQL SELECT PrimaryKey FROM DB_TABLE;
If ScriptErrorCount = 0 then
STORE QV_Table INTO File.QVD;
Let LastExecTime = ThisExecTime;
End If
Combinando tabelas com Join e Keep
Uma junção é uma operação que usa duas tabelas para combiná-las em uma. Os registros da tabela
resultante são combinações dos registros das tabelas originais, de forma que, geralmente, os dois registros
que contribuem para qualquer combinação na tabela resultante tenham um valor comum para um ou vários
campos comuns, a assim chamada junção natural. No QlikView, as junções podem ser feitas no script,
produzindo tabelas lógicas.
Assim, a lógica do QlikView não verá as tabelas separadas, e sim o resultado da junção, que é uma única
tabela interna. Em algumas situações isso é necessário, mas existem desvantagens:
Trabalhando com o QlikView - QlikView 12, November 2017
257
8 Introdução ao carregamento de dados
l
Normalmente, as tabelas carregadas ficam maiores e o QlikView trabalha mais lentamente.
l
Algumas informações podem ser perdidas: a frequência (número de registros) na tabela original pode
não mais estar disponível.
A funcionalidade
Keep, que tem o efeito de reduzir uma ou ambas as tabelas à interseção dos dados da
tabela antes de serem armazenadas no QlikView, foi projetada para reduzir o número de casos que exigem o
uso de junções explícitas.
Nesta documentação, o termo junção é geralmente utilizado para junções feitas antes da
criação das tabelas internas. Entretanto, a associação, feita após a criação das tabelas
internas, também é basicamente uma junção.
Join
A forma mais simples de fazer uma junção é usar o prefixo
Join no script, que une a tabela interna a outra
tabela nomeada ou à última tabela criada anteriormente. A junção será um outer join, criando todas as
combinações possíveis de valores das duas tabelas.
Exemplo:
LOAD a, b, c from table1.csv;
join LOAD a, d from table2.csv;
A tabela interna resultante tem os campos a, b, c e d. O número de registros é diferente dependendo dos
valores de campo das duas tabelas.
Os nomes dos campos a serem unidos devem ser exatamente os mesmos. O número de
campos a serem unidos é arbitrário. Normalmente, as tabelas devem ter um ou alguns campos
em comum. Nenhum campo em comum gerará o produto cartesiano das tabelas. Também é
possível ter todos os campos em comum, mas isso normalmente não faz sentido. A menos
que o nome de uma tabela carregada anteriormente seja especificado no comando Join o
prefixo Join utilizará a última tabela criada anteriormente. Dessa forma, a ordem dos dois
comandos não é arbitrária.
Keep
Uma das principais características do QlikView é sua capacidade de fazer associações entre as tabelas, em
vez de uni-las, reduzindo bastante o espaço usado na memória, aumentando a velocidade e oferecendo
enorme flexibilidade. A funcionalidade keep foi projetada para reduzir o número de casos em que as junções
explícitas precisam ser usadas.
O prefixo
Keep entre dois comandos LOAD ou SELECT tem o efeito de reduzir uma ou ambas as tabelas à
interseção dos dados da tabela antes de serem armazenadas no QlikView. O prefixo
Keep sempre deve ser
precedido de uma das palavras-chave
Inner, Left ou Right. A seleção de registros das tabelas é feita da
mesma maneira que em uma junção correspondente. Entretanto, as duas tabelas não são unidas e serão
armazenadas no QlikView como duas tabelas nomeadas separadas.
Trabalhando com o QlikView - QlikView 12, November 2017
258
8 Introdução ao carregamento de dados
Inner
Os prefixos
Join e Keep na linguagem de script do QlikView podem ser precedidos pelo prefixo Inner.
Se for usado antes de
Join, especificará que a junção das duas tabelas deve ser interna. A tabela resultante
contém apenas combinações entre as duas tabelas com um conjunto de dados completo de ambos os lados.
Se usado antes de
Keep, especificará que as duas tabelas deverão ser reduzidas à sua interseção comum
antes de serem armazenadas no QlikView.
Exemplo:
Nestes exemplos, usamos as tabelas de fontes Table1 e Table2:
Tabelas de fonte com os exemplos Inner
Primeiro, realizamos um
Inner Join nas tabelas, resultando em um VTable, contendo apenas uma linha, o
único registro existente em ambas as tabelas, com dados combinados de ambas as tabelas.
VTable:
SELECT * from Table1;
inner join SELECT * from Table2;
Exemplo de Inner Join
Se você realizar um
Inner Keep, ainda terá duas tabelas. As duas tabelas serão, obviamente, associadas
através do campo comum A.
VTab1:
SELECT * from Table1;
VTab2:
inner keep SELECT * from Table2;
Exemplo de Inner Keep
Trabalhando com o QlikView - QlikView 12, November 2017
259
8 Introdução ao carregamento de dados
Left
Os prefixos
Join e Keep na linguagem de script do QlikView podem ser precedidos pelo prefixo left.
Se for usado antes de
Join, ele especificará que a junção das duas tabelas deve ser à esquerda. A tabela
resultante contém apenas combinações entre as duas tabelas com um conjunto de dados completo da
primeira tabela.
Se usado antes de
Keep, especificará que a segunda tabela deverá ser reduzida à sua interseção comum
com a primeira tabela antes de ser armazenada no QlikView.
Exemplo:
Nestes exemplos, usamos as tabelas de fontes Table1 e Table2:
Tabelas de fonte com os exemplos Left
Primeiro, um
Left Join é realizado nas tabelas, resultando em um VTable, contendo todas as linhas da
Table1, combinadas com os campos das linhas correspondentes na Table2.
VTable:
SELECT * from Table1;
left join SELECT * from Table2;
Exemplo de Left Join
Se você realizar um
Left Keep, ainda terá duas tabelas. As duas tabelas serão, obviamente, associadas
através do campo comum A.
VTab1:
SELECT * from Table1;
VTab2:
left keep SELECT * from Table2;
Trabalhando com o QlikView - QlikView 12, November 2017
260
8 Introdução ao carregamento de dados
Exemplo de Left Keep
Right
Os prefixos
Join e Keep na linguagem de script do QlikView podem ser precedidos pelo prefixo right.
Se for usado antes de
Join, ele especificará que a junção das duas tabelas deve ser à direita. A tabela
resultante contém apenas combinações entre as duas tabelas com um conjunto de dados completo da
segunda tabela.
Se usado antes de
Keep, especificará que a primeira tabela deverá ser reduzida à sua interseção comum
com a segunda tabela antes de ser armazenada no QlikView.
Exemplo:
Nestes exemplos, usamos as tabelas de fontes Table1 e Table2:
Tabelas de fonte com os exemplos Right
Primeiro, um
Right Join é realizado nas tabelas, resultando em um VTable, contendo todas as linhas da
Table2, combinadas com os campos das linhas correspondentes na Table1.
VTable:
SELECT * from Table1;
right join SELECT * from Table2;
Exemplo de Right Join
Se você realizar um
Right Keep, ainda terá duas tabelas. As duas tabelas serão, obviamente, associadas
através do campo comum A.
VTab1:
SELECT * from Table1;
Trabalhando com o QlikView - QlikView 12, November 2017
261
8 Introdução ao carregamento de dados
VTab2:
right keep SELECT * from Table2;
Exemplo de Right Keep
Usando o mapeamento como uma alternativa à junção
O prefixo
Join no QlikView é uma ótima maneira de combinar várias tabelas de dados no modelo de dados.
Uma desvantagem é que as tabelas combinadas podem se tornar grandes e criar problemas de
desempenho. Uma alternativa ao
Join, nas situações em que você precisa analisar um único valor de outra
tabela, é usar o mapeamento. Isso pode prevenir o carregamento de dados desnecessários, que atrasa os
cálculos e pode criar erros de cálculo, porque as junções podem mudar o número de registros nas tabelas.
A tabela de mapeamento consiste em duas colunas: um campo de comparação (entrada) e um campo de
valor de mapeamento (saída).
Nesse exemplo, temos uma tabela de pedidos (Orders) e precisamos saber qual é o país do cliente, que está
armazenado na tabela de clientes (Customers).
Tabela de dados Orders
CustomerID'>OrderID
OrderDate
ShipperID
Freight
CustomerID
12987
2007-12-01
1
27
3
12988
2007-12-01
1
65
4
12989
2007-12-02
2
32
2
12990
2007-12-03
1
76
3
Tabela de dados Customers
CustomerID
Name
Country
...
1
DataSales
Spain
...
2
BusinessCorp
Italy
...
3
TechCo
Germany
...
4
Mobecho
France
...
A fim de procurar o país (Country) de um cliente, precisamos de uma tabela de mapeamento que teria a
seguinte aparência:
Compartilhe com seus amigos: |