Você está na página 1de 107

Treinamento Qlik Sense – Enterprise

Introdução 5
1.1- Sobre o curso 5
1.2- O que é o Qlik Sense? 5
1.3- Como o Qlik Sense Funciona? 6
1.4- Arquivos do curso 6
1.5- Formato do texto no material do curso 6
2. Uma pequena introdução a estruturas de dados 7
2.1- Sobre estruturas de dados 7
2.2- Banco de dados relacionais 7
2.3- Outras estruturas de dados 7
2.4- Estrutura de dados no Qlik Sense 7
3. Apresentação ao Qlik Sense 8
3.1- Colocando o aplicativo tutorial na pasta Apps em Qlik Sense Desktop 8
3.2- Abrindo o Qlik Sense Desktop 8
3.3- Abrindo o aplicativo 9
3.4- Visualizações no aplicativo 9
3.5- Medidas e dimensões 9
3.6- Visualizações 10
3.7- Fazendo seleções 10
3.8- Seleção de clique 11
3.9- Seleção de desenho 11
3.10- Seleção de intervalo 12
3.11- Seleção de laço 12
3.12- Seleção de legenda 13
3.13- Seleção de rótulo 13
3.14- Estados de seleção 14
3.15- Verde, branco e cinza. 14
4. Criando um aplicativo 15
5. A carga do script 16
5.1- Introdução ao carregamento no Qlik Sense 16
5.2- Formatos de arquivo suportados 16
5.3- Edição de script 16
5.4- Sintaxe 19
6. Conexões de dados 23
6.1- Tipos de Conexão 23
6.2- Nossos dados 24
6.3- Banco de dados Pedidos 24
6.4- Criando uma conexão ODBC 25
7. Carregamento de dados 27
7.1- Referência Circular 35
8. Desenvolvendo layout: 38
9. Carregamento de dados de uma planilha Excel: 44

2
10. Criar Gráficos 47
10.1- Campos chave 47
10.2- Um exemplo de problemas que podem surgir 47
10.3- Como isto afeta você? 47
10.4- Resolvendo o problema 47
10.5- O gráfico realmente mostra o que eu quero que ele mostre 48
10.6- Adicionando gráficos a nossa pasta 49
10.7- A Nossa primeira visão 50
11. Nova Pasta 51
11.1- Tabelas de chave sintéticas 52
11.2- Removendo a tabela da chave sintética 52
11.3- Modificando o layout 53
11.4- Vendas por Vendedor 54
11.5- Avançado – Carregando dados de uma tabela previamente carregada 55
12. Combinando tabelas com Join 56
12.1- Join 56
12.2- Inner 56
12.3- Left 57
12.4- Right 57
13. Tabelas 59
13.1- Mais layout 60
14. Tabela Fornecedores 61
14.1- Nova pasta Fornecedores 63
15. Gráficos combinados 64
15.1- Gráfico Top 10 Clientes 65
15.2- Campos chave no exemplo 65
15.3- Criando um gráfico combinado 65
16. Mapeamento de dados 66
16.1- Tabelas Inline 67
17. Tabelas Dinâmicas 68
17.1- Diferentes tipos de tabelas no Qlik Sense 68
17.2- Tabela Dinâmica 69
17.3- Modificando nossa tabela 69
17.4- Dinamizar arrastando e soltando 70
17.5- Gráfico Mostrador 70
18. Mais aplicações de gráficos 71
18.1- Novo campo – Mês_Corrente 72
18.2- Gráficos com linhas de referência 72
19. Estatística de funcionários 74
19.1- Nova pasta – Est. Funcionarios 74
19.2- Grupo de campos 75

3
19.3- Grupos Hierárquicos (Drill-down) 75
19.4- Criando grupos 76
19.5- Usando grupos em um gráfico 77
20. Tipos de Dados no Qlik Sense 78
20.1- Armazenamento de dados no Qlik Sense 78
20.2- Dados Contendo informações sobre os tipos de dados 78
20.3- Dados sem informações sobre o tipo de dados 79
20.4- Datas e Horas 81
21. Definição de número 85
21.1- Formatos de número no diálogo propriedades do documento 85
21.2- Código de formato 85
21.3- Números 85
21.4- Data 86
21.5- Horas 86
22. Incluir 47
23. Análise avançada 49
23.1- Análise de conjunto 49
23.2- Gerando novos campos de mais de uma tabela 53
24. Depuração 54
25. Orçados / Resultado 55
25.1- Nova pasta – Orçado / Resultado 55
26. - Dados contadores de história 57
26.1- Criar snapshots 57
26.2- Criar uma história simples 58
27. Arquivo QVD 59
27.1- Trabalhando com arquivo QVD 59
27.2- Criando Arquivo QVD 60
27.3- Store 60
27.4- Buffer 61
28. Lendo os dados de arquivos QVD 62
29. Script completo 62
29.1- Seção Main 63
29.2- Seção Fato 63
29.3- Seção Pedidos 63
29.4- Seção DIM 64
29.5- Seção MasterCalendar 66

4
Introdução
1.1- Sobre o curso

Qlik Sense Enterprise é um treinamento onde aprenderá de forma prática como integrar dados de várias
fontes em um único aplicativo Qlik Sense para apresentá-los de uma forma clara e interativa a todos em sua
organização.

Os seguintes elementos serão abordados no curso:

 Integração e conhecimentos gerais de fontes de dados;


 Métodos para gerar e editar scripts;
 Mapeamento de dados;
 Construção de objetos nas pastas (gráficos, tabelas, etc.);
 Funções de gráfico avançadas;
 Operadores do script;
 Relatórios;

1.2- O que é o Qlik Sense?

O Qlik Sense é uma plataforma de análise visual que liberta o potencial de todos os usuários para
controlar as informações e revelar ideias. Usuários de todos os tipos e níveis de habilidade podem gerar a
ideia de que precisam para responder perguntas instantaneamente e resolver problemas em suas linhas de
negócios, problemas que exigem muito mais que apenas uma visão geral inicial das informações.

Ferramentas de visualização de dados independentes e BI tradicionais limitam a exploração e a


descoberta para os usuários de negócios. Essas ferramentas são boas em fornecer respostas para perguntas
predefinidas, mas não oferecem um modo pelo qual os usuários podem fazer novas perguntas de
acompanhamento. Os usuários devem se adaptar ao que está no relatório ou visualização ou esperar que a
TI crie novas consultas SQL ou relatórios para eles.

O Qlik Sense é diferente. Com o Qlik Sense, usuários com qualquer nível de habilidade são
capacitados a seguir seus próprios caminhos até a ideia. Através da Experiência Associativa, você pode fazer
várias perguntas, a partir de qualquer objeto, em qualquer direção, usando seleções e pesquisas simples. O
Qlik Sense fornece retorno instantâneo referente aos dados associados e não relacionados e análises
atualizadas após cada etapa. O resultado é um meio para a descoberta que fornece a ideia correta em todas
as etapas do processo exploratório.

O Qlik Sense é uma ferramenta de visualização sem restrições que permite que os usuários criem
painéis de forma rápida e explorem dados complexos sem serem interrompidos por limitações técnicas e
caminhos predefinidos.

5
1.3- Como o Qlik Sense Funciona?

No sistema do Qlik Sense está um mecanismo de software com memória incorporada patenteada
que gera novas exibições de informações em tempo real. A cada clique do usuário, o mecanismo do Qlik
Sense responde instantaneamente com um conjunto recém-calculado de associações e visualizações de
dados, específicas para as seleções do usuário. Se você não for um usuário técnico, isso o beneficia
diretamente, porque você não é obrigado a desenvolver novos relatórios ou visualizações – basta clicar e
aprender.

1.4- Arquivos do curso

O material inclui os arquivos que você precisa para criar os documentos do curso, estes arquivos
serão disponibilizados pelo instrutor. Abaixo há uma pequena apresentação dos arquivos e como eles são
instalados.

QWT_Port - Banco de Dados Access


Func_Esc - Arquivo do Excel
Fornecedores - Arquivo do Excel
Datesort - Arquivo de texto
Email - Arquivo de texto
Orcado - Arquivo do Excel
Info - Arquivo do Excel

1.5- Formato do texto no material do curso

Os trechos do script são escritos no seguinte formato:

SQL SELECT
ID_Cliente,

As palavras-chave no script são escritas no seguinte formato:

Load

Comandos, menus e botões são escritos no seguinte formato:

Editar Script

Os nomes das pastas, listas, campos, expressões, etc. no seguinte formato:

Vendedor

Os nomes de arquivos são escritos no seguinte formato:

CursoQV_ScrEnt.qvd.

6
2. Uma pequena introdução a estruturas de dados
2.1- Sobre estruturas de dados

Se você nunca trabalhou com bancos de dados, nós daremos uma pequena introdução aos
fundamentos de estruturas e bancos de dados, para facilitar. Esta introdução ajudará você a criar
documentos de Qlik Sense baseados em seus próprios dados. Se você já estiver familiarizado com estes
termos, você pode pular este capítulo.

2.2- Banco de dados relacionais

Os dados são frequentemente armazenados em bancos de dados relacionais. Tais bancos de


dados incluem Microsoft SQL Server, Microsoft Access, Oracle, DB2, Sybase, Informix e Teradata.
Um banco de dados relacional é baseado em várias regras. Uma destas regras é que as
informações no banco de dados devem ser representadas pelos valores armazenados em tabelas, que por
sua vez constituem o banco de dados. Outra regra é que o banco de dados deve ser capaz de lidar com
pelo menos uma linguagem estruturada. Um exemplo disto é o SQL (Stuctured Query Language -
Linguagem de Consulta Estruturada), que é usado para definir e manipular os dados.

2.3- Outras estruturas de dados

Outro formato comum de fontes de dados para o Qlik Sense são os arquivos de texto delimitados
por caracteres. Os arquivos de texto devem ter uma estrutura especial para que o Qlik Sense possa
interpretá-los corretamente. A primeira linha em tal arquivo de texto frequentemente é o nome de campo,
(porém, há exceções). As linhas subsequentes contêm dados que pertencem aos vários campos. Os
campos no arquivo são delimitados, ou separados, por caracteres, normalmente vírgulas, tabs ou um
ponto-e-vírgula. Um arquivo de texto é deste modo, equivalente a uma tabela com colunas e linhas.

O diagrama mostra uma estrutura de


dados tirada do banco de dados Access com
o qual nós trabalharemos no curso.
A figura mostra as seis tabelas que são
associadas por campos comuns (chave).
Neste caso, as tabelas têm origem no mesmo
banco de dados, mas elas podiam ter sido
tiradas de fontes diferentes, por exemplo, um
arquivo de texto e um de Excel.
O campo ID_Cliente liga as tabelas Clientes
e Pedidos. Se você seguir as setas, poderá
ver quais campos ligam a estrutura inteira.
Se dois dos registros em tabelas diferentes
tiverem o mesmo valor em qualquer dos
campos comuns, eles serão associados. A
associação é essencialmente a mesma que
o SQL join.

2.4- Estrutura de dados no Qlik Sense

Cada coluna de uma tabela de dados, que é carregada no Qlik Sense, torna-se um campo no
banco de dados associativo do Qlik Sense (também chamado de banco de dados AQL). Campos que
aparecem em mais de uma tabela e têm nomes idênticos serão associados. Cada campo pode ser
apresentado na forma de uma lista no documento do Qlik Sense. Certos campos são exibidos, sua única
função é ligar tabelas diferentes. Quando você faz uma seleção em uma lista, o Qlik Sense procura o banco
de dados associativo inteiro para conexões lógicas. Como resultado desta procura os valores associados
com sua seleção são identificados.

7
3. Apresentação ao Qlik Sense
3.1- Colocando o aplicativo tutorial na pasta Apps em Qlik Sense Desktop

O aplicativo Treinamento Qlik Sense está incluído no arquivo do treinamento, e antes de começar este
treinamento, você precisa colocar o aplicativo na pasta Apps. Abra a pasta Documentos. (Às vezes chamada
Meus Documentos.) A partir dali, o caminho para a pasta Apps é Qlik\Sense\Apps. Coloque o arquivo
Treinamento Qlik Sense na pasta Apps.

3.2- Abrindo o Qlik Sense Desktop

Se o Qlik Sense Desktop estiver instalado e o aplicativo Treinamento Qlik Sense estiver localizado na pasta
Apps, você estará pronto para começar.

Inicie o Qlik Sense Desktop a partir do atalho em sua área de trabalho, através do menu Iniciar ou da pasta
Qlik Sense em Todos os programas.

Ao iniciar o Qlik Sense Desktop, você estará no hub. É possível fechar a mensagem de saudação.

O hub é o local no qual você encontra todos os aplicativos. Se você colocou o Treinamento Qlik Sense do
aplicativo na pasta Apps, poderá vê-lo no hub.

8
3.3- Abrindo o aplicativo

Clique no aplicativo Treinamento Qlik Sense. A visão geral do aplicativo é aberta. Você agora está dentro do
Treinamento Qlik Sense e pode ver o conteúdo do aplicativo.

Por padrão, o aplicativo mostra a visão geral das pastas. No aplicativo Treinamento Qlik Sense há sete
pastas, Vendas, Est.Vendas, Est. Vendas-Mostradores, Escritório-Funcionários, Est. Funcionários,
Fornecedores, Orçado / Resultado. É nas pastas que você faz a maior parte do trabalho, especialmente se
for um usuário corporativo, e não um desenvolvedor. Clique em Vendas para abrir essa pasta.

3.4- Visualizações no aplicativo

Antes de começar a trabalhar com o Qlik Sense, talvez seja bom entender os princípios básicos das
visualizações.

3.5- Medidas e dimensões

A visualização é composta por pelo menos uma medida ou uma dimensão. Na maioria dos casos, uma
visualização tem ambas, e às vezes mais de uma dimensão ou medida.

As dimensões determinam como os dados em uma visualização são agrupados. Os valores de dimensão
frequentemente referem-se a tempo, lugar ou categoria.

As medidas são o resultado de algum tipo de cálculo, frequentemente agregações, como Sum, Count ou
Avg (média).

Quando as dimensões e as medidas são combinadas em uma visualização, é possível ver, por exemplo,
quantas bicicletas de uma determinada categoria foram vendidas em uma determinada área durante um
determinado período.

9
3.6- Visualizações

Diferentes visualizações servem a diferentes objetivos. O objetivo da visualização, em geral, é exibir os


dados de uma forma rápida e expressiva, mantendo-se 100% exata.

Vamos analisar as visualizações do aplicativo.

3.7- Fazendo seleções

Ao usar um aplicativo, faça seleções para reduzir o conjunto de dados e se concentrar em valores
específicos. É possível fazer seleções em quase todas as visualizações e, na maioria dos casos, de muitas
maneiras diferentes. Basicamente, você clica ou desenha para fazer uma seleção. Clicando, você seleciona
um valor de cada vez; desenhando, seleciona diversos valores ao mesmo tempo. Nem todos os métodos de
seleção estão disponíveis em todas as visualizações, mas existe uma variedade de opções que garante que
você sempre encontre uma maneira fácil de fazer seleções.

Segue abaixo uma apresentação das diferentes opções.

10
3.8- Seleção de clique

No gráfico de pizza abaixo, o ano 2000 foi clicado e, portanto, selecionado. Os outros valores estão
desativados. Você pode confirmar a seleção clicando em ou fora da visualização.

3.9- Seleção de desenho

Desenhe uma linha à mão livre para selecionar diversos valores de uma vez. Para desmarcar os valores
clique neles, um por vez. Para ativar a seleção de desenho, clique dentro da visualização e, em seguida,

clique em ou segure a tecla Shift ao fazer sua seleção.

11
3.10- Seleção de intervalo

Você pode fazer uma seleção desenhando ao longo do eixo y ou eixo x, do lado de fora do gráfico.

3.11- Seleção de laço

Desenhe um círculo à mão livre para capturar e selecionar pontos de dados. Para desmarcar os valores
clique neles, um por vez. Para ativar a seleção de laço, clique dentro da visualização e, em seguida, clique

em ou segure a tecla Shift ao fazer sua seleção.

12
3.12- Seleção de legenda

Você pode clicar nos itens da legenda para selecionar os valores.

3.13- Seleção de rótulo

É possível clicar nos rótulos da dimensão para selecionar o valor correspondente.

13
3.14- Estados de seleção

Agora você sabe como fazer seleções, mas o que acontece quando você faz uma seleção? As seleções
filtram um subconjunto dos dados carregados no Qlik Sense. Use as seleções para se concentrar em um
item sobre o qual você quer saber mais.

3.15- Verde, branco e cinza.

Quando você faz as seleções nos painéis de filtro, as cores dos valores mudam. As cores características do

Qlik Sense é verde, branco e cinza e representam os estados básicos: selecionado, possível e excluído.

Os valores excluídos existem em três variantes diferentes. Além do estado excluído normal, também existem
o estado alternativo e o estado selecionado excluído. Eles serão descritos adiante.

A tabela seguinte lista as cores utilizadas para os diferentes estados.

Selecionado Verde, com uma marca de verificação como um indicador da seleção.

Possível Branco

Alternativo Cinza-claro

Excluído Cinza-escuro

Selecionado excluído Cinza-escuro com uma marca de verificação como um indicador da seleção

O objetivo desse código de cores é fornecer informações adicionais. O verde indica o que foi selecionado, o
branco indica os valores passíveis de seleção e a cinza indica os valores que foram excluídos.

Especificamente, os valores cinza podem trazer novas informações sobre relações que não eram conhecidas
antes. Quando um valor torna-se inesperadamente cinza após uma seleção, ele indica novas percepções.
Por exemplo, uma determinada região não tem representantes de vendas ou um produto não vendeu durante
um trimestre inteiro.

14
4. Criando um aplicativo
Para iniciar Qlik Sense, clique duas vezes no ícone do Qlik Sense. Quando ele inicia, ele exibe uma
tela semelhante a que segue abaixo. Qlik Sense começa com uma mensagem de boas vindas sobreposta ao
'hub', o hub mostra todos os aplicativos disponíveis para você. Podemos ter diversas aplicações instaladas.

Figura 1. Abrindo o Qlik Sense

Clique em “Crie um novo aplicativo” para adicionarmos um aplicativo. O Qlik Sense irá solicitar que
você dê um nome para o aplicativo, vamos chama-lo de “Treinamento Qlik Sense”. Clique em "Criar", e
depois clique em, 'Abrir aplicativo'.
Agora nós criamos um aplicativo vazio, então vamos carregar os nossos primeiros dados.

15
5. A carga do script
5.1- Introdução ao carregamento no Qlik Sense

Qlik Sense utiliza um script de carga de dados, gerenciado no editor da carga de dados para se
conectar e recuperar dados de várias fontes de dados. No script, os campos e as tabelas a serem carregados
são especificados. Também é possível manipular a estrutura de dados usando comandos e expressões de
script.

Durante a carga de dados, o Qlik Sense identifica campos comuns de tabelas diferentes (campos-
chave) para associar os dados. A estrutura de dados resultante dos dados no aplicativo pode ser monitorada
no visualizador do modelo de dados. As alterações na estrutura de dados podem ser obtidas renomeando os
campos para obter diferentes associações entre as tabelas.

Após o carregamento dos dados no Qlik Sense, eles são armazenados no aplicativo. O aplicativo é o
centro da funcionalidade do programa e é caracterizado pela forma irrestrita na qual os dados são
associados, seu grande número de dimensões possíveis, velocidade de análise e tamanho compacto. O
aplicativo é mantido na RAM quando é aberto.

5.2- Formatos de arquivo suportados

Qlik Sense pode ser lido em dados de arquivos em vários formatos:

 Os arquivos de texto, nos quais os dados nos campos são separados por delimitadores como
vírgulas, tabulações ou ponto e vírgula (arquivos variáveis separados por vírgulas (CSV)).
 Arquivos dif (Data Interchange Format)
 Arquivos fix (comprimento fixo de registro)
 Tabelas HTML
 Arquivos Excel
 Arquivos xml
 Arquivos Qlik Sense nativos QVD e QVX

5.3- Edição de script


Agora veremos o Editor da carga de dados. Até agora, nós não demos quaisquer instruções de
como carregar dados, mas logo faremos isto.

16
Clique na caixa “Editor da carga de dados”. O diálogo mostrado abaixo aparecerá na tela. Podemos
ver que existem diversos elementos diferentes nessa tela vamos aprender as funções de cada um durante o
decorrer do curso. A janela de edição toma conta da maior parte da caixa de diálogo.

Vamos explorar cada um dos elementos:

Navegação

No canto superior esquerdo da tela existe o botão “Navegação” ele realiza a abertura das
diferentes partes do nosso aplicativo.

Menu

Ao lado do nosso ícone navegação possuímos o botão “Menu” dentro desse menu possuímos
três opções, “Adicionar dados” uma das formas que o Qlik Sense permite que realizemos inserção de dados
no nosso aplicativo, “Ajuda” abrindo essa opção solicitamos a ajuda pré estabelecida no Qlik Sense e “Sobre”
nos mostra as informações sobre a versão do nosso Qlik Sense.

Salvar

O botão “Salvar” salva o documento em um arquivo .qvf que contém os dados, script e
layout

Sessão de scripts

Na lateral esquerda da tela possuímos o painel de sessão de script com um símbolo de positivo no
topo, e uma lista com as sessões de script que nosso aplicativo possui.

17
Menu edição

No topo da tela de edição de script existe o menu de edição nele tem 7 opções

“Pesquisar e substituir” ele realiza a busca em


todo o script pelo texto que você insere, também é possível substituir os resultados os renomeando,
“Comentar / remover comentário” essa opção insere // antes de todo o texto selecionado dessa maneira o
Qlik Sense não realiza a leitura das linhas que possuem o comentário, “Recuar texto para direita ou para
esquerda” ele realiza a movimentação de todo o texto que estiver selecionado, “Modo ajuda” Habilita ou
desabilita o modo ajuda do Qlik Sense, “Desfazer ou refazer” ele age nas alterações feitas pelo usuário.

Depurar

No canto superior direto temos o botão “Mostrar painel de depuração” esse botão realiza a
abertura de um painel onde é possível encontrar erros no script ou executar de maneira particionada o script

Carregar dados

No canto superior direito temos o botão “Carregar dados” esse botão executa
todo nosso script realizando a carga de dados feita dentro do nosso script.

Conexão de dados

O Botão se encontra no canto superior direito “Mostrar / Ocultar conexão de dados” abre ou
fecha nosso painel de conexão, esse painel está localizado na lateral direita da tela e possui a opção de criar
novas conexões de dados, pesquisar conexões e uma lista de com todas as conexões carregadas em nosso
aplicativo.

Saída

Esse botão encontra-se no canto inferior esquerdo da nossa tela “Saída” ele tem a função
de abrir o painel de saídas do nosso editor de script, as saídas é todo o histórico de carga do nosso
aplicativo.

18
5.4- Sintaxe

Neste capitulo, nós iremos passar pela sintaxe usada no script de carga para os comandos mais
comuns (connect, select, load). Nós também veremos a sintaxe usada para renomear um campo, que é
de grande importância quando se trabalha com o Qlik Sense

A escolha do campo de uma fonte ODBC ou OLE DB é feita usando o comando padrão de SQL
select. Um banco de dados típico pode ser alcançado usando uma interface ODBC, mas o arquivo fonte de
ODBC ou OLE DB deve ser definido primeiro. Isto é feito usando o comando connect. Vamos dar uma
olhada mais de perto em alguns dos comandos mais comuns.
Connect
Um banco de dados qualquer pode ser frequentemente acessado via uma interface de ODBC ou
OLE DB, porém, o arquivo de origem deve ser especificado. Isto é feito usando um comando connect no
script. A sintaxe é:

connect to especificação da conexão[(informações_de_acesso)]

Onde:

especificação da conexão::= fonte de dados { ; especificador da conexão}

A especificação da conexão consiste no nome do arquivo fonte e uma lista de conexões


especificadas. Se o nome do arquivo fonte inclui espaços ou conexões especificadas, devem ser colocados
entre aspas.

Fonte de dados deve ser o nome de uma origem de dados definido ODBC ou OLE DB.

especificador da conexão::= DBQ= especificador da base de dados DriverID=


especificador do driver UID= nome do usuário | PWD= senha

As especificações da conexão variam dependendo do banco de dados. Outras especificações da


conexão podem ser usadas em alguns bancos de dados. Normalmente, só o banco de dados especificado
(DBQ) é usado.

informações_de_acesso ::= item_de_acesso {, item_de_acesso} item_de_acesso

::= userid is nome do usuário | password is senha

Exemplo:
Connect to ’Nwind;
DBQ=C:\Program Files\MSOffice\Access\Samples\
Northwind.mdb’ (UserID is sa, Password is admin);

A fonte de dados especificada por este comando é usada por todos os comandos select
subsequentes até que um novo comando connect seja encontrado.

Select
Um campo é escolhido de uma fonte de dados ODBC usando o comando comum de SQL select. Nem
todas as rotinas do driver de ODBC aceitam a sintaxe select completa. Abaixo há uma pequena descrição da
sintaxe.

select [ all | distinct | top n [ percent ] ] *lista_campo


from lista_tabela [where critério]
[ group by lista_campo[ having critério] ]
[ order by lista_campo [ asc | desc ] ]

19
[ ( inner | left | right | full ) join nome_tabela on ref_campo = ref_campo]

Onde:

distinct é usado se combinações idênticas de valores nos campos escolhidos só devem ser contados uma
vez.

* lista_campo::= (* |campo) {, campo}

Uma lista dos campos que podem ser selecionados. Um asterisco "*" é usado para selecionar todos os
campos.

lista_campo::= campo {, campo}

Uma lista de um ou vários campos separados por vírgulas.

campo::= (ref_campo | expressão) [as novo nome_campo]

ref_campo::= ( nome_campo | @número_campo | @posiçãoinicial:posiçãofinal [ I | U| R| B ] )


nome_campo é um texto que é idêntico a um nome de campo na tabela. Note que o nome do
campo deve estar entre aspas se contiver, por exemplo, espaços. Às vezes, nomes de campos não estão
explicitamente disponíveis. Então uma notação diferente é usada.
@número_campo representa o número do campo em um arquivo de tabela delimitado. Deve ser um
inteiro positivo precedido por "@". A numeração é sempre feita do 1 até o número de campos.
@posiçãoinicial:posiçãofinal representa o começo e o fim das posições de um campo em um
arquivo com registros de comprimento fixo. Ambas as posições devem ser números inteiros e positivos. Os
dois números devem ser precedidos por "@" e separados por dois pontos. A numeração é sempre feita do 1
até o número de posições.
Se @posiçãoinicial:posiçãofinal é imediatamente seguido pelos caracteres I ou U, os bytes lidos
serão interpretados como um binário inteiro assinado (I) ou não assinado (U). O número de posições lidas
deve ser 1, 2 ou 4.
Se @posiçãoinicial:posiçãofinal é imediatamente seguido pelo caracter R, os bytes lidos serão
interpretados como um número real binário (IEEE de 32 bits ou um ponto de 64 bits flutuante). O número de
posições lidas deve ser 4 ou 8.
Se @posiçãoinicial:posiçãofinal é imediatamente seguido pelo caracter B, os bytes lidos serão
interpretados como um BCD (Binary Coded Decimal) números de acordo com o padrão COMP-3. Qualquer
número de bytes pode ser especificado.
expressão pode ser uma expressão numérica ou uma string de texto de um ou vários campos diferentes.
Algumas das operações aceitas são: +, -, *, /, & (concatenação de strings de texto), sum(nome_campo),
count(nome_campo), avg(nome_campo, valormédio), month(nome_campo) etc.

as é usado para renomear um campo.

lista_tabela::= tabela {, tabela}

Uma lista das tabelas de onde os campos serão extraídos.

tabela::= nome_tabela [ [ as ] novonome_campo]

O nome da tabela pode estar entre aspas.

where é uma cláusula que determina se um registro deve ser incluído na escolha ou não.

critério é uma expressão lógica, que pode, às vezes, ser muito complexa. Alguns dos operadores que
podem ser usados são: operadores numéricos, =, <> ou # , >, >=, <, <=, and, or, not, exists, some, all, in e
até novos comandos select. Veja a documentação na rotina de drive ODBC para informações adicionais.

group by é uma cláusula que agrega (agrupa) vários registros em um. Em um grupo, para certo campo,

20
todos os registros devem ter o mesmo valor, ou o campo só pode aparecer em expressões em que
propriedades coletivas são calculadas, por exemplo, a soma ou valor médio.

order by é uma cláusula que especifica a ordem de escolha da tabela resultante do comando select.

join é um prefixo que determina que várias tabelas devem ser unidas para formarem uma tabela única.

Os nomes de campos e nomes de tabelas devem estar entre aspas se eles tiverem espaços ou
caracteres “estrangeiros”, por exemplo, Å, Ø, etc. Se o script é gerado automaticamente, as aspas que a
rotina do drive ODBC especifica para o Qlik Sense na definição da fonte do arquivo no comando connect
são normalmente usadas.

Vários comandos select podem, às vezes, ser concatenados em um comando único com a ajuda do
operador union:

comando select union comando select

Como o comando select é interpretado pela rotina de drive ODBC, desvios da sintaxe geral de SQL
podem surgir. Por exemplo,

Pode ser necessário usar as quando renomear um campo,

distinct, as, where, group by, order by ou union podem não ser suportados,

As aspas descritas acima não podem ser suportadas.

Nota: Esta não é uma descrição completa dos comandos select. Os comandos select podem ser
encapsulados, um comando select pode conter vários comandos join, às vezes, um grande número de
expressões é permitido, etc.

Load

O comando Load lê campos de um arquivo de texto, diretamente dos dados no script carregado, de
uma tabela previamente carregada, dos resultados de um comando select seguinte ou da geração de
dados automática. A sintaxe geral para um comando Load é:

load [ distinct ] *lista_campo


[( from arquivo [especificação do formato ] | inline
[especificação do formato] dados | resident rótulo_tabela |
autogenerate tamanho)] [ where critério | while critério]
[ group by lista_campo]
[order by campo [ordem de classificação] { , campo [ordem de classificação] } ]

Onde:

distinct é usado somente se um dos vários registros idênticos deve ser carregado.

* lista_campo::= ( * | campo) { , campo } )


Uma lista dos campos que podem ser selecionados. Um asterisco "*" é usado para selecionar todos
os campos em uma tabela.

campo::= (ref_campo | expressão) [as novo nome_campo]

A definição de campo deve sempre conter uma referência a um campo ou expressão


existente.

21
ref_campo=( nome_campo | @número_campo | @ posiçãoinicial:posiçãofinal [ I | U| R| B ] )

nome_campo é um texto que é idêntico a um nome de campo na tabela. Note que o nome do
campo deve estar entre aspas se contiver, por exemplo, espaços. Às vezes, nomes de campos não estão
explicitamente disponíveis. Então uma notação diferente é usada.
@número_campo representa o número do campo em um arquivo de tabela delimitado. Deve ser
um inteiro positivo precedido por "@". A numeração é sempre feita do 1 até o número de campos.
@ posiçãoinicial:posiçãofinal representa o começo e o fim das posições de um campo em um
arquivo com registros de comprimento fixo. Ambas as posições devem ser números
inteiros e positivos. Os dois números devem ser precedidos por "@" e separados por dois pontos. A
numeração é sempre feita do 1 até o número de posições.
expressão pode ser uma função numérica ou uma função de string baseada em um ou mais
campos na mesma tabela.

from é usado quando os dados forem carregados de um arquivo e não forem escritos
diretamente usando o script.

arquivo::= [caminho de pesquisa] nome_arquivo

Caminho de pesquisa é o caminho, absoluto ou relativo, para o arquivo. Se o caminho for omitido, o
Qlik Sense procurará pelo arquivo no diretório especificado em um comando directory. Se não existir
nenhum comando directory, o Qlik Sense procurará no diretório atual, que é normalmente o diretório em
que o arquivo do Qlik Sense é armazenado. O caminho também pode ser uma URL (HTTP ou FTP) que se
refira a um local na Internet ou em uma intranet.

nome_arquivo pode incluir o caractere padrão (* e ?). Se um destes for escolhido, todos os arquivos
apropriados são carregados no diretório especificado.

Especificação do formato ::=(especificador do formato {, especificador do formato})


A especificação de formato consiste em uma lista de vários especificadores de formato em parênteses.

5.5- Renomeando um campo

É possível renomear um campo no script de carga a qualquer hora. Também é possível nomear
campos que não têm nenhum nome. Há duas maneiras de se fazer isto no script:

Renomear usando as em um comando de load, o que significa que você renomeia um


campo específico naquele comando específico,

Renomear usando alias, o que significa que você renomeia todos os campos com os nomes
especificados no script.

A sintaxe para um comando alias é:

Alias <nome_campo> as <novo_nome_campo>, < nome_campo> as <novo nome_campo>,…

Exemplo alias:

Alias ID_Prod as ID_Produto, Me as Mês, Cnome as Cliente;

Exemplo as:

Load Capital as Capital_da_Cidade, Pis as Pais, Pop as População from


Pais.csv (ansi, txt…

22
6. Conexões de dados
No editor de carga de dados do Qlik Sense, na seção Conexões de dados, é possível salvar atalhos
para as fontes de dados geralmente utilizadas: banco de dados, arquivos locais ou arquivos remotos. As
Conexões de dados listam as conexões salvas em ordem alfabética. É possível usar a caixa de
pesquisa/filtro para reduzir a lista às conexões com um determinado nome ou tipo.

6.1- Tipos de Conexão

Os seguintes tipos de conexões existem no Qlik Sense:

 Conectores padrão:

 Conexões de banco de dados ODBC.

 ODBC (Open Database Connectivity), é uma forma em que os aplicativos se comunicam com
os bancos de dados. Este é o tipo mais comum de conexão de dados usados no Qlik Sense.

 Conexões de banco de dados OLE DB.

 OLE DB (Object Linking and Embedding, Database), é outra forma em que os aplicativos se
comunicam com os bancos de dados. Diversos tipos de fontes de dados podem ser lidas por
meio dessa interface, especialmente fonte de dados ODBC.

 Conexões de Pasta que definem um caminho para pastas de arquivos locais ou de


rede.Conexões de arquivo da Web usadas para selecionar dados de arquivos localizados em
uma URL da web
 Conectores personalizados:

 Conectores personalizados desenvolvidos para fontes de dados não têm suporte direto do
Qlik Sense. Os conectores personalizados são desenvolvidos usando o Qlik QVX SDK, ou
fornecidos pelo Qlik Sense ou por outros desenvolvedores. Em uma instalação padrão do
Qlik Sense, nenhum conector personalizado estará disponível.

Para ser capaz de se conectar a uma fonte de dados, primeiro você precisa criar e configurar a
conexão.

23
6.2- Nossos dados

Nesta parte introdutória do curso, carregaremos dados de três fontes diferentes. O mais importante é
um banco de dados Access, que é chamado QWT_PORT. A ele, adicionaremos tabelas de planilhas do
Excel.

As origens de dados são conectadas por campos comuns (conhecidos como campos- chave). No
caso das tabelas que contêm informações sobre os empregados e os pedidos da companhia, nós temos os
campos-chave ID_Funcionario e ID_Func. Porém, nós devemos renomear um dos campos de forma que o
QlikView possa entender que estes campos devem ser associados. Nós também temos ID_Fornecedor que
é um campo comum no banco de dados QWT_Port e a tabela contendo dados de fornecedores (DIF).

6.3- Banco de dados Pedidos


Como pode ser visto anteriormente, o banco de dados é bastante simples. O que temos que
lembrar quando carregamos tabelas é que os campos que não queremos que sejam associados pelo Qlik
Sense não devem ter o mesmo nome. Renomear os campos no script resolve este problema.
Obviamente, também é necessário assegurar-se que os campos que nós queremos que sejam associados
tenham nomes idênticos.

24
6.4- Criando uma conexão ODBC

A fim de acessar o banco de dados do Qlik Sense, nós precisamos de uma Fonte de Dados ODBC.
Ela é criada pelo Painel de Controle no Windows. Abaixo há um guia com os passos:

Dê dois cliques no ícone Fontes de Dados (ODBC) em Ferramentas Administrativas no Painel de


Controle para abrir o diálogo Administrador de Fonte de Dados ODBC.

Adicione uma origem de dados clicando no botão Adicionar...

Agora você deve selecionar um driver apropriado para acessar sua fonte de dados. Vários drivers
podem ser vistos na figura abaixo. Se você estiver usando um banco de dados comercial, mas não tiver
seus drivers instalados, você provavelmente poderá encontrá-los nos discos de instalação para o banco de
dados. Se os discos de instalação estiverem indisponíveis ou os drivers antigos ou impróprios, contate seu
provedor ou procure pelos drivers na Internet.

 Selecione o Microsoft Access Driver (*.mdb) e clique em Concluir.


 Clique em Selecionar.
 Encontre seu caminho para a pasta em que o banco de dados QWT_PORT está
armazenado (Fontes de Dados), e selecione QWT_PORT.mdb. Clique em OK.

25
Digite um título apropriado para sua origem de dados. É recomendado que você preencha as
informações de acordo com a figura abaixo.

 Clique em OK para aceitar as mudanças e feche a caixa de diálogo.

Agora você pode acessar a fonte de dados do Qlik Sense. Se por alguma razão a conexão para a
fonte de dados for cancelada, você pode usar o botão Reparar na caixa de diálogo acima para
reestabelecer a conexão.

26
7. Carregamento de dados
Para realizar o carregamento de dados no Qlik Sense podemos apenas arrastar e soltar os arquivos
com os nossos dados no Qlik Sense que ele irá criar automaticamente um script e lê-los. Pode parecer muito
mais fácil, porém, não teremos muito controle dos dados e como podemos precisar mesclar, renomear, editar
ou excluir campos, vamos carregar nosso dados através do seguinte caminho:

Figura 2. Inserindo dados no Qlik Sense

Clique no quadro Editor de carga de dados. Ou clique no ícone "Navegação", que tem esta

aparência localizado no canto superior esquerdo da janela do Qlik Sense.

A partir do menu que vai abrir, escolha a


opção de “editor de carga de dados".

Isso nos coloca no editor de carga de dados que vamos usar para importar e gerenciar os nossos
dados. Usaremos este editor e explorar como funciona passo a passo.
Qlik Sense gera automaticamente algumas configurações para nós, elas controlam algumas coisas
como data, numeração, valores e formatação de tempo. Nós não precisamos alterar nenhuma dessas
configurações, mas vamos adicionar o nosso script ao final das configurações automáticas, por isso
precisamos nos assegurar que script é adicionado no lugar certo. Antes de prosseguir, certifique-se que o
cursor, na caixa de edição está na parte inferior do script como indicado na tela abaixo.

27
Figura 3. Editor de carga de dados

Queremos conectar nosso Qlik Sense ao


nosso arquivo de banco de dados, o nosso primeiro
passo para fazer isso é definir uma conexão de dados
para nos conectar aos arquivos. No canto superior
direito da janela do Qlik Sense, em "Conexões de
dados", clique no botão "Criar nova conexão" e clique
em "OLE DB". Isto diz ao Qlik Sense que estamos
criando uma nova conexão de dados e que os dados
estão em um banco onde ele vai realizar a conexão.

Após clicar na opção OLE DB vai abrir uma


tela de diálogo para escolher o servidor, indicar o
caminho do banco de dados e colocar um nome a
conexão, na caixa de Provedor selecione a opção
“Microsoft Jet 4.0 OLE DB Provider(32-bit)” em fonte
de dados nos vamos indicar o caminho do arquivo do
banco de dados no meu caso o caminho ficou o
seguinte: “C:\Users\qc\Desktop\Apostila Sense\Fontes
de Dados\ QWT_Port.mdb”, porém, esse endereço vai
ser diferente de máquina para máquina,
Na opção “Nome” nós podemos colocar o
nome que quisermos para a conexão no meu caso eu
coloquei “Fonte de dados”, depois clique no botão
criar.

28
Podemos verificar que foi adicionada uma
conexão a nossa lista, disposta a direita da tela do
Qlik Sense, nossa conexão já faz referência ao
banco de dados, porém, ainda não selecionamos
nenhuma tabela para que o Qlik Sense possa ler,
e é isso que vamos fazer agora.

Clique no ícone “Selecionar dados” que possui essa aparência , outra caixa de diálogo vai
aparecer, essa tela vai te dar a opção de carregar as tabelas no aplicativo, na lateral esquerda da tela
aparece uma lista com todas as tabelas que existem no banco de dados, vamos selecionar a tabela “Cliente”,
clicando na caixa ao lado do nome da tabela, podemos verificar que foi adicionado um “check” laranja que se
encontra ao lado de seu nome, essa tela deve estar com a seguinte aparência:

Figura 4. Carga de tabelas do Banco de dados

29
Clique em “inserir script”, o código será inserido onde o cursor estava localizado o script gerado
deverá ser como este:
LIB CONNECT TO 'Fonte de dados';
LOAD

Cidade,
`Codigo_Postal`,
Endereco,
Fax,
Fone,
`ID_Cliente`,
`Nome_da_Empresa`,
`Nome_do_Contato`,
Pais;

SQL SELECT

Cidade,
`Codigo_Postal`,
Endereco,
Fax,
Fone,
`ID_Cliente`,
`Nome_da_Empresa`,
`Nome_do_Contato`,
Pais

FROM Clientes;

Com o propósito de sempre obedecer as


boas práticas de desenvolvimento, vamos criar
diferentes seções para os dados que estamos
carregando, podemos observar que na lateral
esquerda da nossa tela existe um painel de
seções até esse momento apenas possuímos a
seção chamada Main que é gerada pelo próprio
sistema do Qlik Sense, porém não fica muito
prático gerar todo nosso script na seção Main,
então vamos criar mais seções para nosso
aplicativo no canto superior esquerdo existe
chamado “Criar nova seção” o ícone possui essa

aparência vamos criar as seguintes


seções, agora recorte o script que foi gerado e
cole na seção “DIM”.

“DIM” É a seção que vai conter as dimensões do nosso aplicativo.


“Pedidos” É a seção que vai conter os dados de Pedidos do nosso aplicativo.
”Fato” É a seção que vai conter a nossa tabela “principal” que fará referência as outras tabelas.
“MasterCalendar” É a seção que vai conter os dados e configurações de data.

Clique em “Carregar dados” que se encontra no canto superior direito da tela. Agora nosso aplicativo
já possui uma tabela carregada, faça o mesmo procedimento agora carregando as tabelas de
“Fornecedores”, “Produtos” e “Categorias” na mesma seção Dim (Dica: podemos selecionar mais de uma
tabela e carregar de uma só vez).

30
Outra boa prática que devemos seguir é identificar o script com o nome de cada tabela que é
carregada coloque duas barras // antes do nome para que o Qlik Sense não interprete como algum tipo de
comado.
O Script gerado será igual a esse:

LIB CONNECT TO 'Fonte de dados';

//***************Categorias***************

LOAD
Descricao,
`ID_Categoria`,
`Nome_da_Categoria`;

SQL SELECT

Descricao,
`ID_Categoria`,
`Nome_da_Categoria`
FROM Categorias;

//***************Fornecedores***************

LOAD
`ID_Fornecedor`,
`Nome_da_Empresa` as Fornecedor;

SQL SELECT

`ID_Fornecedor`,
`Nome_da_Empresa`
FROM Fornecedores;

//***************Produtos***************

LOAD

`ID_Categoria`,
`ID_Fornecedor`,
`ID_Produto`,
`Nome_do_Produto`,
`Preco_Unitario`,
QuantidadePorUnidade,
`Unidades_em_Estoque`,
`Unidades_Pedidas`;

SQL SELECT

`ID_Categoria`,
`ID_Fornecedor`,
`ID_Produto`,
`Nome_do_Produto`,
`Preco_Unitario`,
QuantidadePorUnidade,
`Unidades_em_Estoque`,
`Unidades_Pedidas`
FROM Produtos;

31
Nesse script que foi gerado vamos renomear um de seus campos, identifique o comado “Load” da
tabela fornecedor na coluna ‘Nome_da_Empresa’ vamos inserir o seguinte comando ‘as
Fornecedor;’ o comando fica da seguinte maneira `Nome_da_Empresa ‘as Fornecedor;’ com
esse comando estamos informando para o Qlik Sense que a coluna “Nome_da_empresa” deverá se chamar
“Fornecedor” .

Clique em “Carregar dados” novamente.


Até esse momento possuímos quatro tabelas carregadas e relacionadas em nosso aplicativo, vamos

visualiza-las, clique no ícone “Navegação” novamente, clique na opção “Visualizador do


modelo de dados”.

O modelo vai aparecer na tela, mostrando as tabelas carregadas e elas devem estar ligadas por uma
linha exceto a tabela “Cliente” isso mostra que o relacionamento entre as tabelas “Fornecedor”, “Categorias”
e “Produtos” está correto, o modelo deve ser parecido com esse:

Figura 5. Visualizador de modelo de dados

32
Volte para o “Editor da carga de dados” na seção Pedidos e insira a tabela de Pedidos edite o script
para copiar o campo Data_do_Pedido como mostrado abaixo a fim de gerar novos campos para ano, mês e
dia. Note que as strings de texto usadas para representar os meses são dependentes das configurações
regionais do seu sistema operacional. Se suas configurações estão em inglês, os meses serão mostrados em
inglês.

LOAD

`Data_do_Pedido`,
Frete,
`ID_Cliente`,

year(Data_do_Pedido)as Ano,
month(Data_do_Pedido) as Mes,
day(Data_do_Pedido) as Dia,

`ID_Fornecedor`,
`ID_Funcionario`,
`ID_Pedido`;

SQL SELECT

`Data_do_Pedido`,
Frete,
`ID_Cliente`,
`ID_Fornecedor`,
`ID_Funcionario`,
`ID_Pedido`

FROM Pedidos;

Finalmente carregue a tabela “Detalhes do Pedido”. Aqui criaremos um novo campo VendasLiquidas
que é o resultado de um cálculo baseado em Preço_Unitario * Quantidade * (1-Desconto). O script de carga
ficará assim:
LOAD

Desconto,
`ID_Pedido`,
`ID_Produto`,
`Preco_Unitario`,
Quantidade,
Preco_Unitario * Quantidade * (1-Desconto) as VendasLiquidas;

SQL SELECT

Desconto,
`ID_Pedido`,
`ID_Produto`,
`Preco_Unitario`,
Quantidade

FROM `Detalhes do Pedido`;

Antes de recarregar lembre-se de salvar suas alterações , clique em “Carregar dados” no


canto superior direito da tela, o Qlik Sense vai gerar uma “Chave sintética” e uma “Referência Circular” um
problema que pode interferir diretamente a integridade dos dados e o desempenho do Qlik Sense.

Quando se trabalha com estruturas de dados complicadas contendo muitas tabelas, é possível
encontrar uma situação em que a interpretação dos dados é incorreta. O Qlik Sense foi desenvolvido de tal
modo que possa lidar com as estruturas mais complicadas e automaticamente interpretá-las corretamente,
mas existem algumas limitações. É importante que você esteja ciente destas limitações e saiba como
resolver o problema de loops quando eles surgirem.

33
Agora entre no Visualizador do modelo de dados seu modelo deve ter uma aparência parecida com
essa, com sete tabelas carregadas e algumas linhas tracejadas em vermelho, que indica a referência circular:

Figura 6. Visualizador de modelo de dados (Referência Circular e Chave Sintética)

34
7.1- Referência Circular

Considere o seguinte exemplo que consiste em uma estrutura de dados simples com três tabelas.

Como você pode ver, é possível literalmente “andar em círculos”. Neste exemplo, é fácil descobrir
uma referência circular, mas pode ser mais difícil em estruturas complicadas.

As estruturas de dados deste tipo devem ser evitadas até onde é possível, como elas podem levar
à interpretação ambígua dos dados.

Infelizmente, referências circulares são bastante comuns. Elas ocorrem, frequentemente, devido ao
desenho de banco de dados pobre, mas em alguns casos elas são inevitáveis.

Em alguns casos, um campo (ou uma tabela) pode ter vários papéis, por exemplo, uma empresa
pode ser um fornecedor e um cliente. O campo (ou tabela) deve então ser carregado no Qlik Sense duas
vezes com nomes diferentes.

O Qlik Sense resolve o problema de referências circulares usando uma tabela parcialmente
desconectada. Se o Qlik Sense encontra um loop enquanto está executando a carga do script, um aviso
será mostrado e uma ou mais tabelas serão parcialmente desconectadas. Se você desejar alterar o padrão
do Qlik Sense, você pode definir a tabela para conectar-se parcialmente usando um comando loosen table
no script.

Para retirar a referência circular e a chave sintética vamos retirar alguns campos que estão agindo
em duplicidade no nosso aplicativo, você poderá simplesmente apaga-los ou inserir // antes de seu nome,
esse comando é o “Comentar” o Qlik Sense entende que essa linha não será considerada na leitura do
script, o primeiro campo que vamos tirar é “ID_Fornecedor” da tabela “Produtos“ comente ele no comando
LOAD e no SQL Select e comente o campo “Preco_Unitario” na tabela “Detalhes do pedido”, porém
somente no comando LOAD com isso você retira a referência circular e a chave sintética,

35
seu script deve ser igual ao mostrado abaixo, salve seu projeto e clique em carregar dados.

LIB CONNECT TO 'Fonte de dados';


LOAD
Cidade,
`Codigo_Postal`,
Endereco,
Fax,
Fone,
`ID_Cliente`,
`Nome_da_Empresa` as Fornecedor,
`Nome_do_Contato`,
Pais;
SQL SELECT
Cidade,
`Codigo_Postal`,
Endereco,
Fax,
Fone,
`ID_Cliente`,
`Nome_da_Empresa`,
`Nome_do_Contato`,
Pais
FROM Clientes;

LOAD
Descricao,
`ID_Categoria`,
`Nome_da_Categoria`;
SQL SELECT
Descricao,
`ID_Categoria`,
`Nome_da_Categoria`
FROM Categorias;
LOAD
`ID_Fornecedor`,
`Nome_da_Empresa` as Fornecedor;
SQL SELECT
`ID_Fornecedor`,
`Nome_da_Empresa`
FROM Fornecedores;
LOAD
`ID_Categoria`,
//`ID_Fornecedor`,
`ID_Produto`,
`Nome_do_Produto`,
`Preco_Unitario`,
QuantidadePorUnidade,
`Unidades_em_Estoque`,
`Unidades_Pedidas`;
SQL SELECT
`ID_Categoria`,
//`ID_Fornecedor`,
`ID_Produto`,
`Nome_do_Produto`,
`Preco_Unitario`,
QuantidadePorUnidade,
`Unidades_em_Estoque`,
`Unidades_Pedidas`
FROM Produtos;
LOAD
`Data_do_Pedido`,
Frete,
`ID_Cliente`,
year(Data_do_Pedido)as Ano,
month(Data_do_Pedido) as Mes,
day(Data_do_Pedido) as Dia,

36
`ID_Fornecedor`,
`ID_Funcionario`,
`ID_Pedido`;
SQL SELECT
`Data_do_Pedido`,
Frete,
`ID_Cliente`,
`ID_Fornecedor`,
`ID_Funcionario`,
`ID_Pedido`
FROM Pedidos;
LOAD
Desconto,
`ID_Pedido`,
`ID_Produto`,
//`Preco_Unitario`,
Quantidade,
Preco_Unitario * Quantidade * (1-Desconto) as VendasLiquidas;
SQL SELECT
Desconto,
`ID_Pedido`,
`ID_Produto`,
`Preco_Unitario`,
Quantidade
FROM `Detalhes do Pedido`;

37
8. Desenvolvendo layout:
Agora que carregamos essas tabelas no Qlik Sense já podemos iniciar a criação do nosso primeiro

layout, clique no ícone “Navegação” e depois em “Visão Geral do Aplicativo” em seguida clique na
caixa “criar nova pasta” coloque um nome para sua pasta eu a chamei de “Vendas” e depois clique no ícone
da pasta.

Figura 6. Nova pasta

Qlik Sense realiza a criação de visões em pastas. Um aplicativo normalmente vai ter muitas pastas,
com vários itens diferentes por pasta. Nossa primeira pasta já foi criada, porém ela encontra-se vazia, clique

no ícone que fica localizado no canto superior direito da pasta, ele vai abrir o modo de edição
do Qlik Sense,
Há muita coisa no modo de edição então vamos reservar um tempo para nos familiarizar com todos
os elementos existentes nessa tela já que todos eles vão ser utilizados no nosso treinamento.

No canto inferior direito da janela, você verá o ícone de propriedades . Se você clicar nele, ele
vai mostrar as propriedades do item selecionado. Clique agora e você verá as propriedades da pasta ('Título'
e 'Descrição'). Esta é uma das maneiras de alterar o nome e a descrição de uma pasta. Deixe a exibição do
painel propriedades, vamos precisar usá-la em breve.

Na parte inferior direita da janela, você verá os ícones desfazer / refazer . Esse ícone
funciona da maneira padrão, como qualquer outro sistema que você tenha usado.
Na parte inferior da janela existem alguns ícones de edição. Eles são cortar, copiar, colar e excluir.

Mais uma vez, eles funcionam da maneira padrão para cada comando.

No canto inferior esquerda você verá o ícone Itens . Ele mostra / esconde os itens de
visualização. Entre esses itens estão elementos como tipos de gráficos, campos e itens-mestre. Nós
precisamos ver esses itens para usá-los, por isso certifique-se o painel de itens é mostrado.

38
O painel Itens está no lado esquerdo da
janela. Ele mostra os itens de visualização que
podemos adicionar à nossa pasta.
O painel de Itens possui três guias;
gráficos, campos e itens-mestre. Vamos usar
todos essas guias durante nosso treinamento. Por
enquanto, vamos nos concentrar na guia
'Gráficos'. Tome um segundo para olhar os tipos
de gráficos disponíveis nesta guia. Estes são
todos os tipos de gráficos que vem como padrão
no Qlik Sense.

Vamos iniciar adicionando os primeiros filtros, clique no item “Painel de filtro”, e arraste para a tela de
edição, depois clique em “incluir dimensão” e clique em “Ano”.

Figura 7. Inserindo elementos

39
Redimensione o painel que foi criado de forma que fique dessa maneira, , faça o mesmo
procedimento com os campos “Mês” e “Dia”, após inserir esses filtros o nosso aplicativo deve ter uma
aparência parecida com essa:

Agora vamos adicionar uma imagem a nossa pasta vamos selecionar o item “Texto e imagem” clique
e arraste para a nossa tela de edição, Atenção: O Qlik Sense só consegue adicionar imagens que estão em
um diretório especifico todas as imagens que serão adicionadas ao nosso aplicativo deverão estar dentro
desse diretório, vá até o Meu Computador, Documentos, Qlik, Sense, Content, default, as nossas imagens
deverão estar nessa pasta, você vai notar que já existe algumas imagens nesta pasta, é o padrão do Qlik
Sense.
Agora clique no sinal de positivo no centro do objeto que criamos, e depois em “Inserir uma imagem”.

Podemos verificar que essa lista refere-se às imagens que estão naquela pasta que foi falado agora
a pouco, se for necessário adicionar alguma imagem ao nosso aplicativo, antes ela deverá ser copiada para
esse diretório.

Figura 8. Lista de imagens

40
Posicione e redimensione da melhor forma possível e salve o aplicativo.

Vamos incluir mais filtros, com os campos, “País”, “Cidade”, “Fornecedor”, teremos um layout com a
aparência parecida com esta:

Agora no painel de itens, clique na guia de


“Itens mestres”, você vai verificar que no painel
existem três botões, “Dimensões”, “Medidas” e
“visualizações”, clique em “Medidas”, depois em
“Criar novo”, vai abrir a seguinte caixa de diálogo:

Nessa caixa vamos criar nossa primeira expressão, os “Itens mestres” tem o objetivo de ser uma
espécie de atalho para as funções, dimensões ou visualizações que serão utilizadas no aplicativo.
Na caixa de texto com o titulo “Expressão” vamos inserir a seguinte função “Count(VendasLiquidas)”,
ou seja, vai contar quantos dados existem na coluna VendasLiquidas, na caixa de texto de titulo “Nome”
vamos colocar um nome para nossa expressão, nesse caso poderá ser “Qtde.”, na caixa de texto chamado
“Descrição” atribuiremos uma descrição para nossa função que poderá ser “Contagem de todas as vendas
Liquidas” depois clique em criar, nossa função já foi criada, e pode ser encontrada no painel esquerdo de
Itens.

41
Crie mais três medidas, também baseadas
no campo VendasLiquidas, utilizando as funções
de agregação da expressão Sum, Max e Min.

Novamente vamos ao painel Itens, na guia


“Gráficos”, vamos selecionar o item “Texto e
imagem” clique e arraste para nossa tela de
edição, agora clique na guia de “Itens mestres”
clique na medida “Qtde” arraste e solte no meio do
nosso item “Texto e imagem”, neste momento nós
adicionamos uma expressão na nossa caixa de
texto, antes da expressão escreva ao que ela
refere-se, por exemplo: “Quantidade de Vendas: ”,
adicione ao nosso item as outras medidas que
criamos.

Agora mantenha o nosso item de “Texto e imagem” selecionado e vá até o painel de propriedades do
lado direito da tela, na aba “Dados” podemos identificar cada uma das medidas nesse painel também, de um
clique na medida “Qtde” e em “Fator numérico” selecione o item “Número” Formatação deixe na opção
“Simples” e selecione a opção “1000” para retirar as casas decimais, e nas medidas “Max”, “Min”, “Soma” em
“Fator numérico” selecione a opção “Moeda”, agora volte ao nosso item e selecione apenas a expressão e
altere sua cor, para vermelho:

42
Depois redimensione e coloque-o no canto
inferior esquerdo da tela, salve o aplicativo, nosso
item deve estar com aparência similar a essa:

Abaixo do filtro de fornecedor, inclua mais


dois filtros usando como dimensão
“Nome_da_Categoria” e “Nome_do_Produto” ,
renomeie os filtros, no painel de “Propriedades”,
guia “Dados”, Altere campo “Título” os chame de
Categoria e Produto, respectivamente.
Na tela de edição podemos inserir dois
campos de “Texto e imagem” e inserir um título
para nossos filtros, os filtros “País”, “Cidade” e
“Fornecedor” podemos dar o título de “Clientes” e
os filtros de “Categoria” e “Produto” podemos dar
o titulo de “Produtos”, nosso filtros estão com a
seguinte aparência:

Salve seu projeto, depois clique no ícone teremos a visão de como nossa pasta está ficando
e como cada elemento vai se comportar dentro do Qlik Sense.

Figura 9. Visão do nosso aplicativo

Realize algumas seleções nos filtros e verifique como o nosso resumo altera de acordo com os elementos
que foram selecionados.

43
9. Carregamento de dados de uma planilha Excel:

Clique novamente no ícone “Navegação” , depois em “Editor da carga de dados”, queremos


utilizar os dados em arquivos, o nosso primeiro passo para fazer isso é definir uma conexão de dados para
nos conectar aos arquivos.

No canto superior direito da janela do Qlik


Sense, em "Conexões de dados", clique no botão
"Criar nova conexão" e clique na opção "Pasta".
Isto diz ao Qlik Sense que estamos criando uma
nova conexão de dados e que os dados estarão
em arquivos naquela pasta.

Precisamos dizer ao Qlik Sense onde estão


nossos dados.
Localize a pasta chamada “Fonte de dados”,
Na minha máquina, o caminho completo para os
arquivos de dados é “C:\Users\qc\Desktop\Apostila
Sense/Fonte de Dados", mas isso vai ser diferente de
máquina para máquina.
No diálogo “Criar uma nova conexão de dados
(pasta)”, navegue pelos diretórios até encontrar a
pasta “/Apostila Sense / Fonte de dados” Vamos
nomear a conexão como “Conexão com os dados”.
Clique em "Criar" para salvar a nova conexão.

Nós criamos uma conexão chamada


“Conexão com os dados” que direciona o Qlik Sense
para a pasta onde está à base de dados que vamos
utilizar, (podemos encontra-la no canto direito da tela)
agora só precisamos ler esses dados, vá para a seção
que nos criamos chamada DIM verifique se o cursor
está localizado no final do script, clique em “Selecionar
dados” na caixa "Conexão com os dados".

44
Selecione o arquivo chamado “Func_Esc.xls” depois clique em “Selecionar”, vai abrir a seguinte caixa de
diálogo:

Figura 10. Adicionando tabelas Excel

Na lateral esquerda da caixa de diálogo que surgiu, selecione as colunas “Funcionário$” e


“Escritorio$”, na tabela “Funcionarios$” precisamos renomear o campo “ID_Func” para que ele possa fazer
o relacionamento com as outras tabelas que carregamos anteriormente, clique em cima do nome “ID_Func”
e será habilitado a edição então escreva “ID_Funcionario”, atente-se as letras maiúsculas e minúsculas pois
o Qlik Sense faz distinção entre elas, e clique em inserir script, o script que foi gerado é igual a esse, antes
do comando Load vamos inserir mais uma linha que terá a função de renomear a tabela é bem simples
colocaremos o novo nome da nossa tabela seguida de dois pontos na tabela Funcionário$ vamos inserir
Funcionários: e na tabela Escritorio$ vamos inserir Escritório: o script será dessa forma:
Funcionario:
LOAD
ID_Func as ID_Funcionario,
Ultimo_Nome,
Primeiro_Nome,
Titulo,
Data_Admissao,
Escritorio,
Extensao,
Reporta_a,
Salario_Anual
FROM [lib://Conexão com os dados/Func_Esc.xls]
(biff, embedded labels, table is Funcionario$);
Escritorio:
LOAD
Escritorio,
Endereco,
Codigo_Postal,
Cidade,
Fone,
Fax,
Pais
FROM [lib://Conexão com os dados/Func_Esc.xls]
(biff, embedded labels, table is Escritorio$);

45
Porém, se executarmos nosso script nesse momento o Qlik Sense vai fazer uma referência circular e uma
chave sintética, por conta dos campos da tabela “Escritorio$” alguns campos fazem referencias indevidas
com outras tabelas já carregadas no nosso aplicativo, para resolver isso vamos renomear os campos da
tabela “Escritorio$” da seguinte forma:

LOAD

Escritorio,
Endereco as Endereco_Escritorio,
Codigo_Postal as Codigo_Postal_Escritorio,
Cidade as Cidade_Escritorio,
Fone as Fone_Escritorio,
Fax as Fax_Escritorio,
Pais as Pais_Escritorio

FROM [lib://Conexão com os dados/Func_Esc.xls]


(biff, embedded labels, table is Escritorio$);

Agora salve o arquivo e clique em “Carregar dados”, não haverá nenhuma advertência de

referência circular ou chave sintética, clique no ícone “Navegação” e clique em “Visualizador do


modelo de dados”, seu modelo deve estar parecido com esse:

Figura 11. Visualizador de modelo de dados (2)

46
10. Criar Gráficos
10.1- Campos chave

Os campos-chave são campos comuns em uma ou mais tabelas (campos associados). Quando um
campo aparece em mais de uma tabela o Qlik Sense não sabe que tabela usar a fim de calcular a
frequência dos dados.

10.2- Um exemplo de problemas que podem surgir

Assuma que temos uma tabela chamada Pedidos com 1000 números de pedidos diferentes (ID_Pedido).
Também temos a tabela chamada Pedidos_Estrangeiros, que contém 200 números de pedidos. Estes
números também são encontrados na primeira tabela.

As duas tabelas serão associadas pelo campo comum ID_Pedido. O problema surge quando você quiser
saber o número exato de pedidos. São 1000, 200 ou 1200? Nós sabemos baseados nas informações que
temos que a resposta correta é 1000, mas isto não está claro para o Qlik Sense

Neste caso, o Qlik Sense procurará por uma tabela principal. Pode escolher a correta, mas na maioria
dos casos o programa terá que adivinhar.

Como suposições podem levar a consequências sérias, o Qlik Sense foi projetado de forma que não
permite certas operações, se existe qualquer dúvida sobre qual campo é o correto para calcular a
frequência.

10.3- Como isto afeta você?

Você deve ter em mente as seguintes limitações quando trabalhar com campos-chave.

Na maioria dos casos não será possível usar funções para calcular a frequência de campos associados
em diagramas (Contagem Total, valor médio, etc.). Você deve usar um cálculo Distinto.

10.4- Resolvendo o problema


Existe uma solução relativamente simples para o problema de campos-chave e o cálculo de frequência
de dados. Você carrega o campo que costuma calcular a frequência de novo com outro nome.
O problema que descrevemos acima pode ser resolvido da seguinte maneira:

Load
…, ID_Pedido,
ID_Pedido as CountID_Pedido,

FROM Pedidos.xls (…);

Agora você pode usar o novo campo (não associado) em uma lista, que mostra a frequência ou um
diagrama com funções para calcular a frequência. O novo nome de campo pode facilmente ser
disfarçado, dando-lhe outro nome para não confundir os usuários do documento.

47
10.5- O gráfico realmente mostra o que eu quero que ele mostre

Quando você criar um gráfico no Qlik Sense é importante saber se ele realmente mostra o que você
quer que ele mostre. Seja cuidadoso para escolher expressões apropriadas em cada caso. O Qlik
Sense tem várias expressões. Abaixo há um resumo destas expressões junto com o que elas mostram.

Pessoal_Vendas Artigo ID_ Cliente Quantidade


Karl A 10 100
Janne A 101 200
Ola B 10 250
Karl B 111 350

Expressão Resultado

Contagem Total (Pessoal_Vendas) 4

Contagem Total (Distinto Pessoal_Vendas) 3

Contagem Total (Artigo) 4

Contagem Total (Distinto Artigo) 2

Num(Quantidade) 4

Sum(Quantidade) 900

48
10.6- Adicionando gráficos a nossa pasta

Vamos incluir nossos primeiros gráficos a nossa pasta, clique no ícone “Navegação” depois
em “Visão geral do aplicativo” e abra a nossa pasta “Vendas” abra o painel “Itens” abra guia “Gráficos” clique
no “Gráfico de pizza” e arraste para a tela de edição.

Ele será apresentado desta forma na nossa


tela, clique em “Incluir dimensão” e selecione a
dimensão de “Ano”, agora em “Adicionar medida” à
medida que nós vamos incluir é
Sum(VendasLiquidas), porém, nós já adicionamos
essa medida ao nossos “Itens mestres” e o chamamos
de “Soma” então se adicionarmos a medida soma ela
já vai executar a expressão, essa é uma das
facilidades de adicionarmos “Itens mestres” ao nosso
aplicativo.

Agora vamos formata-lo para melhor exibição


dos dados, no painel “Propriedades” na lateral direita
da tela, abra o menu “Aparência” clique em “Geral” na
opção “Título” insira o título “Pedidos por ano”, na
opção “Apresentação” desmarque o “Rótulo da
dimensão” na opção “Cores e legenda” marque a
“Mostrar legenda” e em “Posição da legenda”
selecione “Direita”, agora nosso gráfico está com a
seguinte aparência:

Agora crie um gráfico de barras, inclua em sua


dimensão “Nome_da_Empresa” e como medida insira
expressão “Count(DISTINCT ID_Produto)”, no painel
propriedades realize a formatação do gráfico, entre na
opção “Dados” clique na dimensão
“Nome_da_Empresa” e desmarque a opção “Mostrar
valores nulos” na opção “Complementos” clique em
“Manipulação de dados” e desmarque a opção
“Mostrar valores zero” na opção “Aparência” clique em
“Geral” e insira o título para o nosso gráfico “Produtos
por clientes” depois clique em apresentação e
selecione a opção “Horizontal” clique na opção “Eixo
Y:Nome_da_Empresa” escolha a opção “Somente
rótulos” e faça o mesmo em “Eixo X:Count(DISTINCT
ID_Produto)”.

49
10.7- A Nossa primeira visão

Nossa primeira pasta está concluída clique no botão para visualizar nossa aplicação, ela deve
estar parecida com isso:

Realize algumas seleções e verifique como a visão se comporta, com cada uma delas, redimensione,
arraste, gire, explore bastante o seu aplicativo, pois o “faça você mesmo” é uma das premissas do Qlik
Sense.

50
11. Nova Pasta
Agora vamos adicionar uma nova pasta ao nosso aplicativo clique no ícone “Navegação” e na opção
“Visão geral do aplicativo” depois em “Criar nova pasta” o Qlik Sense vai pedir para que você insira um nome
para essa pasta, nós vamos chama-la de “Est. Vendas”, ela vai iniciar com a mensagem que a pasta

encontra-se vazia clique no boão “Editar” e com o auxilio dos botões de anterior e próximo

para facilitar a navegação entre as pastas, copie os elementos que se tornarão padrão para
todas as nossas pastas, como o elemento de imagen e filtros de Dia, Mês e Ano.

Vamos inserir três filtros diferentes a nossa pasta que irão conter as dimensões de Titulo, Primeiro_Nome e
Ultimo_Nome e eles ficarão dispostos a esquerda onde estavam os filtros de Clientes e Produtos.

No Painel de Filtro Ano faça uma seleção. Como você pode ver só alguns dos funcionários da empresa
fizeram parte das atividades de vendas. Da lista de Titulo pode ser visto que só aquelas pessoas com
Vendas em seu título, e o presidente da empresa, foram envolvidas. Isto nos leva a fazer correções
adicionais em nosso script.

Crie uma tabela lógica contendo os campos ID_Funcionario, Titulo, Primeiro_ Nome e Ultimo_Nome da
tabela Funcionario. Se você não quiser editar o script à mão, você pode carregar os campos como nós
fizemos da primeira vez, ou copie o script gerado. Todos os campos serão adicionados ao script, mas ele
fornece uma boa base para copiar e colar. O script deve ficar parecido com este.

Load
ID_Func as ID_Funcionario,
Ultimo_Nome,
Primeiro_Nome,
Titulo as Titulo_Vendas
FROM [lib://Conexão com os dados/Func_Esc.xls]
(biff, embedded labels, table is Funcionario$)
where left (Titulo,3) = 'Sal' OR Titulo = 'President';

Agora clique em carregar dados depois volte para o seu aplicativo clicando no botão
“Navegação” e “Visão geral do aplicativo” depois na pasta Est. Vendas.

No painel de Itens clique no elemento Painel de Filtro e arraste para o centro da tela, com dimensão inclua o
campo Titulo_Vendas.

Agora temos listas que mostram só os funcionários envolvidos com vendas. Nós fizemos isto incluindo uma
cláusula where no fim do script.

Para um valor, da tabela original ser incluído na nova tabela lógica, deve satisfazer pelo menos uma das
condições que nós definimos. A primeira condição é que os primeiros três caracteres dos registros no campo
Título devem ser Sal. A segunda condição é que o campo deve ser igual a President. Deste modo, nós
podemos cobrir todas as alternativas.

51
Salve seu aplicativo. Agora a pasta Est. Vendas deve estar parecida com esta:

11.1- Tabelas de chave sintéticas

Não é desejável ter múltiplas chaves em comum em várias tabelas, às vezes isso resulta de um desenho de
banco de dados ruim. Isto pode fazer com que o Qlik Sense utilize chaves sintéticas a fim de gerar as
conexões na estrutura de dados. As chaves sintéticas são geralmente um recurso pesado e podem diminuir a
velocidade de cálculos e em casos extremos sobrecarregar uma aplicação. Por esta razão, chaves sintéticas
deveriam ser sempre eliminadas.

Quando nós carregamos a tabela que gera o campo Titulo_Vendas, nós inadvertidamente criamos uma
chave sintéticas entre as duas tabelas Funcionario$. A chave sintética é gerada em uma nova tabela chave
sintética ($ Syn 1 Table) que pode ser monitorada pelo Visualizador do modelo de dados no menu
Navegação.

11.2- Removendo a tabela da chave sintética

Como pode ser visto no Visualizador do modelo de dados, nós temos atualmente uma tabela de chave
sintética contendo os campos Primeiro_Nome, Ultimo_Nome e ID_Funcionario. A fim de remover as
conexões redundantes, devemos renomear os campos que não queremos usar como campos-chave. Nós
podemos aproveitar esta oportunidade para introduzir uma mudança adicional combinando os campos
Primeiro_Nome e Ultimo_Nome em novos campos Nome por concatenação.

52
Faça as seguintes mudanças nas linhas do script que carregam os campos Primeiro_Nome e
Ultimo_Nome de forma que o script carregado leia agora as duas tabelas envolvidas:

Funcionário:
LOAD
ID_Func as ID_Funcionario,
Ultimo_Nome & ' ' & Primeiro_Nome as Nome,
Titulo,
Data_Admissao,
Escritorio,
Extensao,
Reporta_a,
Salario_Anual
FROM [lib://Conexão com os dados/Func_Esc.xls]
(biff, embedded labels, table is Funcionario$);

... Load
ID_Func as ID_Funcionario,
Primeiro_Nome & ' ' & Ultimo_Nome as Pessoal_Vendas,
Titulo as Titulo_Vendas
FROM [lib://Conexão com os dados/Func_Esc.xls]
(biff, embedded labels, table is Funcionario$)
where left (Titulo,3) = 'Sal' OR Titulo = 'President';

Depois de executar o script, você pode confirmar que a chave sintética sumiu.

11.3- Modificando o layout

Agora que nós concatenamos os campos


Primeiro_Nome e Ultimo_Nome, eles não estão mais
disponíveis como listas. Se você olhar na pasta Est.
Vendas,verá que as duas listas estão vazias. Você
deve substituí-las por uma lista exibindo o campo
Pessoal_Vendas.

53
11.4- Vendas por Vendedor

Nós agora criaremos um gráfico de barras com duas dimensões a fim de mostrar as vendas por vendedor
durante os anos que trabalharam. Vá para a pasta Est. Vendas.

No Painel de Itens selecione o Gráfico de barras e arraste para o centro da nossa tela.

Inclua a dimensão Pessoal_Vendas e no Painel de propriedades adicione também a dimensão Ano.

Crie a expressão Soma de VendasLiquidas e chame de Soma das Vendas Lembre-se que está expressão já
está pronta no itens mestres.

Agora vamos formatar o nosso gráfico, no Painel de Propriedades vá até a opção Aparência e escolha a
opção Empilhado.

Desmarque a opção Cores Automático e na caixa de opções escolha a opção Por Expressão e na caixa de
expressão digite a seguinte expressão:

If(Ano = 1997, RGB(255,0,0),


If(Ano = 1998, RGB(0,255,0),
If(Ano = 1999, RGB(0,0,255),
If(Ano = 2000, RGB(255,255,0)))))

Em geral desabilite o titulo e deixe as opções de mostrar apenas Rótulos no eixo X e no eixo Y.

Sua pasta deve estar com essa aparência:

54
11.5- Avançado – Carregando dados de uma tabela previamente carregada
Nós usamos um método bastante simplista que permitiu mostrar os valores de campo exigidos para o
campo Nome. Este método é perfeitamente adequado, mas nós podemos obter o mesmo resultado
usando uma solução mais elegante.

Nós começamos observando que todos os vendedores estão incluídos em nossos dados de vendas. Eles
devem aparecer no campo ID_Funcionario na tabela Pedidos, aproveite e renomeie a tabela para
Pedidos. Nós começamos criando um novo campo Vendas_Funcionario no script onde Pedidos foi
carregado. Falando neste campo, nós excluiremos todas as outras pessoas que existem no campo
ID_Funcionario na tabela Funcionario$. Inclua a seguinte linha no script logo depois de ID_Funcionario:

Pedidos:

ID_Funcionario as Vendas_Funcionario,

Agora iremos utilizar a carga da tabela Funcionario$ a fim de gerar o campo Vendedor. Nós podemos
fazer isto por meio de um comando Load Resident que é feito depois de carregar a tabela a que se
refere, isto é, Funcionario$. Para esta função, a primeira tabela deve ser explicitamente nomeada no
script. Na linha do script imediatamente acima do comando Load que carrega dados da tabela
Funcionario$, digite:

Funcionarios:

Finalmente nós iremos digitar as seguintes linhas no script depois do script que carrega os dados da
tabela Funcionario$ no lugar da tabela lógica que foi carregada anteriormente:

Load
ID_Funcionario,
Nome as Pessoal_Vendas,
Titulo as Titulo_Vendas
resident Funcionario
where exists (Vendas_Funcionario, ID_Funcionario);

A condição na última linha verifica que os dados carregados tenham valores correspondentes no campo
Vendas_Funcionario. Depois destas correções você pode verificar a funcionalidade de seu script. Não se
esqueça de remover (ou comentar) o comando Load da tabela lógica que criamos no capitulo anterior,
antes de executar o script.

55
12. Combinando tabelas com Join
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 Qlik Sense, as junções podem ser feitas no script, produzindo tabelas lógicas assim, a
lógica do Qlik Sense 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:

 Normalmente, as tabelas carregadas ficam maiores e o Qlik Sense trabalha mais lentamente.
 Algumas informações podem ser perdidas: a frequência (número de registros) na tabela original pode não
mais estar disponível.

12.1- 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á externa, 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.

12.2- Inner

O prefixo Join na linguagem de script do Qlik Sense pode ser precedido 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.

Exemplo:

Neste exemplo, usamos as tabelas de fontes Table1 e Table2:

Tabelas de fonte com os exemplos Inner

56
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

12.3- Left

O prefixo Join na linguagem de script do Qlik Sense pode ser precedido 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.

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

12.4- Right

57
O prefixo Join na linguagem de script do Qlik Sense pode ser precedido 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.

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

Nos capítulos anteriores nós nomeamos explicitamente a tabela Pedidos no script. Agora nos referiremos
diretamente a esta tabela quando modificarmos o script carregando a tabela Detalhes do Pedido para criar
uma junção entre as tabelas.

Abra novamente o editor da carga de dados na Seção Pedidos.

Edite a carga de Detalhes do Pedido diretamente no script:

Left Join(Pedidos)
Load Desconto,
ID_Pedido,
ID_Produto,
ID_Produto as Contar_ID_Produto,
Quantidade,
Preco_Unitario,
Preco_Unitario * Quantidade * (1-Desconto) as VendasLiquidas;
SQL Select * FROM
`Detalhes do Pedido`;

Clique em Salvar depois em Carregar dados depois clique no campo de Navegação e em Visualizador do
modelo de dados no modelo poderá notar que não existe mais a tabela de Detalhes do pedido, porém
seus campos foram incorporados à tabela Pedido.

Volte para o Editor de carga de dados, e vamos incluir mais comandos Join a fim de deixar o nosso

58
modelo de dados mais limpo.

O próximo Join que faremos é entre as tabelas Funcionarios e a tabela logica que criamos de Pessoal-
Vendas vá para a seção chamada DIM, o script deverá ser como este:

Left Join(Funcionarios)
Load
ID_Funcionario,
Nome as Pessoal_Vendas,
Titulo as Titulo_Vendas resident Funcionario
where exists (Vendas_Funcionario, ID_Funcionario);

13. Tabelas
As tabelas contêm campos que não necessariamente se originam do mesmo conjunto de dados. Em
uma tabela é fácil visualizar quais campos, mesmo que diferentes possuem atributos em comum.

59
13.1- Mais layout
Vamos continuar com o layout de nosso documento adicionando outra pasta. Esta pasta conterá
informações sobre os funcionários, dados em uma tabela e várias seleções múltiplas.

Crie uma nova pasta, e chame-a de Escritorio-Funcionarios.

Copie os objetos de texto que compõem o cabeçalho da pasta Vendas, entre eles o logo e as listas Ano,
Mês e Dia para a pasta Escritorio-Funcionarios.

Arraste para tela o elemento de Painel de filtro e adicione as seguintes dimensões: ID_Funcionario,
Nome, Titulo, Data_Admissao, no painel de propriedades troque os nomes dos atributos para uma melhor
visualização e da mesma forma que fizemos na pasta Vendas insira o titulo Funcionário ao nosso painel
usando um elemento de Texto e imagem.

Faça outro Painel de filtro e adicione os seguintes elementos Escritorio,


Pais_Escritorio,Cidade_Escritorio, Endereco_Escritorio, Codigo_Postal_Escritorio, Fone_Escritorio e
Fax_Escritorio, renomeie as dimensões e dê o titulo ao nosso filtro de Escritório

Ajuste os dois elementos de Painel de filtro e coloque-os na parte esquerda, conforme fizemos nas outras
pastas.

Agora crie uma tabela contendo os campos, Nome, Escritorio, Endereco_Escritorio,


Codigo_Postal_Escritorio, Cidade_Escritorio, Pais_Escritorio, Extensão, Fone_Escritorio e Fax_Escritorio.
Dê aos campos os mesmos nomes que acima.

Redimensione a tabela e salve seu projeto.

Agora você deve ter criado uma pasta semelhante a esta:

60
Os dados podem não ter sido classificados na mesma ordem que na figura acima, mas a vantagem das
tabelas é que você pode classificar os dados de acordo com qualquer coluna simplesmente clicando no
nome da coluna.

14. Tabela Fornecedores

Vamos carregar outra tabela no nosso aplicativo, clique no botão “Navegação” selecione a opção
“Editor de carga de dados” na seção DIM em “Conexão com os dados” clique em “Inserir dados” e
selecione a tabela Fornecedores.xlsx clique em “Inserir script”

O Qlik Sense associa campos com o mesmo nome. Se duas tabelas têm vários campos em comum, o Qlik
Sense pode criar chaves sintéticas a fim de associar as tabelas.

Como na tabela Escritorio, Fornecedores.xlsx tem vários campos em comum com a tabela Clientes no
banco de dados Access. Estes campos não devem ser associados uns com os outros, e alguns dos
campos em Fornecedores.xlsx devem ser renomeados. O único campo comum deve ser ID_Fornecedor,
que também se encontra na tabela Produtos.

Como renomearemos quase todos os campos em Fornecedores.xlsx, usaremos um comando especial no


Qlik Sense que qualifica todos os nomes de campo com o nome da tabela quando eles forem carregados.
Os novos nomes de campo, deste modo, serão nome da tabela.nome do campo. Como queremos
renomear todo os campos exceto ID_Fornecedor, usaremos *.

Digite as seguintes linhas antes do script que foi gerado quando carregamos a tabela Fornecedores.

61
Qualify *;

Unqualify ID_Fornecedor;

Como ID_Fornecedor deve ser conectado à outra tabela, ele não deve ter o qualificador de tabela.
Isto é removido usando o comando unqualify ID_Fornecedor.

Quando a tabela tiver sido carregada, nós devemos adicionar o seguinte comando de forma que todos
os campos carregados depois deste não tenham o qualificador de tabela.

Unqualify *;

Já realize também o comando Join dessa tabela com a tabela de fornecedores.

Seu script deve estar desta maneira:

Qualify *;
Unqualify ID_Fornecedor;
Right Join(Fornecedores)
LOAD
ID_Fornecedor,
Nome_da_Empresa,
Nome_do_Contato,
Endereco,
Cidade,
Codigo_Postal,
Pais,
Fone,
Fax
FROM [lib://Conexão com os dados/Fornecedores.xlsx]
(ooxml, embedded labels, table is Fornecedores);
Unqualify *;

Clique em OK e salve seu documento. Execute o script clicando no botão de Carregar dados.
Nós usaremos estes campos novos no próximo capítulo.

O campo ID_Fornecedor aparece em diversas tabelas diferentes, e o seu conteúdo acaba


sendo um pouco diferente algumas vezes, então precisamos realizar um comando para que a
chave ID_Fornecedor permaneça integra, vamos tirar o relacionamento da Fornecedores com
a tabela Pedidos abra o Editor da carga de dados na seção Pedidos e comente o campo
ID_Fornecedor, porém, a tabela Fornecedor deve estar relacionada ao restante do modelo
então vamos realizar o relacionamento com a tabela de Produtos, Essa tabela já possui o
campo ID_Fornecedores, porém, no inicio da nosso treinamento nós comentamos então
vamos remover o comentário.

right join(Pedidos)
LOAD
`ID_Fornecedor`,
`ID_Produto`;
SQL SELECT
`ID_Fornecedor`,
`ID_Produto`
FROM Produtos;

O script que carrega a tabela Produto deve estar dessa maneira:

62
Produtos:

LOAD `ID_Categoria`,
`ID_Fornecedor`,
`ID_Produto`,
`Nome_do_Produto`,
`Preco_Unitario`,
QuantidadePorUnidade,
`Unidades_em_Estoque`,
`Unidades_Pedidas`;
SQL SELECT `ID_Categoria`,
`ID_Fornecedor`,
`ID_Produto`,
`Nome_do_Produto`,
`Preco_Unitario`,
QuantidadePorUnidade,
`Unidades_em_Estoque`,
`Unidades_Pedidas`
FROM Produtos;

Agora entre no Visualizador do modelo de carga e verifique e se ele possui essa característica:

14.1- Nova pasta Fornecedores

Agora vamos realizar a criação de uma nova pasta ao nosso aplicativo, que vai conter os dados de

63
fornecedor da nossa empresa, faça a criação da pasta e a nomeie como Fornecedores.

Copie os objetos de texto que compõem o cabeçalho da pasta Est.Vendas, entre eles o logo e os filtros de
Ano, Mês e Dia para a pasta Fornecedores.

Selecione os campos ID_Fornecedor e Fornecedores-1.Nome_da_Empresa no Painel de Itens na aba


Campos e coloque-o na seção da esquerda.

Crie um Painel de filtro contendo os campos que nós carregamos da tabela Fornecedores. Os campos
seguintes devem ser incluídos: Fornecedores- 1 Nome_do_Contato, Fornecedores-1Cidade,
Fornecedores-1.Endereco, Fornecedores-1.Codigo_Postal, Fornecedores-1.Pais, Fornecedores-1.Fone e
Fornecedores-1.Fax. Você deve renomear os campos. No painel de propriedades.

Agora colocaremos uma tabela. Os seguintes campos devem ser incluídos: Fornecedores-
1.Nome_da_Empresa, que deve ser renomeado para Fornecedor, Nome_da_Categoria e
Nome_do_Produto e coloque um titulo para nossa tabela pode ser Fornecedores e Produtos.

Na parte inferior da seção esquerda, nós criaremos e colocaremos um objeto de texto e imagem que vai
conter expressões similares as que fizemos na pasta Vendas para o campo Quantidade que mostra Soma,
Mínimo e Máximo. Coloque um titulo também nesse objeto pode ser Nº de Produtos Vendidos.

Ajuste os tamanhos dos novos objetos de pasta de forma que sua pasta fique assim.

15. Gráficos combinados


Neste capítulo estudaremos vários outros tipos de gráficos, inclusive gráficos combinados, que mostram

64
curvas e barras para expressões diferentes. Incluiremos estes novos gráficos na pasta Est. Vendas e
faremos várias mudanças nesta pasta.

15.1- Gráfico Top 10 Clientes

Adicione mais um painel de filtro a nossa pasta Est. Vendas, em sua dimensão inclua o campo Pais.

Adicione outro gráfico a nossa pasta Est. Vendas um gráfico de barras.

Como primeira dimensão selecione Nome_da_Empresa e em medida será Sum(VendasLiquidas), clique


em Adicionar dados, e inclua a dimensão Ano ao nosso gráfico.

No painel de Propriedades na opção Dados clique em Nome_da_Empresa para que expanda suas opções,
em Limitações selecione a opção Número Fixo, Superior e na caixa abaixo digite o número 10 e
desmarque a opção Mostrar outros , essas opções dizem ao Qlik Sense que o nosso gráfico só deverá
apresentar o 10 maiores registros.

Agora na opção Classificação expanda a opção Nome_da_Empresa desmarque a opção classificação


automática e marque a Classificar por Expressão na caixa de expressão digite Sum(VendasLiquidas),
Decrescente.

Na opção Aparência em Geral adicione o título Top 10 Clientes na opção Apresentação marque a opção
Empilhado em Cores e Legenda desmarque a opção de Automática e selecione a opção por Expressão e
insira a seguinte expressão:
If(Ano = 1997, RGB(255,0,0),
If(Ano = 1998, RGB(0,255,0),
If(Ano = 1999, RGB(0,0,255),
If(Ano = 2000, RGB(255,255,0)))))

E nas opções de Eixo X e Eixo Y apresente somente rótulos ao nosso gráfico.

15.2- Campos chave no exemplo

Em um capítulo anterior, discutimos sobre os campos-chave, e agora quando calcularmos a


frequência do ID_Produto encontraremos tais campos. Estamos interessados em ver quantas
vezes um produto foi vendido, mas como ID_Produto é um campo associado, isto não é
possível.

A solução para este problema é carregar o campo ID_Produto novamente com nome
diferente (Contar_ID_Produto). Retornemos ao script e editemos como mostrado abaixo:

LOAD
Desconto,
`ID_Pedido`,
`ID_Produto`,
`ID_Produto` as Contar_ID_Produto,
Quantidade,
//`Preco_Unitario`,
`Preco_Unitario` * Quantidade * (1-Desconto) as VendasLiquidas;
SQL SELECT *
FROM `Detalhes do Pedido`;

Clique em Salvar e clique em Carregar dados. O resultado pode ser visto na lista de campos disponíveis,
ao qual o novo campo Contar_ID_Produto foi adicionado.

15.3- Criando um gráfico combinado

Agora podemos adicionar o gráfico combinado.

65
Selecione o Gráfico de Combinação e arraste para um espaço vazio da tela.

Inclua como dimensão o Nome_do_Produto e como medida inclua as seguintes expressões


Sum(Quantidade) e Count(Contar_ID_Produto)

Em Count(Contar_ID_Produto) escolha a opção Linha e faça ele aparecer no Eixo Secundário.

Em Classificação classifique a dimensão Nome_do_Produto por expressão com o seguinte comando


Sum(Quantidade) e selecione a opção Decrescente.

Na opção Geral inclua o título Estatística do produto.

No Eixo X e Eixo Y faça mostrar apenas rótulos.

Abaixo está uma sugestão para o layout da pasta completa:

16. Mapeamento de dados


O mapeamento de dados significa que novas informações são associadas com informações existentes
pelo nome do campo. Um exemplo disso pode ser a conexão de meses a trimestres. O mapeamento pode

66
ser feito por um arquivo externo ou incluindo um comando load inline diretamente no script.

16.1- Tabelas Inline

Em alguns casos, pode ser vantajoso digitar a tabela para ser mapeada diretamente no script. Isto é feito
com a ajuda do comando load inline.

Adicione as seguintes linhas ao seu script:

Load * Inline
[ Mês,Trimestre
1,1
2,1
3,1
4,2
5,2
6,2
7,3
8,3
9,3
10,4
11,4
12,4];

A tabela digitada no script mapeia os meses aos trimestres correspondentes. Quando nós
executarmos o script, um novo campo (Trimestre) será gerado, porém, nós vamos criar uma tabela
chamada MasterCalendar e nela vai conter todas as opções de datas que utilizaremos no nosso
aplicativo, volte para o Editor da carga de dados e comente toda a nossa tabela Inline, no painel
esquerdo abra a seção MasterCalendar e insira o seguinte código:

Calendario:
LOAD
date(Data_do_Pedido,'DD/MM/YYYY') as Data_do_Pedido,
month(Data_do_Pedido) as Mes,
Num(month(Data_do_Pedido), '00') as MesNum,
MonthStart(Data_do_Pedido) as Mes_Corrente,
day(Data_do_Pedido) as Dia,
year(Data_do_Pedido) as Ano,
weekday(Data_do_Pedido) as Semana,
ceil(Month(Data_do_Pedido)/3) as Trimestre,
DAY(Data_do_Pedido) & '/' & WeekDay(Data_do_Pedido) as DiaSemana,
DAY(Data_do_Pedido) & '/' & num(month(date(Data_do_Pedido)),00) as DiaMes,
DAY(Data_do_Pedido) & '/' & num(month(date(Data_do_Pedido)),00) & ' - ' &
WeekDay(Data_do_Pedido) as DiaMesSemana,
Date(Date#(month(Data_do_Pedido) & '/' & year(Data_do_Pedido), 'MMM/YYYY'),
'MMM/YYYY') as MesAno

Resident Pedidos;

Na Seção Pedidos comente ou exclua os campos Ano Mes e Dia,

// year(Data_do_Pedido)as Ano,
// month(Data_do_Pedido) as Mes,
// day(Data_do_Pedido) as Dia,

Isso vai fazer com que todas as opções de calendário sejam criadas em nossa tabela Calendário.

Agora inclua o campo de Trimestre que acabamos de inserir no script em todas as nossas pastas,
adicione ele antes do filtro Ano também como um Painel de filtro.

67
Vamos agora criar um novo gráfico para pasta Escritorio-Funcionarios que mostra quantos funcionários
cada escritório de vendas teve por um período de vários anos. A fim de criar um gráfico útil nós devemos
definir um novo campo que dá informações sobre o período de emprego.

Abra o Editor da carga de dados na seção DIM e encontre onde as informações sobre funcionários que
foram carregadas a partir de (Func_Esc.xls). Adicione a seguinte linha ao script Year (Data_Admissao)
as Ano_Admissao, de forma que seu script fique como mostrado abaixo.
Load
ID_Func as ID_Funcionario,
Primeiro_Nome &' '& Ultimo_Nome as Nome,
Titulo,
Data_Admissao,
Year (Data_Admissao) as Ano_Admissao,
Escritorio,
Extensao,
Reporta_a,
Salario_Anual
FROM [Fontes de Dados\Func_Esc.xls]
(biff, embedded labels, table is [Funcionario$]);

Clique em Carregar dados e vá para a pasta Escritorio-Funcionario.

Selecione o gráfico de barras e arraste para o centro da tela.

Inclua como dimensões Cidade_Escritorio e Ano_Admissao e como medida selecione Count(Nome).

Coloque o título de Funcionários e na opção Aparência escolha a opção empilhado, deixe que o Qlik Sense
exiba apenas os rótulos do gráfico.

17. Tabelas Dinâmicas


17.1- Diferentes tipos de tabelas no Qlik Sense

68
Dois tipos diferentes de tabelas estão disponíveis no Qlik Sense:
 Tabelas
 Tabelas Dinâmicas
Nós já lidamos com tabelas e suas funções em capítulos anteriores. Neste capítulo conheceremos um
pouco mais as tabelas dinâmicas. O outro tipo de tabela que está disponível.
Nem sempre é óbvio qual é a melhor tabela para uma aplicação particular. Os vários tipos de tabelas têm
propriedades únicas que cumprem várias funções, e é então apropriado compará-las. Abaixo há um
resumo das semelhanças e diferenças entre os vários tipos de tabelas.

Tabela Tabela Dinâmica Tabela Simples


Tipo de objeto de tabela gráfico Gráfico
pasta na tabela
Dados valores de campo valores calculados valores calculados
Seleção Sim limitada Limitada
Classificação Sim limitada Sim
de Coluna
Agrupamento de não sim Não
dados
Cálculos/Equações não sim Sim
Subtotais não sim Não
Totais não sim Sim
Arrastar e soltar não sim Sim

17.2- Tabela Dinâmica


No Qlik Sense é possível estudar dados em muitas dimensões simultaneamente. Uma ferramenta
importante para isto é a tabela dinâmica.
Agora prosseguiremos criando uma tabela dinâmica.
Clique no botão onde está escrito o nome da sua pasta atual, ele encontra-se no canto superior direito da
tela, ao clicar nele vai abrir um painel com todas as pastas do aplicativo, clique em nova pasta e dê o
titulo de Est.Vendas-Mostradores.
Selecione os mesmo elementos de filtro e imagem da pasta Est. Vendas e copie para a nossa nova
pasta.
Agora selecione uma tabela dinâmica e arraste para o centro da nossa tela.

Selecione como dimensão Cidade_Escritorio e depois clique em adicionar dados no painel de propriedades
adicione uma linha selecione o campo Pais e desmarque as opções de mostrar valores nulos das duas
dimensões.

Agora adicione as seguintes expressões:

Vendas: Sum(VendasLiquidas)

Participação %: Sum(VendasLiquidas)/Sum(ALL VendasLiquidas)

Numero: Count(Nome_da_Empresa)

No painel de propriedades na medida de Vendas em Fator numérico selecione a opção Moeda.


Em Participação % selecione como fator numérico a opção Número e selecione 12%.

17.3- Modificando nossa tabela

Pode ser necessário modificar as propriedades do gráfico se o resultado não foi o esperado. Nós agora

69
faremos alguns ajustes pequenos para nossa tabela de pivô.

No painel de propriedades vamos incluir mais uma coluna a nossa tabela, clique em adicionar dados e
adicione uma coluna com o campo Ano.

Agora em na opção Colunas clique e arraste a


dimensão ano para que ela fique em primeiro da
lista de Colunas esse comando vai ordenar
também na nossa tabela dinâmica

Nossa tabela ficou desta forma:

17.4- Dinamizar arrastando e soltando

O ponto principal de uma tabela dinâmica é que é possível dinamizá-la a fim de poder ver dados em
contextos diferentes. O Qlik Sense permite ao usuário fazer isto usando o método de arrastar e soltar,
que significa que você clica na dimensão que você quer mudar, a arrasta para a posição desejada, e
então solta o botão do mouse.

Tente mudar a ordem arrastando Ano para a esquerda de forma que se torne mais uma coluna.

17.5- Gráfico Mostrador

A expressão Sum(VendasLiquidas)/Sum(ALL VendasLiquidas) foi usada na tabela dinâmica que criamos


no último capítulo, também é apropriada para aparecer em um gráfico de mostrador. A aparência de
gráficos de mostrador pode ser bastante variada. Nós faremos um simples mostrador que indica a
porcentagem das vendas totais.

Ainda na pasta Est. Vendas-Mostradores redimensione a nossa tabela dinâmica e clique em Mostrador e
arraste para a nossa tela.

70
Um gráfico de mostrador é sem dimensão (!).

Digite a expressão Sum(VendasLiquidas)/Sum(ALL VendasLiquidas).

Altere o fator numérico do nosso mostrador para Número e selecione a opção 12%.

Insira o título “% de Vendas Totais”

Em Aparência na opção Apresentação coloque Min = 0 e max = 1.

Marque a opção Use segmento clique em Adicionar limite e preencha a caixa de texto com 0.33, clique
no primeiro segmento que foi gerado e coloque a cor vermelho adicione outro segmento agora com o
limite de 0.66 e pinte de amarelo, e o ultimo segmento pinte de verde.

Na opção Eixo da medida clique na opção Somente Rótulos.

Nossa pasta está com a seguinte aparência:

Realize algumas seleções nos filtros que compõe nossa tela, para que você visualize como é o
funcionamento do gráfico mostrador.

18. Mais aplicações de gráficos

71
18.1- Novo campo – Mês_Corrente

Nós continuaremos criando vários novos gráficos. A primeira coisa que faremos é criar um novo campo
que faz todo mês único. Há vários modos de se fazer isto. Neste curso, nós combinaremos
Mês(Data_do_Pedido) com MonthStart(Data_do_Pedido) como o novo campo Mes_Corrente..

Comece abrindo o Editor de Carga de Dados na seção MasterCalendar Inclua a seguinte linha ao script
logo após o campo Mes:

MonthStart(Data_do_Pedido) as Mes_Corrente,

Salve o arquivo depois clique em Carregar dados.

Volte para a pasta Est.Vendas-Mostradores e no painel de itens, selecione a aba Campos encontre o
campo Mes_Corrente que acabamos de criar clique e arraste para a tela.

Agora podemos ver que temos uma lista com valores que consistem em abreviações dos meses e os
anos do campo Data_do_Pedido.

18.2- Gráficos com linhas de referência

Agora é hora de criar um gráfico de barras com o novo campo Mes_Corrente como dimensão. A ideia é
mostrar o desenvolvimento de vendas dentro da companhia para cada mês do ano, e linhas de referência
para o período escolhido para análise.

No painel de itens selecione o gráfico de barras e arraste para o centro da tela.

Como dimensão selecione o campo Mes_Corrente e em medidas utilize a expressão


Sum(VendasLiquidas) e coloque o rótulo Vendas.

Inclua um titulo ao nosso gráfico Vendas por mês corrente.

No painel de propriedade na opção Complementos clique em Incluir linha de referência, em rótulo digite
Máximo e insira a seguinte expressão =Max(VendasLiquidas) e pinte essa linha de vermelho, inclua outra
linha de referência com o rótulo de Média ela deve conter a seguinte expressão =Avg(VendasLiquidas) e
a pinte de amarelo.

Em Eixo Y selecione a opção Somente rótulos.

Nossa pasta Est.Vendas-Mostradores ficou com essa aparência.

72
Realize seleções nos elementos da tela para visualizar como os elementos se comportam.

73
19. Estatística de funcionários

19.1- Nova pasta – Est. Funcionarios


O próximo passo para o desenvolvimento de nosso documento será criar uma nova pasta que
fornecerá informações sobre os funcionários da empresa. Isto pode ser útil para uso interno, ou quando
selecionamos membros de um grupo de projeto.

Crie uma nova pasta Est. Funcionarios.

Copie o cabeçalho da pasta Vendas, inclusive todas as listas de datas, para a nova pasta.

Coloque as listas Cidade_Escritorio e Titulo na seção esquerda. Mude o nome da lista de


Cidade_Escritorio para Escritorio.

No painel de itens selecione o gráfico de barras e arraste para a nossa tela, como dimensão inclua Titulo
e Cidade_Escritorio, inclua também como medida a expressão Avg(Salario_Anual).

Insira o titulo Média de salario anual.

Em Aparência selecione a opção de gráfico Empilhado.

Agora adicione agora um gráfico de pizza e na dimensão inclua o campo Titulo e como medida a seguinte
expressão Count(Titulo).

Adicione o titulo Estatística do Funcionário.

Em Aparência desmarque a opção Rótulo da dimensão e marque a opção Mostrar legenda escolha a
opção Direita em Posição da legenda.

Agora vamos selecionar o item KPI e arrastar para a nossa tela.

Esse elemento aceita apenas medidas, então vamos selecionar a seguinte expressão
Avg(Salario_Anual), no painel de propriedades na aba dados insira o seguinte rótulo para a nossa
medida, Média Salarial, em fator numérico selecione a opção Moeda.

Na opção Aparência em Apresentação escolha a opção Menor em tamanho da fonte.

Arraste outro KPI para a nossa tela com as seguintes expressões Max(Salario_Anual) e de um rótulo de
Máximo depois clique em Adicionar medida e insira a seguinte expressão Max(Salario_Anual)/12 e de um
rótulo de Salario Mensal, em fator numérico selecione a opção Moeda.

Na opção Aparência em Apresentação escolha a opção Menor em tamanho da fonte.

Faça outro KPI semelhante ao anterior mas agora utilize Min(Salario_Anual) e Min(Salario_Anual)/12

74
Nossa pasta Est. Funcionarios está pronta e está com a aparência parecida com essa:

19.2- Grupo de campos

Uma diferença importante entre o Qlik Sense e muitos outros programas de gerenciamento de banco de
dados, ferramentas OLAP e similar, é que no Qlik Sense não é necessário pré-definir qualquer tipo de
hierarquia nos dados de entrada. A lógica associativa única do Qlik Sense possibilita o acesso a todos os
campos como dimensões em qualquer ordem. Isto pode ser muito útil.

Há, porém, situações quando seria vantajoso ter uma hierarquia pré-definida para mostrar dados de um
modo mais eficiente.

19.3- Grupos Hierárquicos (Drill-down)

Quando um número de campos forma uma hierarquia natural, é aconselhável formar um grupo
hierárquico. Um exemplo típico de tal um grupo é o tempo:

Tempo: Ano, Trimestre, Mês, Dia, Hora, Minuto, Segundo Outro exemplo é geografia:

Geografia: Continente, País, Região, Cidade, Endereço.

Quando um grupo hierárquico é usado como dimensão em um gráfico, o gráfico usará o primeiro campo
na lista de grupos que contém mais de um valor elegível. Quando a escolha de campo resulta em só um
campo elegível restante, o campo seguinte na lista de grupos será automaticamente mostrado, desde
que contenha mais de um valor elegível. Se nenhum dos campos na lista contém mais de um valor
elegível, o último campo é mostrado.

Nos exemplos acima, o campo Ano será usado como a dimensão no gráfico até que só um ano seja
selecionado. O gráfico então seguirá mostrando os Trimestres. Se só um trimestre for selecionado, o
gráfico vai para Mês.

Quando escolhas são removidas de forma que mais de um valor é elegível nos campos superiores na
lista, o gráfico automaticamente trabalha com os dados acima na hierarquia.

75
19.4- Criando grupos
Agora criaremos dois grupos, para usar em
novos gráficos.

No painel de propriedades, clique na aba Itens-


Mestres, depois clique em Dimensões, Criar novo.

Selecione a opção Hierarquia e selecione os


campos Ano, Trimestre, Mes e Dia.

Como Nome digite Tempo, e na descrição escreva


Grupo de datas.

Clique em Incluir dimensão e depois em Concluído.

Crie outro grupo Chame-o de Analise, e ele deverá


conter os campos, Pais, Cidade_Escritorio e
Pessoal_Vendas.

Nós criamos agora dois grupos (veja figuram abaixo) e prosseguiremos usando-os em alguns novos
gráficos.

76
19.5- Usando grupos em um gráfico

Vamos inserir novos gráficos a nossa pasta Vendas

Crie uma tabela simples com o título da janela Analise.

Adicione o grupo Analise para a lista de dimensão.

Crie a expressão Sum(VendasLiquidas) e adicione como medida dê o rótulo de Vendas.

Crie um gráfico de barras com o título Analise – Drill-down.

Como Dimensão, adicione o grupo Tempo.

Crie a expressão Sum(VendasLiquidas). Na opção Aparência e Apresentação e Marque a opção Rótulos


de Valor.

Posicione os novos gráficos de acordo com a sugestão abaixo.

77
20. Tipos de Dados no Qlik Sense
O Qlik Sense pode lidar com strings de texto, números, datas, horas, data/hora e moedas correntes.
Estes podem ser classificados, mostrados em vários formatos e usados em cálculos. Isto significa que
datas, horas e data/hora podem ser somados e subtraídos.

20.1- Armazenamento de dados no Qlik Sense

A fim de entender como Qlik Sense interpreta dados e formatos de números, você deve primeiro saber
como os dados são armazenados internamente no programa. Todos os dados carregados no Qlik Sense
são armazenados de dois modos: como uma string de texto e como números.

A string de texto é sempre usada. É isto que é mostrado nas listas e outros objetos de pasta. Na
formatação de dados em listas (formatação de número) só a string de texto é afetada.

Os números só são usados quando os dados podem ser interpretados como um número válido. Todas as
formas de cálculo e classificação podem ser usadas.

Se várias partes de dados com o mesmo valor numérico são carregadas no mesmo campo, elas serão
tratadas como ocorrências múltiplas do mesmo valor e serão juntas determinadas para a primeira string
de texto encontrada. Se os números 1.0, 1 e 1.000 são carregados nesta ordem, eles receberão o valor
numérico 1, e a string de texto original 1.0.

20.2- Dados Contendo informações sobre os tipos de dados

Campos que contêm números de um tipo de dados definido, em um banco de dados carregado via
ODBC, serão tratados de acordo com seu tipo de dados respectivo no Qlik Sense.

O Qlik Sense lembrará o formato original dos campos, ainda que seja alterado em um dos diálogos de
formato de número. É sempre possível restaurar o formato original no painel de propriedade em Fator
numérico, Automático.

O Qlik Sense usa os seguintes formatos de padrão para cada tipo de número:

 Inteiros, sem número de casas decimais definidos: Formato padrão para números.
 Moeda: Formato padrão para moedas correntes.
 Hora, data, data/hora: Padrão ISO

78
As configurações padrão para números e moedas correntes são definidas via variáveis, que são
interpretadas no script, ou via configurações do sistema operacional (Painel de Controle).

20.3- Dados sem informações sobre o tipo de dados


A manipulação de dados que não têm nenhuma informação de formatação específica (por exemplo, dados
de arquivos de texto ou dados de ODBC com um formato geral) é mais complicada. O resultado final
depende de pelo menos seis fatores.

1. O formato dos dados no banco de dados

2. As configurações do sistema operacional relativo a números, hora, data, etc. (Painel de Controle).

3. O uso de variáveis para interpretação no script

4. O uso de funções de interpretação no script

5. O uso de funções de formatação no script

6. O uso de diálogos de formato de número no documento

79
O Qlik Sense tenta interpretar os dados de entrada como números, datas, horas, etc. Como as
configurações padrão do sistema são usadas, Qlik Sense interpretará e formatará os dados
automaticamente. Deste modo o usuário não precisa mudar o script ou as configurações no Qlik Sense.
Existe um modo simples de verificar se o Qlik Sense interpretou os dados corretamente: Os dados
numéricos são normalmente alinhados à direita em listas, enquanto strings de texto são alinhadas à
esquerda.
A rotina padrão envolve continuar o processo seguinte até que um formato apropriado seja encontrado. (O
formato padrão inclui, por exemplo, separador de decimal, a ordem dos anos, meses e números, etc. no
sistema operacional, isto é, no Painel de Controle, ou em alguns casos definidos via variáveis especiais
para interpretação pelo script).

O Qlik Sense interpreta os dados como:

1. Um número de acordo com o formato padrão para números

2. Uma data de acordo com o formato padrão para datas

3. Uma data/hora de acordo com o formato padrão para hora e data

4. Uma hora de acordo com o formato padrão para hora

5. Uma data de acordo com o seguinte formato: yyyy-MM-dd

6. Uma data/hora de acordo com o seguinte formato: yyyy-MM-dd hh:mm [:ss[.fff]]

7. Uma hora de acordo com o seguinte formato: hh:mm [:ss[.fff]]

8. Moedas correntes de acordo com o formato padrão para moedas correntes

9. Um número com '.' como separador de decimal e ',' como um separador de milhares, assumindo
que nem o separador de decimal nem o separador de milhares está configurado para ','

10. Um número com ',' como separador de decimal e '.' como um separador de milhares, assumindo
que nem o separador de decimal nem o separador de milhares está configurado para '.'

11. Uma string de texto. Este teste final nunca falha: se ele for possível carregar os dados, é sempre
possível interpretá-los como uma string de texto.

Os problemas de interpretação podem surgir quando os dados forem carregados de arquivos de texto. Um
separador de decimal ou de milhares incorreto pode levar o Qlik Sense a interpretar os números
incorretamente. A primeira coisa que você deve fazer é verificar se as variáveis para interpretação de
número no script estão corretamente definidas, e se as configurações do sistema no Painel de Controle
estão corretas.

Como não há nenhum formato pré-definido para dados, um registro pode conter valores com formatos
diferentes em um campo único. Por exemplo, datas válidas, inteiros e texto podem ser encontrados em um
campo. Estes dados não serão formatados, mas serão mostrados nas listas com sua forma original.

80
20.4- Datas e Horas

O Qlik Sense armazena as datas, horas e data/hora como um número de série de data para data. O
número de série para datas é usado para datas, horas e data/hora e para cálculos aritméticos baseados
nas unidades de data e hora. Datas e horas podem deste modo, ser somadas e subtraídas, e intervalos
podem ser comparados, etc.

Os números usados para data e hora são os valores do número de dias que se passaram desde 30 de
dezembro de 1899. O Qlik Sense é deste modo compatível com o sistema de data 1900 usado pelo
Microsoft Excel para Windows, Lotus 1-2-3 e outros programas, entre 1 de março de 1900 e 28 de fevereiro
de 2100. Além deste formato de hora o Qlik Sense usa o mesmo sistema de data com a ajuda do
calendário gregoriano, que é um padrão no mundo Ocidental.

O número de série de data por hora é um número entre 0 e 1. O número de série de data 0.00000
corresponde a 00:00:00, enquanto 0.99999 corresponde a 23:59:59. Os números gerais mostram a data e
a hora: o número de série de data 2.5 corresponde a 12.00 horas de 1 de janeiro de 1900.

Os dados são exibidos de acordo com o formato da string de texto. As configurações feitas no Painel de
Controle são usadas como padrão. Também é possível definir o formato para data e hora via variáveis que
são interpretadas pelo script ou com a ajuda de uma função de formatação.

Exemplo:

1997-08-06 é armazenado como 35648

09:00 é armazenado como 0.375

1997-08-06 09:00 é armazenado como 35648.375

Ou vice – versa

 35648 em formato de número 'D/M/YY ' é mostrado como 6/8/97


 0.375 em formato de número 'hh.mm ' é mostrado como 09.00
 35648.375 em formato de número ‘D/M/YY hh.mm’ é mostrado como 06/08/97 09.00

Como mencionado anteriormente, o Qlik Sense seguirá um certo procedimento para a interpretação de
datas, horas e outros tipos de dados. O resultado final, porém, é afetado por vários fatores, como também
foi mencionado acima.

Exemplo:

O exemplo abaixo assume as configurações padrão seguinte:

 Separador de decimal: .

 Formato de data curto: YY-MM-DD

 Formato de hora: hh:mm

81
Exemplo:

Dados Originais:
0.375
33857
97-08-06
970806
8/6/97

No Qlik Sense:

A1) Interpretação pelo Qlik Sense (sem interpretação de funções especial no script)
Valor da String (lista) Valor Numérico

0.375 0.375
33857 33857
97-08-06 35648
970806 970806
8/6/97 -

A2) Com o formato de número data 'YYYY-MM-DD' Valor da String (lista) Valor Numérico

1899-12-30 0.375
1992-09-10 33857
1997-08-06 35648
4557-12-21 970806
8/6/97 -

A3) Com o formato de número data'MM/DD/YYYY' Valor da String (lista) Valor Numérico

12/30/1899 0.375
09/10/1992 33857
08/06/1997 35648
12/21/4557 970806
8/6/97 -

A4) Com o formato de número hora 'hh:mm' Valor da String (lista) Valor Numérico

09:00 0.375
00:00 33857
00:00 35648
00:00 970806
8/6/97 -

82
A5) Com o formato de número fixo com '# ##0.00' Valor da String (lista) Valor Numérico

0.38 0.375
33 857.00 33857
35648
35 648.00
970806
970 806.00 -
8/6/97

B1) Interpretação no Qlik Sense com a função de interpretação data#(A,'M/D/YY')Valor da String (lista)
Valor Numérico
0.375 -
33857 -
97-08-06 -
-
970806
35648
8/6/97

B2) Com o formato de número data'YYYY-MM-DD' Valor da String (lista) Valor Numérico

0.375 -
33857 -
-
97-08-06 -
970806 35648
1997-08-06

B3) Com o formato de número data'MM/DD/YYYY' Valor da String (lista) Valor Numérico

0.375 -
33857 -
-
97-08-06
970806
08/06/1997
B4) Com o formato de número hora 'hh:mm' Valor da String (lista) Valor Numérico

0.375 -
33857 -
-
97-08-06
-
970806 35648
00:00

83
B3) Com o formato de número data 'MM/DD/YYYY' Valor da String (lista) Valor Numérico

0.375 -
33857 -
97-08-06 -
970806
08/06/1997

B4) Com o formato de número hora 'hh:mm' Valor da String(lista) Valor Numérico

0.375 -
33857 -
97-08-06 -
970806 -
35648
00:00

B5) Com o formato de número fixo com '# ##0.00' Valor da String (lista) Valor Numérico

0.375 -
33857 -
97-08-06 -
970806 -
35 648.00 35648

84
21. Definição de número
Data, hora e formatos de número podem ser definidos para qualquer campo no script ou na opção
Formato Numérico que está disponível em vários dos Painéis de Propriedades, por exemplo, para
documentos, listas e gráficos. Aqui você pode escolher um formato diferente daquele definido pelo
sistema. Um campo só pode ter um formato. Se mudanças são feitas no painel de propriedades de um
objeto de pasta que contém o campo, estas mudanças afetarão o formato do campo em todos os
objetos de pasta.

21.1- Formatos de número no diálogo propriedades do documento

Automático Tipos diferentes de valores podem ser mostrados em diferentes formatos.


Automático é o formato padrão para todos os campos que não têm nenhuma
informação de tipo de dados.

Número Valores numéricos serão mostrados como números pode definir casas decimais

Moeda Valores numéricos serão mostrados como moeda corrente.

Data Valores numéricos serão mostrados como datas.

Duração Valores numéricos serão mostrados como hora.

Personalizar Valores numéricos personalizados pelo usuário.

21.2- Código de formato

Quando se define formatos de números como descrito acima e durante a interpretação e formatação, é
possível definir os formatos de números e datas usando um Código de Formato. Um determinante de
como números, datas, horas e data/hora devem ser formatados.

21.3- Números

 Para definir o número de dígitos use o símbolo "0" para cada dígito.
 Para definir um dígito possível use o símbolo "#". Se houver somente símbolos # à esquerda
do ponto decimal, números menores que 1 começarão com um ponto decimal.
 Para indicar a posição do separador de decimal ou do separador de milhar digite o
separador de decimal ou o separador de milhar.

Exemplos:

#,##0 Define o número como um inteiro com um separador de milhar.

###0 Define o número como um inteiro sem um separador de milhar.

0000 Define o número como um inteiro com pelo menos 4 dígitos. O número 123 deste
modo será mostrado como 0123.

0.000 Define o número com três decimais.

0.0## Define o número com pelo menos um, e no máximo três decimais.

85
21.4- Data

O símbolo "D" é usado para cada dígito para definir o dia do mês.

O símbolo "M" é usado para cada dígito para definir o mês como um ou dois números. ”MMM” define o
nome do mês abreviado em letras, de acordo com as configurações do sistema operacional ou a
variável de sistema MonthNames, que sobrepõe a definição do sistema operacional. "MMMM" define o
nome do mês completo, de acordo com as configurações do sistema operacional ou a variável de
sistema LongMonthNames, que sobrepõe a definição do sistema operacional.

O símbolo "Y" é usado para definir cada dígito do ano.

O símbolo "W" é usado para definir o dia da semana. "W" mostra o dia como um número (por exemplo
0 para segunda-feira). "WW" mostra um número com dois dígitos. "WWW" mostra o nome do dia
abreviado (por exemplo seg) de acordo com as configurações do sistema operacional ou a variável de
sistema DayName, que sobrepõe a definição do sistema operacional. "WWWW" mostra o nome do dia
completo (por exemplo segunda-feira) de acordo com as configurações do sistema operacional ou a
variável de sistema LongDayName, que sobrepõe a definição no sistema operacional.

Qualquer tipo de separador pode ser usado.

YY-MM-DD mostra a data como 01-03-31.

YYYY-MM-DD mostra a data como 2001-03-31.

YYYY-MMM-DD mostra a data como 2001-Mar-31.

31 MMMM YYYY mostra a data como 31 de março de 2001.

M/D/Y mostra a data como 3/31/01.

W YY-MM-DD mostra a data como 6 01-03-31

WWW YY-MM-DD mostra a data como Sábado 01-03-31

21.5- Horas

 O símbolo "h" é usado para cada dígito para definir horas.

 O símbolo "m" é usado para cada dígito para definir minutos.

 O símbolo "s" é usado para cada dígito para definir segundos.

 Para definir frações de segundos o símbolo "f" é usado para cadadígito.

 Para definir hora no formato am/pm use o símbolo "tt" depois da hora.

 Você pode usar qualquer separador que quiser.

Exemplos:

hh:mm mostra a hora como 18:30

hh.mm.ss.ff mostra a hora como 18.30.00.00

hh:mm:tt mostra a hora como 06:30:pm

86
22. Incluir
É possível incluir arquivos no script que contenham script ou partes de um script. Agora veremos como isto é feito, e
como nós podemos usar aplicações mais avançadas disto sem escrever qualquer coisa diretamente no script.

Vamos primeiro ver o que adicionaremos ao script.

1. Abra o Bloco de Notas no Windows.

2. Abra o arquivo Email.txt, que contém o seguinte script.


LOAD
JOIN (Funcionarios)
ID_Func as ID_Funcionario,
IF((ord(Primeiro_Nome) >= 65 AND ord(Primeiro_Nome) <= 90), chr(ord(Primeiro_Nome)+32),
IF((Left(Primeiro_Nome,1)='Ä' OR Left(Primeiro_Nome,1)='ä'), chr(97),
IF((Left(Primeiro_Nome,1)='Å' OR Left(Primeiro_Nome,1)='å'), chr(97),
IF((Left(Primeiro_Nome,1)='Ö' OR Left(Primeiro_Nome,1)='ö'),
chr(111),Left(Primeiro_Nome,1)))))&
IF((ord(Ultimo_Nome) >= 65 AND ord(Ultimo_Nome) <= 90), chr(ord(Ultimo_Nome)+32),
IF((Left(Ultimo_Nome,1)='Ä' OR Left(Primeiro_Nome,1)='ä'), chr(97),
IF((Left(Ultimo_Nome,1)='Å' OR Left(Primeiro_Nome,1)='å'), chr(97),
IF((Left(Ultimo_Nome,1)='Ö' OR Left(Primeiro_Nome,1)='ö'), chr(111),
Left(Ultimo_Nome,1)))))&
IF((ord(Right(Ultimo_Nome,1)) >= 65 AND ord(Right(Ultimo_Nome,1)) <= 90),
chr(Right(Ultimo_Nome,1))+32,
IF((Right(Ultimo_Nome,1)='Ä' OR Left(Primeiro_Nome,1)='ä'), chr(97),
IF((Right(Ultimo_Nome,1)='Å' OR Left(Primeiro_Nome,1)='å'), chr(97),
IF((Right(Ultimo_Nome,1)='Ö' OR Left(Primeiro_Nome,1)='ö'), chr(111),
Right(Ultimo_Nome,1)))))&
'@'&
IF(Escritorio=1,'stockholm.se',
IF(Escritorio=2,'lund.se',
IF(Escritorio=3,'paris.fr',
IF(Escritorio=4,'nice.fr','seattle.com')))) as "e-mail"

FROM [lib://Conexão com os dados/Func_Esc.xls]


(biff, embedded labels, table is Funcionario$);

Este é um exemplo de comando load bem complicado, que é principalmente baseado nos comandos if. Neste caso,
queremos criar endereços de e-mail com as informações contidas em nosso banco de dados. Muitas condições
devem ser satisfeitas, o que leva a um comando de load complicado que gera uma nova tabela lógica contendo dois
campos. Nós carregaremos ID_Funcionario e o novo campo e-mail, de forma a nos dar a associação ao resto da
estrutura.

O comando load cria uma assinatura que consiste na primeira letra do primeiro nome, e a primeira e última letras do
último nome. Também se assegura que não há nenhuma letra maiúscula na assinatura, somente letras minúsculas.
Letras estrangeiras (sueco), por exemplo, Å, Å, Ä, Ä, Ö e Ö também são removidas. Seguindo a assinatura, @ é então
inserido, seguido pelo endereço de servidor apropriado.

O segundo é determinado pelo escritório em que os funcionários trabalham.

47
Feche o Bloco de Notas e abra o Editor de carga de dados na seção DIM.

Ao final do script insira o seguinte código.

Email:
$(Include=[lib://Conexão com os dados/email.txt])

Vale a pena notar que não existe nenhum ponto-e-vírgula depois do comando, mas ele é encontrado no arquivo de
texto.

Clique em carregar dados.

Vá para a pasta Escritorio-Funcionarios e adicione o novo campo e-mail para a tabela.

Abaixo há um exemplo de layout para a pasta Escritorio-Funcionarios.

48
23. Análise avançada
23.1- Análise de conjunto

Análise de Conjunto

O Qlik Sense sempre foi bom em calcular agregações para a seleção de dados atual. Contudo, quando você queria
comparar resultados de diferentes seleções no mesmo gráfico, era necessário preparar dados no script ou
reclassificar em expressões complexas com cláusulas if.

A análise de conjunto muda tudo isso, permitindo modificar qualquer função de agregação com um conjunto de
seleção arbitrário.

O conjunto pode ser definido como um marcador, como uma seleção dinâmica em um ou mais campos, como uma
função das seleções atuais, o inverso das seleções atuais, das seleções anteriores, de todos os dados, etc.

As possibilidades são infinitas e ainda a sintaxe é bastante simples e direta.

Visão Geral

Os conjuntos podem ser usados em funções de agregação. Normalmente, as funções de agregação abrangem o
conjunto de registros possíveis definido pela seleção atual. Mas um conjunto de registros alternativo pode ser
definido por uma expressão de conjunto. Assim, um conjunto é conceitualmente semelhante a uma seleção.

Nota: uma expressão de conjunto está sempre entre chaves quando usada, por exemplo,

{BM01}.

Identificadores de Conjunto

Existem duas constantes que podem ser usadas para indicar conjuntos de registros. Elas são 0 e 1. Elas
representam respectivamente um conjunto vazio em um conjunto completo de todos os registros no aplicativo.

O sinal $ representa os registros da seleção atual. A expressão de conjunto

{$} é, portanto, equivalente a não definir uma expressão de conjunto. {1-$} é a mais interessante, pois define o
inverso da seleção atual, ou seja, tudo que a seleção atual exclui.

As seleções da pilha Voltar / Adiante podem ser usadas como identificadores de conjunto, usando o símbolo de
dólar: $1 representa a seleção anterior e é equivalente a pressionar o botão Voltar. De forma semelhante, $_1
representa um passo seguinte e é equivalente a pressionar o botão Adiante. Qualquer inteiro sem sinal pode ser
usado nas notações Voltar e Adiante. $0 representa a seleção atual.

Por fim, os marcadores podem ser usados como identificadores de conjunto. É possível usar o ID do marcador ou o
nome do marcador, BM01 ou Meu Marcador.

Operadores de Conjunto

Vários operadores são usados em expressões de conjunto. Todos os operadores de conjunto usam conjuntos como

49
operandos, conforme descrito acima, e retornam um conjunto como resultado. Os operadores são os seguintes:

 União. Essa operação binária retorna um conjunto formado pelos registros que pertencem a qualquer
um dos dois operandos do conjunto.
 Exclusão. Essa operação binária retorna um conjunto formado pelos registros que pertencem apenas ao
primeiro operando do conjunto, mas não ao outro. Além disso, quando usada como um operador unário, ela
retorna o conjunto complementar.
 Interseção. Essa operação binária retorna um conjunto formado pelos registros que pertencem aos dois
operandos do conjunto.

 Diferença simétrica (XOR). Essa operação binária retorna um conjunto formado pelos registros que
pertencem a um dos dois operandos do conjunto, mas não aos dois.

A ordem de prioridade é:
1 Unário menos (complemento)
2 Interseção e Diferença simétrica
3 União e Exclusão.

Em um grupo, a expressão é avaliada da esquerda para a direita. É possível definir ordens alternativas usando
parênteses, que podem ser necessários pois os operadores de conjunto não comutam, ou seja, A + (B – C) é diferente
de (A + B) – C que, por sua vez, é diferente de (A – C) + B.

Exemplos de Operadores de Conjunto:

sum( {1-$} Vendas)

retorna as vendas de todos os itens excluídos pela seleção atual. sum( {$*BM01} Vendas)

retorna as vendas da interseção entre a seleção atual e o marcador BM01.

sum( {-($+BM01)} Vendas)

retorna as vendas excluídas pela seleção atual e o marcador BM01.

Nota: o uso dos operadores de conjunto em combinação com as expressões de agregação básicas que envolvem
campos de várias tabelas do Qlik Sense pode gerar resultados imprevisíveis e deve ser evitado. Por exemplo, se
“Quantidade” e “Preço” forem campos de tabelas diferentes, então a expressão

sum( {$*BM01} Quantidade * Peço ) deverá ser evitada.

Modificadores de Conjunto

Um conjunto pode ser modificado por uma seleção adicional ou alterada. Essa modificação pode ser escrita na
expressão do conjunto.

O modificador consiste em um ou em vários nomes de campo, cada um seguido de uma seleção que deve ser feita no
campo, tudo entre < e >, como em

<Ano={2007, 2008}, Região={EUA}>

Os nomes e os valores de campo podem estar entre aspas, por exemplo,

<[Região das Vendas]={’Costa oeste’, ‘América do Sul’}>. Existem várias formas de definir a seleção:

Um caso simples é uma seleção baseada nos valores selecionados de outro campo, por exemplo, <DataPedido =
DataEntrega>. Esse modificador usará os valores selecionados de “DataEntrega” e os aplicará como uma seleção em
“DataPedido”.

50
Nota: se houver muitos valores diferentes – mais de duzentos – evite essa operação, pois ela exigirá muitos recursos
da CPU.

Contudo, o caso mais comum é uma seleção baseada em uma lista de valores de campo entre chaves, com os
valores separados por vírgula, por exemplo, <Ano = {2007, 2008}>. As chaves aqui definem um conjunto de
elementos, em que os elementos podem ser valores de campo ou pesquisas de valores de campo.

Uma pesquisa é sempre definida pela utilização de aspas duplas, por exemplo, <Ingrediente
= {"*Alho*"}> selecionará todos os ingredientes com os caracteres ‘alho’.
Nota: as pesquisas não diferenciam letras maiúsculas de minúsculas e também são feitas para valores excluídos.
Dica: conjuntos de elementos vazios, explicitamente, como <Produto = {}>, ou implicitamente, como <Produto =
{"Visão Imaginária"}> (uma pesquisa sem resultados), indicam que nenhum produto foi encontrado, ou seja, eles
resultarão em um conjunto de registros que não está associado a nenhum produto.

Além disso, a seleção dentro de um campo pode ser definida usando operadores de conjunto e vários conjuntos de
elementos, como com o modificador

<Ano = {"20*", 1997} - {2000}>

que selecionará todos os anos iniciados por “20”, além de “1997”, exceto “2000”.

A notação acima define novas seleções, independentemente da seleção atual no campo. Contudo, se desejar basear
a sua seleção na seleção atual no campo e incluir valores de campo, você pode, por exemplo, usar um

modificador <Ano = Ano + {2007, 2008}>. Uma forma mais curta e equivalente de escrever isso é <Ano += {2007,
2008}>, ou seja, o operador de atribuição define implicitamente uma união.

Além disso, interseções, exclusões e diferenças simétricas implícitas podem ser definidas com “*=”, “–=” e “/=”.

Por fim, para os campos no modo AND, também há a possibilidade de uma exclusão forçada. Se desejar forçar a
exclusão de valores de campo específicos, será necessário usar “~” antes do nome do campo.

Nota: Um modificador de conjunto pode ser usado em um identificador de conjunto ou sozinho. Ele não pode ser
usado em uma expressão de conjunto. Quando usado em um identificador de conjunto, o modificador deve ser escrito
imediatamente depois do identificador de conjunto, por exemplo, {$<Ano = {2007, 2008}>}.

Quando usado sozinho, ele é interpretado como uma modificação da seleção atual.

Expansão de Sinal de Dólar

As expansões de sinal de dólar são definições de substituição de texto usado no script ou em expressões. Esse
processo é conhecido como expansão, mesmo que o novo texto seja mais curto. A substituição é feita imediatamente
antes da avaliação da expressão ou do comando de script. Tecnicamente, é uma expansão de macro.

Uma expansão de macro sempre começa com $(e termina com ) e o conteúdo entre parênteses define como a
substituição de texto será realizada. Para evitar confusão com as macros do script, de agora em diante as expansões
de macro serão chamadas de expansões de sinal de dólar.

51
Nota: a expansão de macro não está relacionada com as macros do script (VB ou JavaScript definido no módulo de
script).

Expansão de Sinal de Dólar usando uma variável

Ao utilizar uma variável para a substituição de texto no script ou em uma expressão, a sintaxe

$ (nomedavariável)

é usada. $(nomedavariável) é expandida para o valor em nomedavariável. Se nomedavariável não existir, a expansão
será o caractere vazio.

Para expansões de variáveis numéricas, a sintaxe

$ (nomedavariável)

é usada. $(nomedavariável) sempre produz um reflexo numérico de ponto decimal legal do valor numérico de
nomedavariável, possivelmente com notação exponencial (para números muito grandes/pequenos). Se o
nomedavariável não existir, ou não contiver um valor numérico, será expandida para 0.

Expansão de Sinal de Dólar com Parâmetros

É possível usar parâmetros em expansões de variáveis. A variável deve conter então parâmetros formais, como $1,
$2, $3 etc. Ao expandir a variável, os parâmetros devem ser especificados em uma lista separada por vírgulas.

Se o número de parâmetros formais exceder o número de parâmetros reais, apenas os formais correspondentes aos
reais serão expandidos. Se o número de parâmetros reais exceder o número de parâmetros formais, os parâmetros
reais excedentes serão ignorados. O parâmetro $0 retorna o número de parâmetros realmente passados por uma
chamada.

Expansão de Sinal de Dólar com uma Expressão

As expressões podem ser usadas em expansões de sinal de dólar. O conteúdo entre parênteses deve começar com
um sinal de igual:

$(=expressão)

A expressão será avaliada e o valor será usado na expansão. Exemplo: $(=Year(Today())) retorna o ano calendário
de acordo com a data do sistema, assim, se a

data do sistema for 28 de maio de 2009, 2009 será retornado

$(=Only(Year)-1)retorna o ano anterior ao selecionado

Função AGGR

AGGR é uma avançada função do Qlik Sense que retorna um conjunto de valores de expressão calculados sobre
dimensões. O resultado pode ser comparado à coluna da expressão de um gráfico local, avaliado no contexto em que
reside a função aggr. Cada dimensão deve ser um campo único e não pode ser uma expressão (por exemplo, uma
dimensão calculada).

Se o argumento da expressão for precedido por um qualificador nodistinct, cada combinação dos valores da dimensão
poderá gerar mais de um valor de retorno, dependendo da estrutura dos dados subjacentes. Se o argumento da
expressão for precedido pelo qualificador distinct, ou se não for usado nenhum qualificador, cada combinação dos
valores da dimensão gerará somente um valor de retorno.

Por padrão, a função aggr agregará sobre o conjunto de registros possíveis definidos pela seleção. Um conjunto de
registros alternativo pode ser definido por uma expressão de conjunto.

Utilizando essa função em dimensões calculadas, é possível obter uma agregação de gráfico aninhada em vários

52
níveis.

Quando aggr é usada em expressões de gráficos, é possível obter totais de soma de linhas em uma tabela dinâmica.

Exemplos:

aggr( sum(Vendas), País )

aggr( nodistinct sum(Vendas), País )

aggr( sum(Vendas), País, Região )

count( aggr( sum(Vendas), País )).

23.2- Gerando novos campos de mais de uma tabela

Neste capítulo estudaremos expressões um pouco mais avançadas em gráficos e geraremos novos campos usando
tabelas existentes em nosso script.

Vamos assumir que queremos comparar os resultados da empresa do ano de 2000 com aqueles do ano de 1999.
Nós já sabemos como fazer isto, mas nós não podemos ver, por exemplo, a diferença entre os dois anos expressa
em porcentagem. A fim de calcular isto, nós devemos criar dois novos campos, que contenham só as vendas
líquidas para 2000 e 1999. Podemos então usar estes campos em uma tabela dinâmica, por exemplo.

Nós usaremos o campo calculado VendasLiquidas da tabela Detalhes do Pedido, mas só para um certo ano que
está no campo Data_do_Pedido na tabela Pedidos. A fim de usar as duas tabelas juntas, devemos começar
combinando-as em uma tabela única.

Agora continuaremos com o layout:

1. Vá para a pasta Est.Vendas-Mostradores clique na tabela dinâmica.

2. No Painel de Propriedades remova as medidas basta clicar com o botão direito do mouse e excluir.

3. Nós agora adicionaremos quatro novas expressões:


1999 Sum({$<Ano={1999}>}VendasLiquidas)

2000 Sum({$<Ano={2000}>}VendasLiquidas)

Dif Sum({$<Ano={2000}>}VendasLiquidas) - Sum({$<Ano={1999}>}VendasLiquidas)

Dif % (Sum({$<Ano={2000}>}VendasLiquidas) -
Sum({$<Ano={1999}>}VendasLiquidas))/
Sum({$<Ano={1999}>}VendasLiquidas )

4. Nas expressões que criamos de 1999, 2000 e Dif colocaremos o fator numérico a opção Moeda, e em Dif%
selecione o fator numérico a opção Número e apresente duas casas decimais selecionando a opção 1.000,12.

53
5. Na Expressão DIF vamos adicionar uma expressão para quando o resultado for negativo o texto fique
vermelho e quando for positivo o texto fique verde, vá até a opção Expressão de cor de texto e insira a seguinte
expressão.

(if((Sum({$<Ano={2000}>}VendasLiquidas)-

Sum({$<Ano={1999}>}VendasLiquidas))/

Sum({$<Ano={1999}>}VendasLiquidas)*1.0 < 0, RGB(255,10,10),RGB(10,255,10)))

6. Copie a mesma expressão para a medida Dif%.

7. Clique no botão salvar.


A Pasta deve estar com a seguinte aparência:

24. Depuração
Quando se trabalha com funções de script avançadas, como aquelas do capítulo anterior, pode ser difícil de
encontrar erros. O Qlik Sense contém então um depurador para ajudar você a encontrar erros em seu script.
Executar o script no depurador facilita a identificação de erros. Também pode economizar muito tempo. No
depurador, você pode estudar cada comando e verificar os valores das variáveis enquanto o script está sendo
executado.
O script é mostrado na metade superior da janela do diálogo. Uma linha laranja mostra a distância que a execução
percorreu. Pontos de interrupção podem ser inseridos clicando no número da linha, e removido clicando
novamente. Quando um novo ponto de interrupção é encontrado, a execução é parada até que se clique novamente
em Executar.
O comando de script atual é mostrado na janela no meio do diálogo.
Na parte inferior possuímos três painéis com as seguintes visões:
Saída, Variáveis e pontos de interrupções,
Temos também a opção de carga limitada que executa apenas a carga de um número especifico de dados.

Executar Este é o modo normal para execução do script. O script é executado até

o fim ou até um ponto de interrupção seja encontrado.

Incremento O script é executado um comando por vez.

Encerrar aqui O script para de executar exatamente na posição que se encontra o cursor.
54
25. Orçados / Resultado
Um arquivo Excel contendo dados financeiros pode ser encontrado no diretório Fontes de Dados. O arquivo inclui
campos dando os custos e receita orçada e o resultado real. Nós queremos usar estes dados para criar um resumo
em uma tabela dinâmica.

25.1- Nova pasta – Orçado / Resultado

Comece criando outra pasta.

1. Crie uma nova pasta e chame-a de Orçado / Resultado.

2. Copie os filtros de Ano, Mês, Dia e Trimestre e o elemento de Texto imagem do nosso cabeçalho para a
nossa nova pasta.

3. Abra o Editor da carga de dados.

4. Na conexão que criamos chamada Conexão com os dados clique em Selecionar dados, e escolha o arquivo
Orcado.xls e clique no botão selecionar.

5. Nosso documento possui os seguintes campos: Escritorio, Ano, Receita Orcada, Custo Orcado, Receita
Real, Custo Real, depois clique em Inserir script.

6. Renomeie o campo Ano para Ano_Orcado utilizando o comando as.

7. A tabela Orçados possui o relacionamento com a tabela Escritorio, então faremos um comando Join para
unir as duas tabelas, o comando será o seguinte:
left join (Escritorio)

55
8. Salve o arquivo e clique em Carregar dados.
O script gerado e depois das modificações será igual a esse:

left join (Escritorio)


LOAD
Escritorio,
Ano as Ano_Orcado,
"Receita Orcada",
"Custo Orcado",
"Receita Real",
"Custo Real"
FROM [lib://Conexão com os dados/Orcado.xls]
(biff, embedded labels, table is Sheet1$);

Agora usaremos estes novos campos em alguns gráficos:

1. Selecione uma tabela dinâmica e arraste para o centro da tela e dê o nome Resultado Real comparado
com o Orçado para o título da tabela.

2. Selecione os campos Cidade_Escritorio e Ano_Orcado como dimensões.

3. Crie as três Medidas com as seguintes expressões:


Resultado Sum ([Receita Real]) - Sum ([Custo Real])

Orçado Sum ([Receita Orcada]) - Sum ([Custo Orcado])

Dif (Sum ([Receita Real]) - Sum ([Custo Real])) –


(Sum ([Receita Orcada]) - Sum ([Custo Orcado]))

4. Assegure-se que a opção Mostrar totais está ativado na aba Dados.

5. Em Expressão de cor de texto, nós vamos colorir os valores negativos da expressão Dif. Os valores
inferiores a 0 serão mostrados em vermelho.

Utilizando a seguinte Expressão:


=IF((Sum ([Receita Real]) - Sum ([Custo Real])) –
(Sum ([Receita Orcada]) - Sum ([Custo Orcado])) <= 0, RGB(255,10,10))

6. Vamos prosseguir com o gráfico combinado. Esse gráfico terá as mesmas expressões que a tabela e em
dimensão terá apenas Cidade_Escritorio.

7. Dê o nome do gráfico de Orçado / Resultado.

8. Coloque os rótulos as expressões Resultado, Orçado e DIF respectivamente.

9. Na opção Aparência em Cores e Legenda marque a opção Mostrar legenda e em posição selecione
Direita.

10. As primeiras duas expressões serão ilustradas por barras, enquanto Dif será mostrada como uma linha.

56
11. Em Eixo X e Eixo Y marque a opção apenas Rótulos.

12. Ajuste o novo gráfico e posicione-o de acordo com a figura abaixo.

26. - Dados contadores de história


Com os dados contadores de história, você pode criar uma apresentação com base nos dados do seu aplicativo. Você
pode criar snapshots das visualizações selecionadas e usá-los em sua narrativa junto com textos, formas e efeitos.
Você pode criar slides e desenvolver a história pensando especialmente no público destinado. Em sua narrativa,
enfoque os elementos principais e crie uma história convincente na qual possa passar sua mensagem.

Outro recurso útil dos dados contadores de história é a possibilidade de, durante uma história, alternar entre um
snapshot na apresentação e seu contexto no aplicativo. No contexto do aplicativo, você pode fazer novas seleções e
retomar a análise do ponto em que deixou a apresentação. Depois da análise, você pode retomar a apresentação.

26.1- Criar snapshots

Comece criando sua apresentação tirando snapshots no aplicativo. No canto superior direito, com o auxilio das teclas
de navegação da pasta vá para a pasta Est. Vendas.

Na apresentação, você se concentrará nas três maiores regiões e analisará as tendências de vendas.

Faça o seguinte:

Com o auxilio do filtro País selecione o país Germany.

1. Clique com o botão direito no gráfico Vendas por vendedor e selecione Tirar snapshot.

2. Clique com o botão direito no gráfico Top10 clientes e selecione Tirar snapshot.

3. Clique com o botão direito no gráfico Estatística por produto e selecione Tirar snapshot.

5. Agora no filtro País selecione o país USA

6. Tire snapshots dos mesmos gráficos que tiramos com a seleção Germany.

7. Depois tire snapshots com filtro de país selecionado em France .

57
8. Tire snapshots dos mesmos gráficos que tiramos com os filtros anteriores .

Você tirou todos os snapshots necessários e pode começar a criar seus slides de dados contadores de história.

26.2- Criar uma história simples

Você vai criar uma história breve e simples, na qual o foco será criar alguns slides com snapshots e títulos.

Faça o seguinte:

1. Na barra de ferramentas, clique em e, depois, em Criar nova história.

2. Digite o título Países que mais venderam.

3. Clique na história Países que mais venderam.

O editor dos dados contadores de história é aberto.

4. No canto esquerdo da tela tem uma barra de menu, clique no e arraste um título para o slide.

58
5. Digite o título Países que mais venderam.

6. Clique em para ver os snapshots criados.

Os snapshots são exibidos com títulos de ícones e datas.

7. Arraste o snapshot do gráfico de referente aos dados da seleção do país Germany para o slide.

8. Redimensione os gráfico e posicione-os da forma que desejar.

12. Crie um novo slide e adicione os dados dos países USA e France.

27. Arquivo QVD


Os arquivos QVD são um dos tipos reconhecidos de arquivos que podem ser usados como uma conexão de dados.

27.1- Trabalhando com arquivo QVD

Um arquivo QVD (QlikView Data) é um arquivo que contém uma tabela de dados exportada do Qlik Sense ou do
QlikView. O QVD é um formato nativo do Qlik e pode ser gravado e lido apenas pelo Qlik Sense ou QlikView. O
formato de arquivo é otimizado para velocidade na leitura de dados de um script do Qlik Sense e ao mesmo tempo é
compacto. A leitura de dados de um arquivo QVD é geralmente de 10 a 100 vezes mais rápida do que a leitura de
outras fontes de dados.

Os arquivos QVD podem ser lidos em dois modos, padrão (rápido) e otimizado (mais rápido). O modo selecionado é
determinado automaticamente pelo mecanismo de script do Qlik Sense. O modo otimizado pode ser usado apenas
quando todos os campos são lidos sem transformações (fórmulas que atuam nos campos), embora a renomeação de
campos seja permitida. Uma cláusula Where que faz o Qlik Sense descompactar os registros também desativará a
carga otimizada.

Um arquivo QVD contém exatamente uma tabela de dados e é composto por três partes:

Um cabeçalho XML (com o conjunto de caracteres UTF-8), que descreve os campos da tabela, o layout das
informações posteriores e alguns outros metadados. Tabelas de símbolos em um formato com bytes.

Dados da tabela em um formato com bits. os arquivos QVD podem ser usados para vários fins. Pelo menos quatro
usos principais podem ser facilmente identificados. Mais de um deles pode se aplicar em determinadas situações:

 Aumento da velocidade da carga de dados

Se forem armazenados em buffer blocos de dados de entrada de arquivos QVD, que não mudam ou mudam aos
poucos, a execução do script ficará consideravelmente mais rápida para conjuntos grandes de dados.

 Diminuindo a carga nos servidores de base de dados

O volume de dados lidos de fontes de dados externas pode também ser bastante reduzido. Isso reduz

a carga de trabalho dos bancos de dados externos e o tráfego de rede. Além disso, quando vários scripts do Qlik
Sense compartilham os mesmos dados, basta carregá-los uma vez do banco de dados de origem em um arquivo
QVD. Os outros aplicativos podem usar os mesmos dados por meio desse arquivo QVD.

 Consolidação de dados de vários aplicativos Qlik Sense

Com o comando de script Binary, é possível carregar dados de um único aplicativo Qlik Sense em outro
aplicativo, mas com os arquivos QVD, um script do Qlik Sense é capaz de combinar dados de vários aplicativos do

59
Qlik Sense. Isso aumenta as possibilidades de aplicativos que consolidam dados semelhantes de unidades de
negócios diferentes etc.

 Carga incremental

Em muitos casos comuns, a funcionalidade QVD pode ser usada para facilitar a carga incremental, isto é, para
carregar exclusivamente novos registros de uma base de dados crescente.

27.2- Criando Arquivo QVD

Os arquivos QVD podem ser criados de duas maneiras:

 Criação e nomeação explícitas, usando o comando Store no script Qlik Sense.

Indique no script que uma tabela lida anteriormente ou parte dela deve ser exportada para um arquivo
nomeado de forma explícita em um local de sua escolha.

 Criação e manutenção automáticas a partir do script.

Se um comando load ou select for precedido do novo prefixo Buffer, o Qlik Sense criará automaticamente um
arquivo QVD que, se determinadas condições forem atendidas, pode ser usado no lugar da fonte de dados
original ao recarregar os dados.

Não há diferença entre os arquivos QVD resultantes, por exemplo, em relação à velocidade de leitura.

27.3- Store

Syntax:

Store [ *fieldlist from] table into filename [ format-spec ];

O comando criará um arquivo QVD ou CSV nomeado de forma explícita. O comando só pode exportar campos de
uma tabela lógica. Se os campos de várias tabelas forem exportados, uma junção explícita deve ser feita
anteriormente no script para criar a tabela de dados que deve ser exportada.

Os valores de texto são exportados para o arquivo CSV no formato UTF-8. É possível especificar um separador. Para
isso, consulte LOAD. O comando store de um arquivo CSV não suporta a exportação de BIFF.

Exemplos:
Store mytable into xyz.qvd (qvd);
Store * from mytable into xyz.qvd;
Store Name, RegNo from mytable into xyz.qvd;
Store Name as a, RegNo as b from mytable into xyz.qvd;
store mytable into myfile.txt (txt);
store * from mytable into 'lib://FolderConnection/myfile.qvd';

Faça o seguinte:

1. Abra o Editor da carga de dados.


2. Abra a seção Pedidos e no final da carga insira o seguinte código.

Store * from Pedidos into 'lib://Conexão com os dados/Pedidos.qvd';


drop table Pedidos;

(O comando Drop table vai apagar a tabela pedidos completa).

3. No canto superior direito, clique em Carregar dados, Quando você clicar em Carregar dados, o script é salvo.
4. Clique em selecionar dados na conexão de dados chamada Conexão com os dados para exibir os arquivos disponíveis.
5. Abra a seção MasterCalendar e na linha que carrega a residente remova Pedidos e escreva FATO.

60
Agora, o arquivo Pedidos.qvd deve constar na lista de arquivos.
Este arquivo de dados é o resultado do script completo de Pedidos e é uma cópia idêntica a nossa tabela de Pedidos esse arquivo
pode ser carregado da mesma forma que carregamos todos os outros arquivos no nosso aplicativo.

27.4- Buffer
Os arquivos QVD podem ser criados e mantidos automaticamente usando o prefixo Buffer. Esse prefixo pode ser usado com a
maioria dos comandos LOAD e SELECT no script. Ele indica se os arquivos QVD serão usados para armazenar em cache/buffer o
resultado do comando.
Syntax:

Buffer [ (option [ , option])] ( loadstatement | selectstatement )

option::= incremental | stale [after] amount [(days | hours)]

Se não for usada nenhuma opção, o buffer de QVD criado pela primeira execução do script será usado indefinidamente.
Exemplo 1:
Buffer select * from MyTable;
incremental
A opção incremental permite a leitura apenas de parte de um arquivo subjacente. O tamanho anterior do arquivo é armazenado no
cabeçalho XML no arquivo QVD. Isso é especificamente útil com arquivos de log.
Todos os registros carregados anteriormente são lidos do arquivo QVD, enquanto que os novos registros posteriores são lidos na
fonte original e, por último, um arquivo QVD atualizado é criado.
Exemplo 2:
Buffer (stale after 7 days) select * from MyTable;
Observe que a opção incremental só pode ser usada com comandos LOAD e arquivos de texto e essa carga incremental não pode
ser usada quando dados antigos são alterados ou excluídos.
stale [after] amount [(days | hours)]
Amount é um número que especifica o período de tempo. Decimals pode ser usado A unidade adotada será dias, se for omitida. A
opção stale after é geralmente usada com fontes do banco de dados nas quais não há nenhum carimbo de data/hora simples nos
dados originais. Uma cláusula stale after simplesmente determina um período de tempo a partir da hora de criação do buffer do
QVD, após a qual o buffer deixará de ser considerado válido.
Antes desse período, o buffer de QVD será usado como fonte dos dados e, após o período, será usada a fonte de dados original. O
arquivo do buffer de QVD será automaticamente atualizado e um novo período
será iniciado.
Exemplo 3:
Buffer (incremental) load * from MyLog.log;
Os buffers de QVD normalmente serão excluídos quando deixarem de ser referenciados durante a execução
completa do script no aplicativo que os criou ou quando o aplicativo que os criou não existir mais. O comando Store deve ser
usado se você desejar manter o conteúdo do buffer como um arquivo QVD ou CSV.

61
28. Lendo os dados de arquivos QVD
Um arquivo QVD pode ser lido ou acessado pelo Qlik Sense pelos seguintes métodos:

Carregando um arquivo QVD como uma fonte de dados explícita. Os arquivos QVD podem ser referenciados por um
comando load no script do Qlik Sense, como qualquer outro tipo de arquivo de texto (csv, fix, dif, biff, etc).

Exemplo:
LOAD * from xyz.qvd (qvd);
LOAD Name, RegNo from xyz.qvd (qvd);
LOAD Name as a, RegNo as b from xyz.qvd (qvd);

Carregando automaticamente os arquivos QVD armazenados em buffer. Ao usar o prefixo buffer em comandos load ou select,
nenhuma declaração explícita para leitura é necessária. O Qlik Sense determinará como usará os dados do arquivo QVD, ao
contrário da obtenção de dados com o uso do comando original LOAD ou SELECT.

Acessando arquivos QVD a partir do script. Várias funções de script (todas começando com QVD) podem ser usadas para
recuperar diversas informações dos dados contidos no cabeçalho XML de um arquivo QVD.

Agora abra a seção Fato, nessa seção vamos carregar a o Pedidos.qvd.

Clique em inserir dados na conexão chamada Conexão com os dados e selecione o arquivo Pedidos.qvd e insira o seu script.

Nomeie assa tabela para FATO colocando seu nome antes do comando LOAD seguido por dois ponto.

O script deve ser igual semelhante a esse:

FATO:
LOAD
ID_Pedido,
Data_do_Pedido,
Frete,
ID_Cliente,
ID_Funcionario,
Vendas_Funcionario,
Desconto,
ID_Produto,
Contar_ID_Produto,
Quantidade,
VendasLiquidas
FROM [lib://Conexão com os dados/Pedidos.qvd]
(qvd);

29. Script completo


Nosso script após o termino de todos os carregamentos alterações e exclusões deve ser semelhante a esse:

62
29.1- Seção Main

SET ThousandSep='.';
SET DecimalSep=',';
SET MoneyThousandSep='.';
SET MoneyDecimalSep=',';
SET MoneyFormat='R$ #.##0,00;-R$ #.##0,00';
SET TimeFormat='hh:mm:ss';
SET DateFormat='DD/MM/YYYY';
SET TimestampFormat='DD/MM/YYYY hh:mm:ss[.fff]';
SET MonthNames='jan;fev;mar;abr;mai;jun;jul;ago;set;out;nov;dez';
SET DayNames='seg;ter;qua;qui;sex;sáb;dom';
SET
LongMonthNames='janeiro;fevereiro;março;abril;maio;junho;julho;agosto;setembro;outubro;novembro;d
ezembro';
SET LongDayNames='segunda-feira;terça-feira;quarta-feira;quinta-feira;sexta-
feira;sábado;domingo';
SET FirstWeekDay=6;
SET BrokenWeeks=1;
SET ReferenceDay=0;
SET FirstMonthOfYear=1;
SET CollationLocale='pt-BR';

LIB CONNECT TO 'Fonte de dados';

29.2- Seção Fato

FATO:
LOAD
ID_Pedido,
Data_do_Pedido,
Frete,
ID_Cliente,
ID_Funcionario,
Vendas_Funcionario,
Desconto,
ID_Produto,
Contar_ID_Produto,
Quantidade,
VendasLiquidas
FROM [lib://Conexão com os dados/Pedidos.qvd]
(qvd);

29.3- Seção Pedidos

LIB CONNECT TO 'Fonte de dados';

//***************Pedidos***************
LOAD `Data_do_Pedido`,

63
Frete,
`ID_Cliente`,

// year(Data_do_Pedido)as Ano,
// month(Data_do_Pedido) as Mes,
// day(Data_do_Pedido) as Dia,

//`ID_Fornecedor`,
`ID_Funcionario`,
`ID_Funcionario` as Vendas_Funcionario,
`ID_Pedido`;
SQL SELECT `Data_do_Pedido`,
Frete,
`ID_Cliente`,
// `ID_Fornecedor`,
`ID_Funcionario`,
`ID_Pedido`
FROM Pedidos;

LIB CONNECT TO 'Fonte de dados';

// ***************Detalhes do Pedido***************
Right join(Pedidos)
LOAD Desconto,
`ID_Pedido`,
`ID_Produto`,
`ID_Produto` as Contar_ID_Produto,
//`Preco_Unitario`,
Quantidade,
Preco_Unitario * Quantidade * (1-Desconto) as VendasLiquidas;

SQL SELECT Desconto,


`ID_Pedido`,
`ID_Produto`,
`Preco_Unitario`,
Quantidade
FROM `Detalhes do Pedido`;

Store * from Pedidos into 'lib://Conexão com os dados/Pedidos.qvd';


drop table Pedidos;

29.4- Seção DIM

LIB CONNECT TO 'Fonte de dados';

//***************Clientes***************
LOAD Cidade,
`Codigo_Postal`,
Endereco,

64
Fax,
Fone,
`ID_Cliente`,
`Nome_da_Empresa`,
`Nome_do_Contato`,
Pais;
SQL SELECT Cidade,
`Codigo_Postal`,
Endereco,
Fax,
Fone,
`ID_Cliente`,
`Nome_da_Empresa`,
`Nome_do_Contato`,
Pais
FROM Clientes;
LIB CONNECT TO 'Fonte de dados';

//***************Fornecedores***************
Fornecedores:
LOAD `ID_Fornecedor`,
`Nome_da_Empresa` as Fornecedores;
SQL SELECT `ID_Fornecedor`,
`Nome_da_Empresa`
FROM Fornecedores;

//***************Produtos***************
Produtos:
LOAD `ID_Categoria`,
`ID_Fornecedor`,
`ID_Produto`,
`Nome_do_Produto`,
`Preco_Unitario`,
QuantidadePorUnidade,
`Unidades_em_Estoque`,
`Unidades_Pedidas`;
SQL SELECT `ID_Categoria`,
`ID_Fornecedor`,
`ID_Produto`,
`Nome_do_Produto`,
`Preco_Unitario`,
QuantidadePorUnidade,
`Unidades_em_Estoque`,
`Unidades_Pedidas`
FROM Produtos;

//***************Categorias***************
Categorias:
LOAD Descricao,
`ID_Categoria`,
`Nome_da_Categoria`;
SQL SELECT Descricao,
`ID_Categoria`,
`Nome_da_Categoria`
FROM Categorias;

//***************Funcionários***************
Funcionarios:
LOAD
ID_Func as ID_Funcionario,
Primeiro_Nome & ' ' & Ultimo_Nome as Nome,
Titulo,
Data_Admissao,
Year (Data_Admissao) as Ano_Admissao,
Escritorio,
Extensao,
Reporta_a,
Salario_Anual
FROM [lib://Conexão com os dados/Func_Esc.xls]
(biff, embedded labels, table is Funcionario$);

65
//***************Tabela lógica Funcionários***************
JOIN(Funcionarios)
Load
ID_Funcionario,
Nome as Pessoal_Vendas,
Titulo as Titulo_Vendas
resident Funcionarios
where exists (Vendas_Funcionario, ID_Funcionario);

//***************Escritório***************
Escritorio:
LOAD
Escritorio,
Endereco as Endereco_Escritorio,
Codigo_Postal as Codigo_Postal_Escritorio,
Cidade as Cidade_Escritorio,
Fone as Fone_Escritorio,
Fax as Fax_Escritorio,
Pais as Pais_Escritorio
FROM [lib://Conexão com os dados/Func_Esc.xls]
(biff, embedded labels, table is Escritorio$);

//***************Fornecedores***************
Qualify *;
Unqualify ID_Fornecedor;
right Join(Fornecedores)
LOAD
ID_Fornecedor,
Nome_da_Empresa,
Nome_do_Contato,
Endereco,
Cidade,
Codigo_Postal,
Pais,
Fone,
Fax
FROM [lib://Conexão com os dados/Fornecedores.xlsx]
(ooxml, embedded labels, table is Fornecedores);
Unqualify *;
//***************Fornecedores***************
$(Include=[lib://Conexão com os dados/email.txt])
//***************Orçados***************
left join (Escritorio)
LOAD
Escritorio,
Ano as Ano_Orcado,
"Receita Orcada",
"Custo Orcado",
"Receita Real",
"Custo Real"
FROM [lib://Conexão com os dados/Orcado.xls]
(biff, embedded labels, table is Sheet1$);

29.5- Seção MasterCalendar

Calendario:
LOAD
date(Data_do_Pedido,'DD/MM/YYYY') as Data_do_Pedido,
month(Data_do_Pedido) as Mes,
Num(month(Data_do_Pedido), '00') as MesNum,
MonthStart(Data_do_Pedido) as Mes_Corrente,
day(Data_do_Pedido) as Dia,
year(Data_do_Pedido) as Ano,

66
weekday(Data_do_Pedido) as Semana,
ceil(Month(Data_do_Pedido)/3) as Trimestre,
DAY(Data_do_Pedido) & '/' & WeekDay(Data_do_Pedido) as DiaSemana,
DAY(Data_do_Pedido) & '/' & num(month(date(Data_do_Pedido)),00) as DiaMes,
DAY(Data_do_Pedido) & '/' & num(month(date(Data_do_Pedido)),00) & ' - ' &
WeekDay(Data_do_Pedido) as DiaMesSemana,
Date(Date#(month(Data_do_Pedido) & '/' & year(Data_do_Pedido), 'MMM/YYYY'), 'MMM/YYYY') as
MesAno

Resident FATO

67