Logo Passei Direto
Buscar
Material
páginas com resultados encontrados.
páginas com resultados encontrados.

Escolha uma das opções e acesse esse e outros materiais sem bloqueio. 🤩

Cadastre-se ou realize login

Ao continuar, você aceita os Termos de Uso e Política de Privacidade

Escolha uma das opções e acesse esse e outros materiais sem bloqueio. 🤩

Cadastre-se ou realize login

Ao continuar, você aceita os Termos de Uso e Política de Privacidade

Escolha uma das opções e acesse esse e outros materiais sem bloqueio. 🤩

Cadastre-se ou realize login

Ao continuar, você aceita os Termos de Uso e Política de Privacidade

Escolha uma das opções e acesse esse e outros materiais sem bloqueio. 🤩

Cadastre-se ou realize login

Ao continuar, você aceita os Termos de Uso e Política de Privacidade

Escolha uma das opções e acesse esse e outros materiais sem bloqueio. 🤩

Cadastre-se ou realize login

Ao continuar, você aceita os Termos de Uso e Política de Privacidade

Escolha uma das opções e acesse esse e outros materiais sem bloqueio. 🤩

Cadastre-se ou realize login

Ao continuar, você aceita os Termos de Uso e Política de Privacidade

Escolha uma das opções e acesse esse e outros materiais sem bloqueio. 🤩

Cadastre-se ou realize login

Ao continuar, você aceita os Termos de Uso e Política de Privacidade

Escolha uma das opções e acesse esse e outros materiais sem bloqueio. 🤩

Cadastre-se ou realize login

Ao continuar, você aceita os Termos de Uso e Política de Privacidade

Escolha uma das opções e acesse esse e outros materiais sem bloqueio. 🤩

Cadastre-se ou realize login

Ao continuar, você aceita os Termos de Uso e Política de Privacidade

Escolha uma das opções e acesse esse e outros materiais sem bloqueio. 🤩

Cadastre-se ou realize login

Ao continuar, você aceita os Termos de Uso e Política de Privacidade

Prévia do material em texto

Desenvolvedor 
Versão de dezembro de 2011
QlikView Versão 11.00 Português
Copyright © 2011 QlikTech International AB, Suécia. Todos os direitos reservados. 
A documentação e o software são protegidos por leis de direitos autorais e não devem ser copiados, fotoco-
piados, reproduzidos, traduzidos, distribuídos, explorados ou reduzidos a qualquer meio eletrônico ou for-
mato legível por máquina, completa ou parcialmente, sem a permissão prévia por escrito da QlikTech 
International AB, exceto conforme descrito no contrato do software.
Qlik®, QlikTech® e QlikView® são marcas comerciais registradas da QlikTech International AB.
Microsoft, MS-DOS, Windows, Windows NT, Windows 2000, Windows Server 2003, Windows Server 
2008, Windows XP, Windows Vista, SQL Server, Excel, Access, Visual Basic, Internet Explorer, Internet 
Information Server, Visual C++, Visual Studio e MS Query são marcas comerciais da Microsoft Corpora-
tion.
IBM, AS/400 e PowerPC são marcas comerciais da International Business Machines Corporation.
Firefox é marca comercial da Mozilla Foundation.
Apple, iPhone, iPod Touch, Safari e MacOS são marcas comerciais da Apple Corporation.
BlackBerry é marca comercial da Research In Motion. 
Todas as outras marcas comerciais pertencem a seus respectivos titulares, de modo que somente poderão ser 
usadas mediante expressa permissão por escrito. 
Esta versão: Data de 2011
CONTEÚDOS
1 INTRODUÇÃO 1
Sobre este curso 1
Definição de um Desenvolvedor e de um Administrador 
do Sistema QlikView 1
Sobre a QlikTech 1
Business Discovery 2
QlikView 3
Componentes da Plataforma de Business Discovery QlikView 6
 Opções de treinamento do QlikView 7
2 A METODOLOGIA DE DESENVOLVIMENTO 
DO QLIKVIEW 9
Importar/Exportar Layouts de Pasta e Documento como XML 9
Plano de projeto 9
Revisão do Plano de Projeto 10
Metodologia de Projetos do QlikView (QPM) 10
3 IMPLANTAÇÃO 13
QlikView Desktop, Server e Publisher 13
Exemplos de implantações 14
4 INTRODUÇÃO AOS DADOS E SCRIPTS 17
Sistema de gerenciamento de base de dados relacional (RDBMS) 17
Estruturas de Dados 18
Assistente para Arquivos de Tabelas 20
Arquivos QVD do QlikView 20
O formato de arquivo QVD 21
Qual é a utilidade dos arquivos QVD? 21
Comparação de Estruturas de Bases de Dados com Estruturas 
de Dados do QlikView 21
Estruturas de Dados no QlikView 23
QlikView Developer | CONTEÚDOS
Arquivos de Fonte de Dados 24
Fonte de Dados Principal do QWT 24
Arquivos de Dados Secundários do QWT 24
Introdução aos Scripts 24
Caixa de Diálogo Editar Script 25
5 SINTAXE BÁSICA DO SCRIPT 35
 Sintaxe 35
6 CARREGAMENTO DE DADOS A PARTIR DA BASE 
DE DADOS 41
Geração do Script 41
Comentários no Script 41
Depuração de Scripts 49
7 ESTRUTURAÇÃO DO SCRIPT 53
Criar Abas no Script 53
Chaves Sintéticas 54
8 MODELO DE DADOS BÁSICO E VISUALIZADOR 
DE TABELAS 63
 O Visualizador de Tabelas 63
Tabela do Sistema 68
Propriedades do Documento: página Tabelas 69
9 TRANSFORMAÇÃO DE DADOS BÁSICA 71
Comando Load 71
Renomear um Campo 72
Expressões de Script 73
Carregar um Arquivo XML 74
Comando Qualify 75
Campos-chave 77
Usar um Contador de Registros em Campos-chave 78
Isto Está Certo? 79
2
QlikView Developer | CONTEÚDOS
10 ADICIONAR DADOS DE TEXTO 81
Assistente de Arquivo 81
Arquivos do Excel 81
Geração de scripts usando o Assistente de Arquivo 83
11 GERAR DADOS NO SCRIPT DO QLIKVIEW 87
Resident Load 87
Uso da tabela Orders para determinar o valor de Sales Person 89
A Cláusula Where Exists 89
Incluir Arquivos 90
Criar um Calendário 92
Obtendo a Maior e a Menor Data da Tabela Orders 92
Tabelas autogenerate 93
Criando Variáveis no Script 93
O Calendário Mestre 95
12 CONSIDERAÇÕES SOBRE SCRIPTS 97
Mais informações sobre Chaves Sintéticas 97
Referências Circulares 100
Verificar os Números 101
13 ARQUIVOS QVD 
 (ARQUIVOS DE DADOS QLIKVIEW) 103
Sobre os arquivos QVD 103
Formato de Arquivo QVD 103
Utilização de Arquivos QVD 104
Criação de Arquivos QVD 105
Comando Store 105
Criação Manual de um Arquivo QVD no Script 105
Funções de Script do Arquivo QVD 109
14 TABELAS DE MAPEAMENTO 111
Tabelas de Mapeamento 111
Limpeza da estrutura da tabela 111
3
QlikView Developer | CONTEÚDOS
15 CARREGAMENTO DE DADOS DE ORÇAMENTO 117
Tabelas Cruzadas 117
Leitura de Tabelas Cruzadas 118
16 OTIMIZAÇÃO DO MODELO DE DADOS 123
Condição em um campo em uma tabela 123
Agregando Dados 123
Unindo Tabelas 123
Concatenação 124
Load Anterior em Load Anterior 125
17 CÁLCULOS AVANÇADOS EM OBJETOS DE PASTA 133
Limites de Dimensão 133
Análise de conjunto. 139
Expansão de sinal de cifrão. 144
Análises Comparativas usando Estados Alternativos 150
Função AGGR 157
18 DESAFIOS DE SCRIPTS E DA MODELAGEM 
 DE DADOS 159
Tabelas Vinculadas e Tabelas Concatenadas 159
Calculando a variação líquida em um campo 160
Funções InDate, Data e DateIslands 160
Class() 161
Agregação Dinâmica 161
Correspondência de Intervalo 161
19 OTIMIZAÇÃO DE DESEMPENHO 173
Ajuste de Desempenho 173
Práticas Recomendadas para a Otimização do Arquivo QlikView 175
Criar Cargas Incrementais 177
4
QlikView Developer | CONTEÚDOS
20 SEGURANÇA DO QLIKVIEW 185
Controle de acesso 185
Níveis de acesso 185
Base de dados de controle de acesso 186
Restrições de acesso herdadas 188
Script oculto 188
Incluindo a Seção de Acesso 189
Controle de acesso para determinados comandos 191
Mais controle de acesso 192
Considerações sobre Recarga da Linha de Comando sem Supervisão 194
Restrições de acesso em valores de campo selecionados 194
Limitação de valores de campo na Seção de Acesso 195
Dê a sua opinião sobre como nos saímos... 197
5
QlikView Developer | 1 INTRODUÇÃO
1 INTRODUÇÃO
1.1 Sobre este curso
Bem-vindo ao Curso de Desenvolvedor do QlikView 11. Possuir um pro-
fundo conhecimento sobre modelagem de dados, criação de conexões de 
dados adequadas e fundamentos de scripts é essencial para criar documentos 
QlikView que proporcionarão à sua empresa poderosas ferramentas de 
Business Discovery. Começando com o ambiente QlikView e terminando 
com uma introdução ao design avançado de interface, este curso preparará 
você para elaborar documentos QlikView de alta qualidade.
1.2 Definição de um Desenvolvedor e de um Administrador do Sistema 
QlikView
O desenvolvedor do QlikView é responsável pelo desenvolvimento e pela 
documentação da solução QlikView de acordo com os requisitos especifica-
dos. Ele também ajuda a responder perguntas e a elaborar recomendações 
durante as fases do projeto. A prioridade do desenvolvedor é criar o modelo 
de dados e executar o procedimento apropriado de extrair-transformar-car-
regar (ETL) dados como suporte aos requisitos comerciais.
Os administradores do sistema QlikView são responsáveis pelo hardware, 
pelos sistemas operacionais e pelas programações de trabalho. Eles garan-
tem a conectividade entre os padrões ODBC (Conectividade Aberta de Base 
de Dados), e/ou OLEDB (Base de Dados de Vinculação e Incorporação de 
Objeto), entre o ambiente de hardware do QlikView (servidor e cliente) e os 
sistemas de base de dados subjacentes. Eles também fornecem IDs e senhas de 
usuários necessários para conexão a esses sistemas.
1.3 Sobre a QlikTech
A QlikTech é uma empresa de software fundada em Lund, na Suécia, em 
1993. A QlikTech foi fundada com o ideal de que o business intelligence (BI) 
deve estar dedicado aos usuários de negócios. Os softwares tradicionais de BI 
ficaram muito inchados e complexos, confundindo e frustrando os usuários. 
Há vinte anos, a QlikTech se concentra em simplificar a tomada de decisões 
para os usuários de negócios em todos os setores. A QlikTech é pioneira em 
novos métodos de acesso, gerenciamento e interatividade de dados.
Objetivos
• Identificar o que é Business Discovery 
• Identificar o grupo de produtos do QlikView
• Identificar futuras oportunidades de treinamento 
1
QlikView Developer | 1 INTRODUÇÃO
1.4 Business Discovery
Business Discovery é uma técnica de BI voltada para o usuário que ajuda na 
tomada de decisões, com base em vários insights provenientesde dados, pes-
soas e do ambiente. Com as plataformas de Business Discovery, o usuário 
pode compartilhar conhecimento e analisar dados em grupo e com em todos 
os setores. O Business Discovery possibilita que os usuários respondam suas 
dúvidas e sigam seus próprios caminhos para os insights. Permite que as equi-
pes tomem decisões de forma colaborativa. O Business Discovery propor-
ciona:
• Insight em todos os lugares. Em vez de apenas algumas pessoas se envol-
verem na criação de insights, o Business Discovery permite a participa-
ção de todos. Essa metodologia tem a ver com criação de inteligência, 
indo além do simples consumo de informações. O Business Discovery dá 
acesso a dados e análises a pessoas e grupos, permitindo que se consiga o 
necessário com muito mais rapidez e precisão.
• Um modelo de aplicativos. Ninguém precisa ter a dor de cabeça de 
implantar e gerenciar imensos aplicativos de negócios. As plataformas 
do Business Discovery possibilitam que os usuários possam criar seus 
próprios aplicativos intuitivos, que podem ser facilmente reutilizados e 
descartados quando não forem mais necessários. É fácil usar, modificar 
e compartilhar os aplicativos do QlikView. A nova tendência do BI é 
permitir que as pessoas desenvolvam e implantem aplicativos especiali-
zados de Business Discovery.
• Combinação e remontagem. Ninguém pode prever quais as dúvidas que 
os usuários de negócios terão ao iniciar a exploração de dados, nem 
mesmo os próprios usuários. As soluções tradicionais de BI exigem a 
dedicação integral dos profissionais de TI à criação de novas consultas e 
relatórios, sempre que os usuários têm novas questões. Em contrapartida, 
o QlikView facilita a combinação e a remontagem de dados para os usu-
ários de negócios. Com o QlikView, os usuários de negócios podem usar 
visualizações para facilitar a compreensão dos dados.
• Uma experiência social e colaborativa. O QlikView consiste em promo-
ver comunidades de pessoas envolvidas ativamente com tomadas de 
decisão, a fim de orientar o conhecimento que pode ser disseminado em 
uma empresa. O Business Discovery permite que os usuários colaborem 
em insights e promovam decisões tanto diretamente, através de seus apli-
cativos de Business Discovery, quanto por meio da integração de ferra-
mentas de colaboratividade corporativa como o Microsoft SharePoint 
ou o Salesforce Chatter.
2
QlikView Developer | 1 INTRODUÇÃO
• Mobilidade. Os tomadores de decisões de negócios, em todos os níveis 
de uma organização, precisam que os dados estejam a sua disposição 
sempre que precisarem. Tablets e outros dispositivos móveis deram 
mobilidade aos dados de negócios. Diferentemente de soluções tradicio-
nais de BI, as plataformas móveis de Business Discovery do QlikView 
proporcionam uma interface intuitiva e uma infraestrutura de aplicati-
vos feita especialmente para usuários de negócios. Eles podem explorar 
dados, fazer associações e obter insights onde quer que estiverem traba-
lhando.
Com a plataforma de Business Discovery do QlikView, os usuários de negó-
cios seguem suas próprias ideias, fazem descobertas de forma colaborativa e 
chegam a um novo patamar de tomada de decisões. Os usuários de negócios 
não ficam limitados a caminhos predeterminados ou a questões já formula-
das. Eles perguntam o que precisam e tem liberdade de exploração, em vez 
de seguir um roteiro predefinido. A plataforma de Business Discovery é a 
abordagem que cumpre com perfeição a promessa do BI.
1.5 QlikView
O QlikView é uma plataforma de Business Discovery que torna possível 
recuperar e assimilar dados de fontes diferentes. Após serem carregados em 
documento QlikView, os dados são apresentados de forma fácil de ser 
entendida e manejada.
O QlikView gerencia informações da mesma forma que o cérebro humano. 
Assim como o cérebro humano, o QlikView faz conexões associativas com 
as informações que estão sendo processadas. Você – e não a base de dados – 
decide quais perguntas devem ser feitas. Basta clicar no item sobre o qual 
deseja obter mais informações. Os sistemas convencionais de pesquisa de 
informações normalmente requerem uma abordagem top-down, enquanto o 
QlikView permite que você inicie com qualquer pedaço de dados, indepen-
dentemente de sua localização na estrutura de dados.
Para fazer seleções no QlikView, não são necessários conhecimentos prévios 
das bases de dados ou das rotinas de pesquisa: basta clicar no item que você 
deseja para saber mais sobre ele. O item selecionado fica verde, e o pro-
grama apresenta imediatamente todos os outros itens associados a ele e, 
muito importante, todos os itens que não são associados à seleção.
3
QlikView Developer | 1 INTRODUÇÃO
A plataforma de Business Discovery QlikView contém três componentes 
principais: QlikView Server, QlikView Publisher e QlikView Desktop. O dia-
grama abaixo mostra os componentes da plataforma de Business Discovery 
do QlikView.
Figura 1. Componentes da Plataforma de Business Discovery QlikView
Profissionais de TI: A abordagem do QlikView em relação ao BI propor-
ciona um modelo de autoatendimento para usuários de negócios no front-
end ao mesmo tempo em que mantém uma forte segurança dos dados e 
governança no back-end. Devido a essa abordagem, os profissionais de TI, 
dos arquitetos corporativos aos analistas de dados, podem continuar se 
dedicando às suas principais funções: segurança de dados, provisionamento 
de dados e aplicativos, governança de dados e manutenção de sistemas. Não 
é mais necessário perder tempo escrevendo e reescrevendo relatórios para 
usuários de negócios.
4
QlikView Developer | 1 INTRODUÇÃO
Em uma implantação típica do QlikView, os profissionais de TI se concen-
tram nas seguintes atividades:
• Gerenciamento da segurança do sistema, dos dados e da extração de 
dados.
• Criação e manutenção de arquivos-fonte do QlikView (QVWs e QVDs).
• Controle de atualização de dados e distribuição de aplicativos pelo Qli-
kView Publisher.
• Administração de implantações do QlikView através do QlikView Mana-
gement Console (parte do QVS).
Analista/Desenvolvedor de Negócios: A função de um analista de negócios (BA, 
Business Analyst) ou de um desenvolvedor de business intelligence (BI) em uma 
implantação típica do QlikView envolve principalmente o uso do QlikView 
Desktop. Os desenvolvedores QlikView usam este aplicativo para Windows 
para extrair dados de sistemas fonte, criar modelos de dados, bem como para 
transformar dados. É onde descrevem todos os metadados, criam camadas de 
armazenamento de dados (camadas QVD) e definem a interface do usuário.
O desenvolvedor de BA ou BI também pode reutilizar dados extraídos ou 
pré-modelados da camada QVD, recebendo os dados “diretamente” do 
QVD, quando for importante para o aplicativo.
O desenvolvedor de BA ou BI precisam garantir que os aplicativos de negó-
cios do QlikView usem os dados mais recentes. Do mesmo modo, precisam 
assegurar que os documentos QlikView sejam distribuídos para a comunidade 
certa de usuários de negócios. Por isso, os desenvolvedores de BA e BI traba-
lham em conjunto com os profissionais de TI que usam o QlikView Publisher 
no back-end, a fim de garantir as taxas de atualização de dados, e o QlikView 
Server no front-end, para garantir que os aplicativos sejam distribuídos corre-
tamente e atendam às necessidades comerciais.
Usuário de negócios: Os usuários de negócios interagem com os aplicativos 
QlikView exclusivamente através do front-end de uma implantação, em 
geral, com um navegador no desktop, laptop ou dispositivo móvel (como 
um iPad). Basta que os usuários de negócios abram o portal AccessPoint 
(ou, no caso de soluções integradas, o próprio portal corporativo de sua 
empresa) e selecionem o aplicativo QlikView que desejam usar.
O QlikView Server cuida de todas as comunicações cliente-servidor, sendo o 
mecanismo que orienta a experiência associativa em memória. Depois que 
as credenciais de segurança do usuário são confirmadas, é possível abrir e 
trabalharcom o aplicativo, explorando os dados e interagindo com eles, 
perguntando e respondendo a perguntas em um modo de autoatendimento.
Os usuários também podem colaborar com outros usuários da organização, 
compartilhando insights e explorando dados em conjunto, em tempo real e 
de forma assíncrona.
5
QlikView Developer | 1 INTRODUÇÃO
1.6 Componentes da Plataforma de Business Discovery QlikView
1.6.1 QlikView Personal Edition 
Com o QlikView Personal Edition, você pode usar integralmente as funções 
do QlikView, mas não é possível abrir documentos criados por outros usuá-
rios. Entre em contato com o executivo de vendas da sua conta para obter 
mais informações sobre as licenças do QlikView.
1.6.2 QlikView Desktop 
O QlikView Desktop é um ponto único de interação para a coleta de dados, 
projeção de análises e elaboração de painéis e relatórios. Através da interface 
intuitiva do QlikView Desktop, os desenvolvQlikViewedores criam scripts 
que potencializam a coleta e a transformação de dados provenientes de diver-
sas fontes, colocando-os em um modelo associativo. Os designers escolhem a 
melhor representação visual dos dados a partir de uma ampla variedade de 
opções disponíveis.
O QlikView permite a rápida construção de aplicativos que vai desde sim-
ples descrições de dados com um único gQlikViewráfico até pontos de vista 
seguros, multiabas, multiusuários e multifacetados de uma empresa. A aná-
lise do QlikView pode ser agrupada de acordo com as necessidades do usuá-
rio, tais como: análises profundas, painéis intuitivos e relatórios 
abrangentes.
1.6.3 QlikView Server 
O QlikView Server garante umQlikViewa única versão dos dados em toda a 
organização. Oferece um meio simples para que as organizações garantam 
que todos tenham acesso aos dados e análises mais atuais. O QlikView Ser-
ver proporciona gerenciabilidade corporativa com uma administração pau-
tada em funções, garantindo que apenas aqueles que tiverem permissão para 
usar os dados possam acessá-los. 
O QlikView Server se integra à infraestrutura de segurança existente para 
manter os dados totalmente protegidos. O QlikView Server é compatível 
com os seguintes clientes:
• Cliente Ajax, independente de navegador e de download gratuito
• Cliente Windows instalado
• Plug-in para o Internet Explorer
• Apple iPad e iPhone
• Dispositivos Android
6
QlikView Developer | 1 INTRODUÇÃO
1.6.4 QlikView Publisher
O QlikView Publisher ajuda as empresas a equilibrarem a necessidade de dis-
seminar a distribuição de funcionalidades e relatórios analíticos com a exigên-
cia de manter centralizados a administração e o controle de dados 
corporativos confidenciais.
O QlikView Publisher, módulo opcional do QlikView Server, é uma ferra-
menta de agendamento, administração e gerenciamento que fornece um 
único ponto de controle para análises, aplicativos e relatórios do QlikView. 
Os administradores podem programar, distribuir e gerenciar a segurança e 
o acesso aos aplicativos e relatórios do QlikView em toda a empresa.
1.7 Opções de treinamento do QlikView
O programa de treinamento da QlikView (QlikView Education Services) 
oferece diferentes opções para atender seus requisitos de estilo, orçamento e 
tempo. Há opções de cursos orientados por instrutor, instrutor virtual, sob 
demanda e e-learning.
• Treinamento orientado por instrutor (ILT, Instructor-Led Training): 
O treinamento QlikView é ministrado em todo o mundo por instrutores 
certificado em centros de treinamento de última geração ou no seu local 
de trabalho.
• Treinamento orientado por instrutor virtual (on-line): Treinamento ao 
vivo do QlikView, ministrado virtualmente para qualquer lugar. Sem 
precisar viajar.
• Sob demanda: Instrução autodirigida, como e-learning e webinars.
As aulas são oferecidas no pacote de produtos QlikView e visam atender às 
necessidades de designers, desenvolvedores e administradores do QlikView.
Entre em contato com seu Gerente de Conta QlikView ou com o programa 
de treinamento QlikView Education Services (http://www.qlikview.com/us/
services/training/training-contacts). 
Acesse http://www.qlikview.com/training para obter mais informações sobre 
o programa de treinamento QlikView Education Services.
Parabéns! Você concluiu a Lição 1.
7
QlikView Developer | 2 A METODOLOGIA DE DESENVOLVIMENTO DO QLIKVIEW
2 A METODOLOGIA DE DESENVOLVIMENTO DO QLIKVIEW
Bem-vindo à Lição 2. Nesta lição, você verá por que é importante usar uma 
abordagem sistemática para gerenciar e desenvolver seus projetos do QlikView. 
Isso é feito através do emprego de uma metodologia de gerenciamento de pro-
jetos, documentação de planejamento e listas de verificação.
2.1 Importar/Exportar Layouts de Pasta e Documento como XML
Como parte do ciclo de vida do desenvolvimento do documento QlikView, 
o controle de versão é muito importante para o desenvolvedor QlikView. 
O QlikView pode exportar e importar documentos ou pastas QlikView, com 
exceção dos dados, como um arquivo XML. Poder exportar a estrutura e o 
layout de um arquivo QlikView para um arquivo baseado em texto possibi-
lita um melhor controle de versões. Este recurso é de extrema importância 
para o desenvolvedor QlikView, já que o arquivo QVW tem um formato 
que não pode ser usado para acompanhar quais objetos ou linhas específicas 
do script sofreram alterações. Uma ferramenta de controle de alterações 
considera o arquivo QVW como um componente. 
2.1.1 Por que isso é importante?
Esse recurso pode ser utilizado para facilitar o uso de software de controle 
de versão de terceiros com arquivos QVW, eliminando a necessidade de veri-
ficar conjuntos de dados muito grandes e ampliando as possibilidades de 
desenvolvimento em implantações QlikView de grande porte.
2.2 Plano de projeto
Neste curso, falaremos sobre o Plano de Projeto de Business Intelligence (BI) 
do QWT, um exemplo de um plano de projeto que você pode receber no seu 
ambiente de trabalho normal. Sua finalidade não é ser um plano totalmente 
configurado com gráficos de tempo, responsabilidades etc. Ele é projetado 
para fornecer um objetivo geral para alguns dos exercícios que serão realiza-
Objetivos
• Identificar a importância da Importação/Exportação de Documento/
Pasta XML 
• Explicar a importância de usar uma abordagem sistemática para 
desenvolver documentos QlikView
• Definir a metodologia de projetos do QlikView (QPM, QlikView 
Project Methodology)
9
QlikView Developer | 2 A METODOLOGIA DE DESENVOLVIMENTO DO QLIKVIEW
dos durante o curso. O plano de projeto será usado como um guia para o 
desenvolvimento do script de carga necessário para o documento QlikView 
resultante. O plano de projeto está disponível no material do curso com o 
nome QWT BusinessIntelligencePlan.pdf. 
2.3 Revisão do Plano de Projeto
O Plano de Projeto de BI do QWT tem as seguintes seções:
Medidas Principais: Inclui as expressões e cálculos necessários para montar 
um documento QlikView. Essas medidas principais serão usadas no script de 
carga e nos objetos de pasta.
KPIs (Indicadores-Chave de Desempenho): KPIs de nível superior que podem 
ser exibidos em uma perspectiva de painéis no documento QlikView.
Dimensões Principais: Uma lista de algumas das principais dimensões que 
serão usadas em todo o documento.
Tendências: Uma lista de campos de dimensão de tempo importantes neces-
sários para analisar tendências ao longo do tempo.
Filtros de Seleção Principais: Uma lista dos campos obrigatórios no docu-
mento QlikView para seleção e filtragem de dados.
Segurança: Contém os requisitos de acesso seguro para o documento QlikView.
Descrições de Dados de Origem: Fornece os locais de dados de origem e des-
crições de nível de campo de cada uma das fontes de dados.
Cada uma dessas seções também pode incluir regras de negócios para ajudar 
o desenvolvedor do documento a identificar e disponibilizar os recursos e a 
funcionalidades apropriados para os usuários de negócios deste documento 
QlikView.
2.4 Metodologia de Projetos do QlikView (QPM)
O planode projeto usado neste curso é um exemplo de uma abordagem siste-
mática que pode ser aplicada no gerenciamento de projetos do QlikView. A 
metodologia de gerenciamento de projetos do QlikView é chamada de QPM. 
Ela abrange funções e responsabilidades, fases do projeto, listas de verificação 
e etapas que são usados por consultores dos Serviços Profissionais QlikView. 
A metodologia QPM tem cinco fases:
• Estudo prévio
• Planejamento
• Execução
• Implementação
• Conclusão
10
QlikView Developer | 2 A METODOLOGIA DE DESENVOLVIMENTO DO QLIKVIEW
O processo de QPM resume-se em seguir todas as fases do projeto, do Início 
(Estudo prévio) ao Fim (Conclusão). Esse processo descreve o fluxo normal 
e as tarefas que ocorrem em um projeto padrão. A metodologia QPM é apli-
cada em projetos do QlikView que atendem a pelo menos um dos seguintes 
critérios:
• Mais de 100 Usuários do QlikView
• Mais de 6 pessoas envolvidas no projeto
• O QlikView será implantado em mais de um local
• O tempo do projeto é maior que 4 semanas
A abordagem sistemática da QPM também pode ser usada em projetos 
QlikView de menor porte. A principal vantagem de uso da QPM é medida 
em termos de economia de tempo e aceitação do usuário. 
Parabéns por ter concluído a Lição 2. Na próxima lição, veremos as opções 
de implantação do QlikView.
11
QlikView Developer | 3 IMPLANTAÇÃO
3 IMPLANTAÇÃO
Bem-vindo à Lição 3. A plataforma de Business Discovery QlikView contém 
três componentes principais: QlikView Desktop, QlikView Server (QVS) e 
QlikView Publisher. Cada um deles tem um papel importante na criação do 
design, no desenvolvimento e na implementação de quase todas as implanta-
ções do QlikView. Nesta lição, teremos uma visão geral desses componentes 
e conceitos.
3.1 QlikView Desktop, Server e Publisher
Vejamos os três principais componentes do QlikView – Desktop, Server e 
Publisher:
3.1.1 QlikView Desktop
Uma ferramenta de computador baseada no Windows usada por designers 
e desenvolvedores para:
• Criar um modelo de extração e transformação de dados
• Criar interface gráfica de usuário (GUI)
• Criar análises
O QlikView Desktop também é o ambiente onde todo o design de experiên-
cia e a interface do usuário são desenvolvidos.
3.1.2 QlikView Server (QVS)
É o produto corporativo que contém o mecanismo de análise em memória. 
O QlikView Server cuida de todas as comunicações cliente-servidor entre um 
cliente QlikView (por exemplo: Desktop, plug-in do IE, AJAX) e o servidor.
Objetivos
• Definir as opções de implantação do QlikView
• Identificar os benefícios funcionais e comerciais de cada opção de 
implantação
13
QlikView Developer | 3 IMPLANTAÇÃO
3.1.3 QlikView Publisher 
É um produto de servidor que tem duas funções principais:
• Carregar dados diretamente a partir de fontes de dados definidas por 
cadeias de conexão nos arquivos-fonte QVW.
• Garantir que os dados e os arquivos QVW corretos sejam distribuídos 
aos devidos usuários de negócios, de acordo com um cronograma prede-
finido.
3.2 Exemplos de implantações
O QlikView pode ser implantado em três configurações:
• QlikView Standalone
• QlikView Server
• QlikView Server Publisher
Independentemente da configuração, o objetivo de qualquer implantação 
QlikView deve ser que os usuários de negócios consigam ter acesso rápido 
às informações certas a fim de tomarem as melhores decisões na rotina de 
trabalho.
3.2.1 QlikView Standalone
A configuração autônoma é uma instalação de computador do QlikView tal 
qual a Personal Edition.
Por que usar o QlikView Standalone?
• Fácil configuração
• Fácil acesso para um único designer/desenvolvedor QlikView
• Baixo custo/grátis (Personal Edition)
14
QlikView Developer | 3 IMPLANTAÇÃO
3.2.2 QlikView Server
Com o QlikView Server, o usuário de negócios é primeiro identificado ao 
fazer o login no AccessPoint (portal da Web do QlikView), obtendo sua pró-
pria sessão de um documento depois da autorização ter sido confirmada. 
O servidor cuida do processo de atualização (recarregamento) dos dados. 
O QlikView Server não só controla a atualização/recarregamento de dados, 
como também permite que vários usuários de negócios acessem simultanea-
mente QlikViews sem causar interferências entre si.
Os administradores do QlikView Server usam o QlikView Management 
Console para controlar e configurar o ambiente.
Por que usar o QlikView Server?
• Business Discovery social usando ferramentas de colaboratividade
• Gerencia o processo de recarregamento de dados
• Vários usuários podem trabalhar ao mesmo tempo, sem interferência 
entre si
• Solução escalonável
• Colaboração no servidor (os usuários podem compartilhar objetos)
• Único ponto de entrada para todos os documentos através do AccessPoint
• Segurança
15
QlikView Developer | 3 IMPLANTAÇÃO
3.2.3 QlikView Server Publisher
O QlikView Publisher pode reduzir os dados com base em um relacionamento 
entre o usuário e o modelo de dados em um documento QlikView, bem como 
através de outros meios, aumentando assim as possibilidades de apresentar a 
informação certa para o usuário de negócios certo.
Por que usar o QlikView Server Publisher?
• Apresentação dinâmica de QlikViews para usuários de negócios
• Aumenta as possibilidades de segurança com diferentes tipos de redução 
de dados
• Escalabilidade corporativa
Obtenha mais informações sobre opções de implantação na Biblioteca de 
Recursos QlikView: http://www.qlikview.com/us/explore/resources e acesse 
o Centro de Treinamento QlikView em http://www.qlikview.com/training 
para obter informações sobre cursos do Server Publisher.
Parabéns por ter concluído a Lição 3. Na próxima lição, trataremos de dados 
e scripts.
16
QlikView Developer | 4 INTRODUÇÃO AOS DADOS E SCRIPTS
4 INTRODUÇÃO AOS DADOS E SCRIPTS
Bem-vindo à Lição 4. Esta lição apresenta uma introdução aos fundamentos 
básicos de estruturas de dados, bases de dados e scripts no QlikView. 
4.1 Sistema de gerenciamento de base de dados relacional (RDBMS)
Uma base de dados relacional combina dados usando características comuns 
encontradas em um conjunto de dados. Conjuntos de dados são uma cole-
ção de dados, geralmente apresentados em tabelas. Exemplos de bases de 
dados relacionais são MySQL, Microsoft SQL Server, Microsoft Access, 
Oracle, DB2, Sybase, Informix e Teradata.
Uma base de dados relacional é definida por diversas regras:
• A base de dados é estruturada de forma que as informações se relacio-
nem entre várias tabelas que consistem em linhas e colunas.
 
• A base de dados deve oferecer suporte a uma linguagem de consulta. 
Objetivos
• Descrever um sistema de gerenciamento de bases de dados 
• Descrever estruturas de dados
• Examinar a base de dados QWT.mdb usada neste curso
• Usar o Editor de Scripts do QlikView
Figura 1. Estrutura da base de dados relacional: Cada Tabela A consiste em 
linhas de dados organizadas pela Coluna B e vinculadas pelos Campos-
chave C.
17
QlikView Developer | 4 INTRODUÇÃO AOS DADOS E SCRIPTS
A linguagem de consulta de base de dados mais comumente usada é a SQL 
(Linguagem de Consulta Estruturada). A SQL é usada para consultar, definir 
e manipular os dados. 
Um comando que é geralmente usado em SQL é a consulta ou o comando 
SELECT. Um comando pode ser visto como o menor elemento autônomo de 
uma linguagem de programação. Um programa é formado por uma sequên-
cia de um ou mais comandos. 
O comando SELECT retorna um conjunto de resultados de registros de uma 
ou mais tabelas. O conjunto de resultados é um conjunto de linhas de uma 
base de dados. 
Os seguintes comandos de exemplo retornam linhas de dados referentes aos 
valores selecionados e filtrados.
SELECT *
FROM Products
WHERE ProductID = 1004005
SELECT ProductName, CategoryID, QuantityPerUnit, Unit-
Price
FROM Products
WHERE ProductID = 1004005 OR 
ProductID = 1005006
Figura 2. Exemplos de consulta de uma base de dados relacional
4.2 Estruturas de Dados
Uma estrutura de dados é um formato especializado para organização e 
armazenamentode dados. Muitos formatos de arquivo podem ser usados 
no QlikView:
• Arquivos de texto delimitado por vírgulas
• Planilhas do Microsoft Excel
• Arquivos XML
• Tabelas HTML
• Arquivos QVD (Arquivos de Dados QlikView)
• Tabelas SQL
18
QlikView Developer | 4 INTRODUÇÃO AOS DADOS E SCRIPTS
O ideal é que a primeira linha de um arquivo de texto contenha informações 
de cabeçalho que identifiquem os valores contidos nas linhas abaixo. Nor-
malmente, os campos ou valores no arquivo são separados por caracteres, 
geralmente vírgulas, tabulações ou um ponto-e-vírgula. Um arquivo de texto 
estruturado é equivalente a uma tabela com colunas e linhas quando lido no 
QlikView. 
Veja abaixo um exemplo de um arquivo de texto delimitado por vírgulas:
Customer ID,Customer,Address,City,Zip,Country
1002,Adder Inc.,“9, rue de la Poste”,Montreal,,Canada
1004,Alf Jequitaine,Rue de Gaulle 13,Paris,75664,France
1010,Atlantic Marketing, Bahnhof Strasse 3,Berlin,749 
33,Germany
1017,Barley Foods,2 Atlanta Road, Washington 
D.C.,3582-2134,U.S.A.
1023,Bearings Bank Ltd., “88, Chamberlain Square”, 
Manchester, Great Britain
Figura 3. Exemplo de arquivo de texto delimitado por vírgulas
O QlikView interpreta os dados em arquivos do Excel padrão por meio do 
formato biff (Binary Interchange File Format). Para ler um arquivo Excel no 
QlikView, é necessário algum tipo de estrutura de tabela no arquivo Excel 
(colunas e linhas). O QlikView considera cada planilha de Excel como uma 
tabela. No entanto, é possível ler várias tabelas a partir de uma única plani-
lha de Excel.
O QlikView também lê arquivos do Excel 2007 (.xlsx). Veja abaixo um exem-
plo de um arquivo de texto do Microsoft Excel com uma linha de cabeçalho:
Figura 4. Arquivo de dados do Excel
CustID Customer Address City Zip Country
1002 Adder Inc. 9, rue de la Poste Montreal Canada
1004 Alf Jequitaine Rue de Gaulle 13 Paris 75664 France
1010 Atlantic Marketing Bahnhof Strasse 3 Berlin 749 33 Germany
1017 Barley Foods 2 Atlanta Road Washington D.C. 35822 U.S.A.
1023 Bearings Bank Ltd. 88, Chamberlain 
Square
Manchester Great Britain
1027 Captain Cook's Surfing 
School
Westkapelseweg 5 Arnhem Netherlands
1057 Elektrolumen Bergmansgatan 7 Malmoe Sweden
19
QlikView Developer | 4 INTRODUÇÃO AOS DADOS E SCRIPTS
4.3 Assistente para Arquivos de Tabelas
O Assistente para Arquivos de Tabelas do QlikView analisa o conteúdo de 
um arquivo e ajuda você a criar um script. Por exemplo, o assistente anali-
sará um arquivo XML e poderá gerar vários comandos Load, um para cada 
tabela encontrada. O Assistente para Arquivos de Tabelas é compatível com 
os seguintes formatos: texto, CSV, Excel, QVD, QVX, HTML e XML.
Veja abaixo um exemplo de um arquivo de dados XML:
<?xml version="1.0" encoding="UTF-8" standalone="yes" ?> 
- <TableBox>
- <_empty_>
<Customer_x0020_ID>1002</Customer_x0020_ID> 
<Customer>Adder Inc.</Customer> 
<Country>Canada</Country> 
<Address>9, rue de la Poste</Address> 
<City>Montreal</City> 
</_empty_>
- <_empty_>
<Customer_x0020_ID>1004</Customer_x0020_ID> 
<Customer>Alf Jequitaine</Customer> 
<Country>France</Country> 
<Address>Rue de Gaulle 13</Address> 
<City>Paris</City> 
</_empty_>
</TableBox>
Figura 5. Arquivo de dados XML
4.4 Arquivos QVD do QlikView
Um arquivo QVD (Dados do QlikView) é um arquivo que contém uma 
tabela de dados exportada do QlikView. O QVD é um formato nativo do 
QlikView Só pode ser gravado e lido no QlikView. O formato de arquivo é 
otimizado para agilizar a leitura de dados de um script do QlikView, mas 
também é bastante 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.
20
QlikView Developer | 4 INTRODUÇÃO AOS DADOS E SCRIPTS
4.5 O formato de arquivo QVD
O arquivo QVD é uma tentativa de selar o compromisso do desempenho 
ideal do QlikView na leitura e gravação de arquivos e na representação com-
pacta. Um arquivo QVD contém exatamente uma tabela. Em termos concei-
tuais, é muito semelhante a qualquer arquivo de tipo csv, dif, biff ou fix, e 
consiste em três partes:
• Um cabeçalho XML composto de modo apropriado (com o conjunto de 
caracteres UTF-8), que descreve os campos da tabela, o layout das infor-
mações subsequentes e alguns outros metadados
• Tabelas de símbolos em um formato com bytes
• Dados da tabela em um formato com bits
4.6 Qual é a utilidade dos arquivos QVD?
Os arquivos QVD podem ser usados para vários fins. Pelo menos quatro 
usos principais podem ser facilmente identificados. Em muitos casos, dois 
ou mais usos serão aplicáveis ao mesmo tempo. São eles:
• Aumento da velocidade de carga 
• Diminuição da carga nos servidores de base de dados 
• Consolidação de dados de vários aplicativos QlikView 
• Carga incremental 
Veremos esses itens em mais detalhes na Lição 13. 
4.7 Comparação de Estruturas de Bases de Dados com Estruturas de 
Dados do QlikView
Vejamos a diferença entre uma estrutura de dados de uma base de dados em 
Access e uma estrutura de dados do QlikView. O exemplo abaixo mostra 
uma estrutura de dados extraída da base de dados do Access com a qual tra-
balharemos no curso. A figura mostra oito tabelas que têm relacionamentos 
definidos e estão associadas por meio de campos-chave comuns. Um campo-
chave é uma ou várias colunas de uma base de dados que identificam de 
forma única uma entrada ou um registro específico. 
21
QlikView Developer | 4 INTRODUÇÃO AOS DADOS E SCRIPTS
O QlikView permite ao desenvolvedor definir implicitamente os relaciona-
mentos ou junções entre tabelas, mesmo que os campos não tenham o mesmo 
nome ou tipo na origem. O QlikView define automaticamente relacionamen-
tos ou associações entre tabelas por meio de campos com nomes semelhantes. 
Neste exemplo, todos os campos-chave têm exatamente o mesmo nome em 
suas respectivas tabelas. 
Não é comum que, em uma base de dados, todos os campos-chave tenham o 
mesmo nome. Por isso, veremos métodos básicos para criar as devidas asso-
ciações entre tabelas no QlikView, e como evitar associações indesejadas 
entre tabelas no QlikView com base em campos com nomes semelhantes. 
Por exemplo, você não desejaria vincular o campo “Address” (Endereço) 
de uma tabela “Supplier” (Fornecedor) com o campo “Address” da tabela 
“Customer” (Cliente).
A ilustração a seguir é um exemplo de um esquema de estrutura de dados 
que pode ser visto no QlikView. O campo EmployeeID vincula as tabelas 
Employee, SalesPersons e Employee_Mail à tabela Orders. Se você seguir as 
linhas, verá os campos que vinculam toda a estrutura. Se dois registros em 
tabelas diferentes tiverem o mesmo nome em qualquer dos campos vincula-
dos, eles serão associados.
Figura 6. Estrutura da tabela da base de dados relacional
22
QlikView Developer | 4 INTRODUÇÃO AOS DADOS E SCRIPTS
 
4.8 Estruturas de Dados no QlikView
Cada campo de uma tabela de dados carregada no QlikView se torna um 
campo na estrutura de dados associativa do QlikView. Os campos que apare-
cem em mais de uma tabela e têm nomes idênticos serão associados e identifi-
cados como campos-chave. Os campos-chave vinculam tabelas. No QlikView, 
cada campo pode ser apresentado na forma de lista. Quando você faz uma 
seleção em uma lista (clicar em um ou mais valores), o QlikView apresenta 
imediatamente as conexões lógicas baseadas na estrutura de dados interna, 
sendo identificados os valores associados com a sua seleção. A figura a seguir 
ilustra como o QlikView exibe valores de campos associados quando um 
valor OrderDate específico é selecionado.
Figura 7. Um exemplo de estrutura de dados do QlikView
Figura 8. Associações de dados do QlikView
23
QlikView Developer | 4 INTRODUÇÃO AOS DADOS E SCRIPTS
4.9 Arquivos de Fonte de Dados 
Na primeira parte do curso, carregaremos dados de acordo com o docu-
mento do nosso plano de projeto. Os dados principais estão em uma base de 
dados do Access denominada QWT.mdb As fontes de dados são conectadas 
logicamente por campos comuns(campos-chave). No caso das tabelas que 
contêm informações sobre os funcionários e os pedidos da empresa, existem 
os campos EmployeeID e EmpID em comum. Contudo, um dos campos pre-
cisa ser renomeado para que o QlikView os associe no nosso documento. 
Também temos o campo SupplierID, que é um campo comum da base de 
dados QWT e da tabela que contém dados dos fornecedores (que se encon-
tra em um arquivo XML). Você também pode observar que existem campos 
com nomes idênticos em tabelas que não queremos associar, como Address 
nas tabelas Customers e Suppliers. Esses campos também deverão ser reno-
meados para evitar uma associação não intencional do QlikView.
4.10 Fonte de Dados Principal do QWT
De acordo com o nosso plano de projeto, a base de dados QWT.mdb con-
tém as tabelas Customers, Divisions, Shippers, Shipments, Products, Catego-
ries, Orders e Order Details. Essas tabelas serão carregadas mas, primeiro, 
precisamos criar uma conexão com a base de dados. É possível conectar-se a 
uma base de dados por meio de uma conexão ODBC ou OLE DB. Em geral, 
se houver uma conexão OLE DB disponível, ela deverá ser usada. Neste 
material de treinamento, será usada uma conexão OLE DB com a base de 
dados do Access.
4.11 Arquivos de Dados Secundários do QWT
Além da base de dados principal, nosso plano de projeto também exige a 
extração de dados das seguintes fontes de dados:
Arquivos Excel
• EmpOff.xls
Arquivos XML
• Suppliers.xml
4.12 Introdução aos Scripts
Um script de computador é uma lista de comandos (pense em uma lista de ins-
truções) que são executados pelo programa ou pelo mecanismo de script. Para 
carregar dados no QlikView, o desenvolvedor cria instruções para a recupera-
ção e o tratamento de dados. Essas instruções são gravadas em um script de 
carga criado e mantido no QlikView. 
24
QlikView Developer | 4 INTRODUÇÃO AOS DADOS E SCRIPTS
O script pode especificar instruções de como o QlikView deve interpretar 
diferentes conjuntos de dados. O QlikView pode carregar e interpretar os 
seguintes tipos de dados:
• O resultado de uma consulta de base de dados feita pelo SQL via OLE 
DB/ODBC.
• Qualquer tipo de arquivo de texto delimitado por caracteres, como 
arquivos separados por vírgulas
• Arquivos com formato de posição do valor de campo fixo
• Formato de arquivos em Excel (.xls /. xlsx)
• Tabelas XML
• Tabelas HTML
• Arquivos QVD (QlikView Data)
• Arquivos do QlikView criados anteriormente (também chamados de 
Carga binária)
• Fontes de dados personalizadas (por exemplo, serviços da Web) através 
de uma interface .dll
• QVX (QlikView Data Exchange)
4.13 Caixa de Diálogo Editar Script
A caixa de diálogo Editar Script é usada para gerar, inserir e editar coman-
dos de script de carga do QlikView. Vamos examiná-la:
Siga os seguintes passos para acessar a caixa de diálogo Editar Script:
1 Abra o QlikView.
2 No menu Arquivo, selecione Novo.
3 Clique em Cancelar. Assim, o assistente de Inicialização é suprimido.
4 Salve seu arquivo. Dê ao arquivo um nome fácil de lembrar, como 
QVDeveloper_Exercises.qvw. Observe que o arquivo 
QVDeveloper_Solution.qvw, com todos os exercícios feitos, está no 
material do curso.
5 No menu Arquivo, selecione Editar Script ou clique no ícone 
A caixa de diálogo Editar Script é exibida. A parte principal da janela do 
editor de scripts tem um espaço para o seu script. 
25
QlikView Developer | 4 INTRODUÇÃO AOS DADOS E SCRIPTS
DICA: Para obter uma descrição completa de todas as caixas de diálogo e 
configurações atuais disponíveis na caixa de diálogo Editar Script, con-
sulte o documento ReferenceManual.pdf. Normalmente, esse documento 
de referência é instalado durante a instalação “Completa” do QlikView 
e colocado em C:\ProgramData\QlikTech\QlikView Documentation
26
QlikView Developer | 4 INTRODUÇÃO AOS DADOS E SCRIPTS
4.13.1 Barra de Ferramentas Editar Script
A barra de ferramentas contém os seguintes controles:
 Executar Script
Executa o script.
 Depurar
Inicia a execução do script no Depurador. O depurador procura 
erros no script. É possível monitorar cada comando de script e exa-
minar os valores das variáveis durante a execução do script.
Salvar Todo o Documento 
Salva o documento .qvw ativo em um arquivo. Os dados, o script e 
o layout são salvos.
Imprimir Aba
Permite imprimir o conteúdo da aba ativa no momento.
Recortar
Recorta o texto do script selecionado e o armazena na Área de 
Transferência. 
Copiar
Copia o texto do script selecionado.
Colar
Cola o texto do script armazenado na Área de Transferência.
Pesquisar
Pesquisa no script os caracteres de texto especificados, somente na 
aba atual.
Incluir Nova Aba 
Inclui uma nova aba de script. O script é executado aba por aba, da 
esquerda para a direita.
Promover/Rebaixar Aba 
Promove ou rebaixa a aba de um script.
Visualizador de Tabelas 
Exibe o visualizador de tabelas gráficas dos dados atuais.
Verificação da sintaxe 
Faz o cursor saltar para o próximo erro potencial de script.
Também existem outros comandos úteis nas listas suspensas do menu na 
parte superior da caixa de diálogo.
27
QlikView Developer | 4 INTRODUÇÃO AOS DADOS E SCRIPTS
4.13.2 Comandos do Menu Editar Script
No menu ARQUIVO, você encontrará a opção para exportar o script como 
um arquivo de script (com a extensão .qvs) ou imprimir os comandos de 
script. Se for necessário trabalhar com um script oculto, ele poderá ser 
exposto nesse menu.
O menu EDITAR compreende todos os comandos necessários para editar o 
conteúdo do painel de edição de texto. Além dos comandos para selecionar, 
copiar, recortar e colar texto, você encontrará a função Localizar/Substi-
tuir, que permite pesquisar caracteres específicos de texto. Esse menu tam-
bém pode ser usado para comentar partes do script.
Da mesma forma que em outros aplicativos padrão do Windows, vários desses 
comandos podem ser executados por meio de atalhos de teclado (por exemplo, 
CTRL+A seleciona todo o texto).
O menu Inserir contém comandos para incorporar itens ao script de carga, 
como comandos Set, variáveis de ambientes, arquivos de script, comandos 
Include, IDs de segurança de domínio (SIDs), scripts de teste, comandos Load 
e Select, seção de acesso e comandos Connect e Disconnect. 
O menu ABA contém os comandos necessários para gerenciar as abas do 
script.
O menu FERRAMENTAS inclui o comando Preferências do Editor, que 
abre a aba Editor da caixa de diálogo Preferências do Usuário, na qual 
você pode definir o tipo e a cor da fonte dos diversos tipos de texto do 
script.
Os comandos do menu AJUDA abrem os arquivos de Ajuda do QlikView. 
Para obter mais informações sobre a caixa de diálogo Editar Script, con-
sulte a Ajuda imediatamente.
4.13.3 Painel de Ferramentas da caixa Editar Script
O Painel de Ferramentas tem quatro páginas com abas que contêm fun-
ções para a geração de scripts: Dados, Funções, Variáveis e Configuração.
4.13.4 Aba Dados
Na aba Dados, existem três seções de agrupamento que fornecem o controle 
e a funcionalidade para trazer dados para o documento QlikView. Cada um 
desses três agrupamentos são definidos detalhadamente a seguir.
28
QlikView Developer | 4 INTRODUÇÃO AOS DADOS E SCRIPTS
 
Agrupamento de base de dados
Os comandos do grupo Base de Dados são usados para criar uma conexão 
com uma base de dados e selecionar campos de uma fonte de dados. Se esti-
ver usando um sistema de gerenciamento de banco de dados comercial, 
poderá usar o ODBC ou o OLE DB como interface entre o QlikView e a 
base de dados. 
OLE DB (Object Linking and Embedding Database) Sele-
cione esta alternativa para acessar bases de dados 
através do OLE DB. (Selecionado na lista sus-
pensa.)
ODBC (Open Database Connectivity) Selecione esta 
alternativa se desejar acessar bases de dados atra-
vés de um driver ODBC. (Selecionado na lista sus-
pensa.)
Forçar 32 Bits força o comando Connect ODBC/OLEDB em um 
provedor de 32 bits.
Conectar… Use este botão para abrir a caixa de diálogo Pro-
priedades do Link de Dados e selecionaruma 
fonte de dados OLE DB ou ODBC, e gerar o 
comando connect apropriado no script de carga.
Selecionar… Depois de ter estabelecido a conexão de dados, 
clique nesse botão para abrir a caixa de diálogo 
Criar Comando Select. Em seguida, você poderá 
especificar campos e tabelas a partir da fonte de 
dados escolhida, e gerar o comando Select apro-
priado no script de carga.
Figura 9. A aba Dados
29
QlikView Developer | 4 INTRODUÇÃO AOS DADOS E SCRIPTS
Agrupamento Dados de Arquivos
Os comandos no grupo Dados de Arquivos são usados para gerar os 
comandos de script LOAD para ler dados de arquivos.
Caminhos Relativos Habilite esta opção se o local dos dados for 
relativo a ou estiver no mesmo caminho do 
diretório de trabalho atual. Caso contrário, 
será usado como padrão o local absoluto ou 
o caminho alternativo para comandos gera-
dos no script.
Usar FTP Marque esta caixa de seleção para poder 
selecionar arquivos de um servidor de arqui-
vos FTP ao solicitar Arquivos de Tabela, 
Arquivos do QlikView ou comandos de 
script Include.
Arquivos de Tabela… Aciona a caixa de diálogo Abrir Arquivos 
Locais , que lista vários formatos de arquivo 
de texto, incluindo arquivos Microsoft Excel 
(.xls, xlsx) e QVD (.qvd). Selecionar um ou 
vários arquivos e pressionar OK gerará um 
ou vários comandos LOAD de acordo com 
as opções selecionadas no assistente.
Arquivo QlikView… Clique nesse botão para abrir a caixa de diá-
logo Abrir Arquivo QlikView, que lista os 
arquivos QlikView (*.qvw). Ao selecionar 
um arquivo e pressionar OK, será gerado um 
comando binary. É permitido apenas um 
comando binary em um script de carga do 
QlikView, e ele deve ser o primeiro comando 
no script de carga.
Arquivos Web… Abre a caixa de diálogo Assistente para 
Arquivos de Tabelas: Fonte para inserir um 
URL como fonte de sua tabela de dados.
Dados do Campo… Abre o Assistente de Arquivo na página 
Fonte, no qual é possível carregar o conte-
údo de um arquivo já carregado.
30
QlikView Developer | 4 INTRODUÇÃO AOS DADOS E SCRIPTS
4.13.5 Dados Personalizados
O QlikView oferece uma interface que permite programar interfaces perso-
nalizadas para ler vários tipos de fontes de dados. O caso típico é de dados 
disponíveis através de serviços da Web ou de aplicativos de software “desen-
volvidos internamente” específicos do setor. Esse plug-in é programado de 
acordo com especificações como código aberto e compilado como um dll. 
(O código de modelo será fornecido sob pedido da QlikTech.) O arquivo dll 
é então colocado no mesmo diretório que QV.EXE e aparecerá na caixa dro-
pdown para seleção.
4.13.6 Aba Funções
Os comandos nessa aba são usados para gerar as funções do QlikView a 
serem usadas nos comandos de script. Segue uma descrição de uso de cada 
recurso nessa aba.
Categoria da 
Função Lista as categorias nas quais as funções estão agrupa-
das, como Data e Hora, Caractere etc. Selecione uma 
categoria na lista para ver as funções correspondentes 
na lista suspensa Nome da Função abaixo.
Nome da 
Função Contém uma lista de funções de script padrão do 
QlikView. A lista pode ser reduzida selecionando 
primeiro uma categoria na lista Categoria da Função 
acima.
Figura 10. Dados Personalizados
Figura 11. A aba Funções
31
QlikView Developer | 4 INTRODUÇÃO AOS DADOS E SCRIPTS
Colar Clique nesse botão depois de selecionar a função 
desejada. A função será inserida na posição atual 
do cursor no script, na janela da caixa de diálogo 
do script.
4.13.7 Aba Variáveis
A aba Variáveis apresenta controles para colar a sintaxe relativa às variáveis 
do QlikView.
4.13.8 Aba Configuração
A aba Configuração contém dois agrupamentos, Privilégios do Script e 
Configuração, que são usados para conceder determinados direitos e confi-
gurações no script de carga.
Agrupamento Privilégios do Script
Permite ao script Abrir Bases de Dados em modo de Leitura e Gravação 
e/ou Executar Programas Externos. Como essas opções podem ter conse-
quências graves, o QlikView acrescentou uma proteção. Se o seu script con-
tiver algum desses elementos e você não tiver habilitado essas configurações, 
os comandos correspondentes falharão. A configuração padrão do Qli-
kView é não permitir o Modo de gravação e não Executar programas exter-
nos. 
Depois de habilitar o uso de um ou dos dois recursos, será solicitado que o 
usuário aprove o script da primeira vez que ele for executado em um com-
putador. Essa verificação pode ser substituída pelo switch de linha de 
comando / nosecurity ou através de uma configuração na página Segurança 
das Preferências do Usuário.
Figura 12. A guia Configuração
Aviso! Tenha bastante cuidado ao usar qualquer dessas opções. Em geral, 
não é possível desfazer a alteração da fonte de dados ou a execução de 
programas inseguros, e os danos podem ser irreversíveis.
32
QlikView Developer | 4 INTRODUÇÃO AOS DADOS E SCRIPTS
Agrupamento Configuração
A opção Encriptar as Credenciais de Conexão do Usuário embaralha o 
usuário e a senha da base de dados nos comandos connect do seu script. 
É recomendável usar esse recurso, que deve ser desabilitado somente na rara 
situação de ser necessário ver erros de script no login da base de dados ou 
em situações semelhantes.
Parabéns por ter concluído a Lição 4. Na próxima lição, veremos a sintaxe 
básica de scripts.
33
QlikView Developer | 5 SINTAXE BÁSICA DO SCRIPT
5 SINTAXE BÁSICA DO SCRIPT
Bem-vindo à Lição 5. Esta lição introduz a capacidade de conectar-se a fon-
tes de dados externas através de conexões ODBC ou OLE DB e dos coman-
dos comuns Connect, Select e Load. 
5.1 Sintaxe
Nesta lição, abordaremos os comandos mais comuns (CONNECT, SELECT, 
LOAD) no script para identificar e carregar dados no QlikView. Cada um 
desses comandos pode ser gerado usando assistentes. Isso será praticado nas 
seções seguintes. No entanto, primeiro vamos examinar alguns exemplos 
desses comandos, como e onde eles podem ser usados em um script de carga 
do QlikView.
5.1.1 Comando Connect
O comando CONNECT é usado para estabelecer uma conexão com uma 
base de dados através de uma interface ODBC ou OLE DB. 
Quando essa conexão for estabelecida, ela será usada até que o comando 
CONNECT seja definido novamente. É possível definir vários comandos 
CONNECT em um script de carga do QlikView, mas apenas uma conexão 
de base de dados pode ser aberta em qualquer momento.
Se o comando CONNECT for gerado pelo assistente fornecido, qualquer ID 
de usuário e senha existentes serão gerados com a sintaxe encriptada xuserid / 
xpassword.
Se ODBC estiver antes de CONNECT, a interface ODBC será usada; caso 
contrário, OLE DB será usado por padrão.
Objetivos
• Identificar a sintaxe comum do QlikView
• Diferenciar os comandos Connect, Select e Load 
• Criar um comando Connect funcional
Observação: Siga os passos abaixo para habilitar esta funcionalidade:
1 No menu Configurações, selecione Propriedades do Documento.
2 Na aba Geral, selecione Encriptar as Credenciais de Conexão do Usuário.
3 Clique no botão OK. 
35
QlikView Developer | 5 SINTAXE BÁSICA DO SCRIPT
Quatro exemplos de comandos CONNECT:
Exemplo 1
ODBC CONNECT to [SQLDATA;database=SQL1] (UserId is 
sa, Password is admin);
Exemplo 2
ODBC CONNECT TO [MS Access 
Database;DBQ=data\sampledata.mdb ];
Exemplo 3
ODBC CONNECT to 
[COSQL01;DATABASE=SALESDATA;Trusted_Connection=Yes];
Exemplo 4
OLEDB CONNECT32 TO 
[Provider=Microsoft.Jet.OLEDB.4.0;User ID=Admin;Data 
Source=Datasources\`WT.mdb] 
A fonte de dados especificada por esse último comando CONNECT é usada 
por todos os comandos SELECT subsequentes, até que seja encontrado um 
novo comando CONNECT.
5.1.2 Comando Select
O comando SQL SELECT é usado para identificar os campos e as tabelas 
que devem ser carregados a partir da conexão da base de dados atual. 
Um exemplo de dois comandos SELECT:
Exemplo 1
SQL SELECT * FROM FACILITIES;
Exemplo 2
SQL SELECT DISTINCT
I.AddressID,
Name,
Address,
36
QlikView Developer | 5 SINTAXE BÁSICA DO SCRIPT
PostalCodeFROM [Invoice] I, [Address] A
WHERE I.InvoiceType is not null and
I.InvoiceDate >= '2008-01-01' and
I.AddressID = A.AddressID;
É possível usar qualquer comando SELECT válido, mas lembre-se de que os 
drivers ODBC e OLE DB podem impor limitações em relação à sintaxe acei-
tável para uma determinada conexão de base de dados. 
Limitações de ODBC:
Segue uma listagem parcial das limitações impostas pelos drivers ODBC:
• Não é possível usar funções do QlikView nos comandos SELECT.
• Podem ocorrer divergências em relação à Sintaxe SQL. Já que comando 
SELECT é interpretado pelo driver ODBC selecionado, provavelmente a 
sintaxe vai variar de acordo com cada conexão ODBC exclusiva. Por 
exemplo, às vezes, o driver ODBC não aceita alguns tipos de sinais de 
aspas. Segue um outro exemplo que usa o operador as.
Às vezes, as não é permitido, ou seja, o aliasname deve seguir imediata-
mente após o fieldname.
Às vezes, as será compulsório, se for usado um aliasname.
Às vezes, distinct, as, where, group by, order by ou union não são 
suportados.
• Os nomes de campos e de tabelas deverão ser colocados entre aspas ou 
colchetes, se contiverem espaços ou caracteres especiais. 
Vantagem da Junção por Union
Um benefício de usar o comando SELECT é a capacidade de concatenar 
vários comandos em um usando um operador union . Concatenação é o 
processo de juntar dois ou mais caracteres. (se compatível com uma determi-
nada conexão ODBC):
selectstatement union selectstatement
5.1.3 Comando Load
O comando load carrega campos de um arquivo ASCII digitado, a partir de 
dados definidos no script, de uma tabela de entrada carregada anterior-
mente, de um campo carregado anteriormente, do resultado de um comando 
select seguinte ou gerando dados automaticamente. Sintaxe:
37
QlikView Developer | 5 SINTAXE BÁSICA DO SCRIPT
O “ * ” é usado para selecionar todos os campos na tabela.
Exercício: Criar uma Conexão com a Base de Dados
1 Crie um novo Qvw e salve-o. 
2 No menu Configurações, clique em Propriedades do Documento. 
3 Na aba Geral, clique em Gerar Arquivo de Log. Assim, será gerado um 
arquivo de log de execução do script cada vez que o script de carga for 
executado. 
4 Clique no botão OK. A janela Propriedades do Documento é fechada.
5 No menu Configurações, clique em Propriedades do Documento.
6 Na aba Salvar, verifique se Salvar Antes de Recarregar está marcado. 
Assim, o QlikView sempre salvará todos os seus documentos antes de 
recarregar o documento, de forma que você não perderá nenhuma alte-
ração feita no script.
7 Clique no botão OK. A janela Preferências do Usuário é fechada.
8 No menu Arquivo, selecione Salvar.
9 No menu Arquivo, selecione Editar Script. O script mostra algumas 
informações. São as variáveis de formato, que são geradas automatica-
mente pelo QlikView. As variáveis se baseiam nas configurações regio-
nais do seu sistema operacional em relação a data, moeda e hora.
10 Na aba Dados, selecione OLE DB na lista suspensa. 
11 Na aba Dados, selecione a caixa de seleção Forçar 32 Bits, se você esti-
ver trabalhando em um sistema 64 bits como o Windows 7.
12 Clique em Conectar. A caixa de diálogo Propriedades de Vínculos de 
Dados. Essa janela permite que você escolha dentre vários provedores 
OLE DB que estão instalados no seu computador. Como estamos traba-
lhando com uma base de dados do Access, é necessário selecionar o dri-
ver que funciona com esse provedor de base de dados.
38
QlikView Developer | 5 SINTAXE BÁSICA DO SCRIPT
13 Selecione o Provedor OLE DB Microsoft Jet 4.0. Ele se conectará à base 
de dados do Access.
14 Clique em Avançar para ir à tela de seleção da base de dados à qual nos 
conectaremos.
15 Clique no ícone Pesquisar e navegue até o caminho da base de dados 
QWT. A base de dados QWT não tem um nome de usuário e uma senha, 
de forma que podemos utilizar o padrão.
Figura 1. Selecionar a base de dados
16 Clique em Conexão de Teste. 
17 Clique no botão OK.
O Provedor OLE DB Microsoft Jet 4.0 gera o seguinte código para a cone-
xão com a base de dados:
OLEDB CONNECT32 TO 
[Provider=Microsoft.Jet.OLEDB.4.0;UserID=Admin; Data 
Source=C:\`likViewTraining\Developer\Datasources\`WT
.mdb;Mode=Share Deny None;ExtendedProperties=""; Jet 
OLEDB:System database="";Jet OLEDB:Registry 
Path="";Jet OLEDB:Database Password="";Jet 
OLEDB:Engine Type=5;Jet OLEDB :Database Locking 
Mode=1;Jet OLEDB:Global Partial Bulk Ops= 2;Jet 
OLEDB:Global Bulk Transactions=1;Jet OLEDB:New Data 
39
QlikView Developer | 5 SINTAXE BÁSICA DO SCRIPT
base Password="";Jet OLEDB:Create System 
Database=False;Jet OLEDB:Encrypt Database=False;Jet 
OLEDB:Don't Copy Locale on Compact=False;Jet 
OLEDB:Compact Without Replica Repair=False;Jet 
OLEDB:SFP=False];
Devido às propriedades da base de dados, qualquer parte da sequência após 
o comando da Fonte de Dados pode ser alterada ou eliminada. A seguir, 
você pode ver o que é necessário para a conexão com a base de dados QWT 
para o QlikView:
OLEDB CONNECT32 TO 
[Provider=Microsoft.Jet.OLEDB.4.0;User ID=Admin;Data 
Source=Datasources\`WT.mdb];
Os comandos necessários na nossa conexão OLE DB são Provider, User ID e 
Datasources. Isso pode variar de acordo com a base de dados e os diferentes 
drivers OLE DB.
Como você pode ver, podemos usar um caminho relativo da base de dados 
em vez de um caminho absoluto. Isso é feito removendo a parte do caminho 
referente à pasta na qual salvamos o documento QlikView. A parte do cami-
nho removida do exemplo acima é:
C:\QlikViewTraining\Developer\
Nesse caso, nossa base de dados foi armazenada em uma pasta abaixo, na 
qual reside o nosso documento QlikView.
Parabéns por ter concluído a Lição 5. Na próxima lição, veremos como car-
regar dados a partir da base de dados.
Observação: o caminho mostrado na sequência de conexão pode ser dife-
rente do mostrado acima. Isso depende do local da base de dados QWT.
40
QlikView Developer | 6 CARREGAMENTO DE DADOS A PARTIR DA BASE DE DADOS
6 CARREGAMENTO DE DADOS A PARTIR DA BASE DE 
DADOS
Bem-vindo à Lição 6. Nesta lição, começaremos a carregar dados no QlikView 
e usaremos um comando SELECT para carregar campos específicos. Para car-
regar dados no QlikView, criaremos um script que carregará dados a partir de 
uma base de dados do Access. 
6.1 Geração do Script
A vantagem de usar o editor de scripts do QlikView é que vários dos coman-
dos de script são gerados automaticamente ao selecionar tabelas e campos 
que você deseja carregar nos assistentes de arquivo. Muitas vezes, é necessá-
rio fazer algumas alterações manualmente, por exemplo, para atribuir novos 
nomes de campos. O editor de scripts também pode indicar erros óbvios por 
meio da codificação por cores; por exemplo, parênteses sem correspondên-
cia em uma função.
6.2 Comentários no Script 
Um comentário é uma anotação que pode ser adicionada ao script a fim de 
facilitar a compreensão do seu código-fonte. Quando devidamente comen-
tado, o script permite que outros entendam facilmente a lógica por trás do 
código.
Depois de criar a conexão OLE DB, é necessário ler os dados das tabelas da 
base de dados no QlikView. 
Antes de carregar dados, criaremos alguns comentários no script para ajudar 
você a entendê-lo. Criar comentários é útil se você não estiver trabalhando 
com o script por algum tempo ou se outra pessoa precisar editá-lo. Um 
comentário cria uma parte do script que não é lida ao carregar dados no 
QlikView. No Editor de Scripts, as linhas que foram comentadas ficarão ver-
des. 
A figura abaixo mostra um exemplo de como os comentários aparecem no 
Editor de Scripts.
Objetivos
• Comentar o script para referência futura
• Carregar dados com o Editor de Scripts do QlikView
• Acessar o Depurador
41
QlikView Developer | 6 CARREGAMENTO DE DADOS A PARTIR DA BASE DE DADOS
O QlikView permite três tipos de comentários diferentes:
• REM antes de um comando indica um comentário desse comando, até 
seu final;
• // indica um comentário de todo o texto seguinte, em uma única linha;
• /*… */ indica o comentário de todo o texto entre os delimitadores.
Figura 1. Incluindo comentários ao script de carga
42
QlikView Developer | 6 CARREGAMENTO DE DADOS A PARTIR DA BASE DE DADOS
Exercício: Carregar Dados
No exercício a seguir, você pode incluir qualquer tipo de comentário desejado. 
Também é possível selecionar texto no script, clicar com o botão direito do 
mouse e clicar em Comentar/Remover Comentário no menu. 
1 Começaremos incluindo a tabela Customers no script.
2 No menu Arquivo, selecione Editar Script.
3 Na caixa de diálogo Editar Script, clique no botão Selecionar.
4 Nas Tabelas de Bases de Dados, selecione a tabela Customers.
Figura 2. Janela Criar Comando Select
A janela Criar Comando Select têm três seções nas partes superior, do meio 
e inferior:
A) Superior 
Mostra informações sobre a base de dados ativa
B) Meio
Contém informações referentes a Tabelas, Visões, Sinônimos, Tabelas do 
Sistema e Alias da base de dados. Quando se trabalha com uma grande 
quantidade de dados, é recomendável que você desmarque tudo, menos 
o que você quer ler no QlikView. 
43
QlikView Developer | 6 CARREGAMENTO DE DADOS A PARTIR DA BASE DE DADOS
Você pode ver todas as tabelas disponíveis na janela Tabelas de Bases de 
Dados. Quando uma tabela é selecionada, os campos da tabela são exi-
bidos. Você tem a opção de exibir os campos em Ordem Alfabética ou 
na Ordem Original, ou seja, a ordem em que eles são colocados na 
tabela.
C) Inferior
Existem várias formas de exibir a tabela lida no momento no QlikView, 
na parte inferior da tela. Na aba Script, você pode ver a sintaxe da forma 
como ela aparecerá no script. Você pode selecionar como os campos 
serão colocados no script, em uma Coluna, em uma Linha ou Estrutura-
dos com quebras de linha.
Também é possível ler a tabela com uma Carga Anterior. A vantagem da 
carga anterior é que você pode trabalhar com a sintaxe do QlikView, em 
vez da sintaxe SQL.
5 Selecione Carga Anterior. Essa opção possibilita o uso das funções inter-
nas do QlikView dentro do comando LOAD.
6 Clique no botão OK. O script deve ter a seguinte aparência:
LOAD Address,
City,
CompanyName,
ContactName,
Country,
CustomerID,
DivisionID,
Fax,
Phone,
PostalCode,
StateProvince;
SQL SELECT *
FROM Customers;
Habitue-se a sempre rotular suas tabelas de forma manual. Caso não seja 
assim, o QlikView usará o nome da tabela do comando SQL ou da fonte 
do arquivo. O nome é usado para mencionar uma tabela. O nome de 
uma tabela deve terminar com o sinal de dois-pontos. Use colchetes se o 
nome da tabela contiver espaços, caracteres especiais ou começar com 
um número.
44
QlikView Developer | 6 CARREGAMENTO DE DADOS A PARTIR DA BASE DE DADOS
7 Coloque o cursor acima da linha LOAD e digite Customers, seguido por 
um dois-pontos. O script deve ter a seguinte aparência:
Customers:
LOAD Address,
 City,
 CompanyName,
 ContactName,
 Country,
 CustomerID,
 DivisionID,
 Fax,
 Phone,
 PostalCode,
 StateProvince;
SQL SELECT *
FROM Customers;
Consulte o arquivo de soluções do curso para ver um formato sugerido para 
seu script. O restante do exercício foi editado para refletir tal formatação. 
Você pode ajustar seu script ou deixar sua configuração padrão. 
Faça um comentário antes da tabela para facilitar sua localização. Veja o 
exemplo abaixo:
// ************** Customers table **************
8 Clique antes da palavra LOAD, e pressione Enter. Cria uma linha vazia 
acima do comando LOAD.
9 Clique na linha recém-criada.
10 Tipo: 
//************** Customers table **************
11 Clique em Salvar. O documento QlikView inteiro será salvo, incluindo o 
script de carga.
12 Clique no ícone Recarregar para recarregar o script. Usar a sequência de 
teclas CTRL+R é outra forma de iniciar uma recarga. É exibida a caixa 
de diálogo Propriedades da Pasta após a execução do script
45
QlikView Developer | 6 CARREGAMENTO DE DADOS A PARTIR DA BASE DE DADOS
Figura 3. Propriedades de Pasta [Principal]
Na janela Propriedades de Pasta, todos os campos de todas as tabelas são 
carregados e exibidos no documento QlikView, permitindo a seleção total 
ou parcial dos campos.
13 Clique no botão OK.
14 No menu Arquivo, selecione Editar Script ou clique no ícone Editar Script. 
A sequência de teclas CTRL+E é outra forma de entrar no editor de script. 
Continuaremos a ler tabelas no QlikView, começando pela tabela Shippers.
15 Posicione seu cursor em uma linha após o comando LOAD da tabela Cus-
tomers (FROM Customers;). 
16 Pressione Enter duas vezes. Linhas adicionais são incluídas.
17 Clique no botão Selecionar.
18 Selecione a tabela Shippers e clique no botão OK. 
19 Digite um comentário para a tabela Shippers e atribua a ela o Rótulo Shi-
ppers.
*************** Shippers table ***************
A tabela Shippers tem um nome de campo em comum com a tabela Custo-
mers. O campo CompanyName existe nas duas tabelas, mas a tabela Custo-
mers contém o nome dos clientes, enquanto que a tabela Shippers contém o 
nome da empresa do remetente. Esse campo não deve ser um campo-chave 
entre essas duas tabelas. 
46
QlikView Developer | 6 CARREGAMENTO DE DADOS A PARTIR DA BASE DE DADOS
Uma das soluções possíveis para evitar conexões indesejadas é a renomeação 
de campos. É necessário renomear o campo CompanyName em uma das 
tabelas para evitar uma conexão entre elas. Entraremos em mais detalhes 
sobre isso em outro momento. 
20 Coloque o cursor imediatamente após CompanyName na tabela Shippers. 
21 Digite AS Shippers. O script deve ter a aparência a seguir:
22 Coloque o cursor acima da linha LOAD e digite Shippers:
// *************** Shippers table ***************
Shippers:
LOAD 
CompanyName AS Shippers,
ShipperID
;
SQL SELECT * FROM Shippers;
23 Clique em Salvar.
24 Clique em Recarregar. A janela Propriedades da Pasta é exibida.
25 Clique no botão OK.
47
QlikView Developer | 6 CARREGAMENTO DE DADOS A PARTIR DA BASE DE DADOS
Exercício: Carregar Dados Adicionais
Neste exercício, traremos as tabelas adicionais necessárias da base de dados 
QWT.mdb. Por enquanto, desconsidere a conexão ou as associações entre as 
tabelas, pois elas serão incluídas posteriormente no curso. 
Este exercício testará seus conhecimentos, pois não inclui todas as etapas
1 Carregue os campos da tabela Products no script.
2 Digite um comentário para a tabela Products e atribua a ela o rótulo 
Products.
3 Carregue os campos da tabela Categories no script. Faça um comentário 
sobre a tabela e a rotule como Categories.
4 Carregue os campos da tabela Divisions no script. 
5 Faça um comentário na tabela Divisions e a rotule como Divisions.
Além das tabelas Customers e Shippers ilustradas nas páginas anteriores, 
seu script deve ter a seguinte aparência, quando concluído:
//*************** Products table ***************
Products:
LOAD
CategoryID,
ProductID,
ProductName,
QuantityPerUnit,
SupplierID,
UnitCost,
 //UnitPrice
UnitsInStock,
UnitsOnOrder
;
SQL SELECT * 
FROM Products;
//*************** Categories table ***************
Categories:
LOAD
CategoryID,
CategoryName,
Description
48
QlikView Developer | 6 CARREGAMENTO DE DADOS A PARTIR DA BASE DE DADOS
;
SQL SELECT * 
FROM Categories;
//*************** Divisions table ***************
Divisions:
LOAD
DivisionID,
DivisionName
;
SQL SELECT * 
FROM Divisions; 
6.3 Depuração de Scripts
O depurador é usado para procurar e isolar erros no script. É possível moni-
torar cada comando de script e examinar os valores das variáveis durante a 
execução do script.
A execução do script no depurador facilita bastante a localização de erros. 
Além disso, ele pode economizar um tempo considerável por permitir que 
você limite a quantidade de registros carregados no seu documento QlikView. 
Cargas limitadas possibilitam verificações de estrutura para conferir o modelo 
de dados sem ter de esperar grandes quantidades de dados. No depurador, é 
possível estudar cada comando e verificaros valores das variáveis durante a 
execução do script.
O script é mostrado na janela na metade superior da caixa de diálogo. Um 
cursor amarelo mostra o andamento da execução. É possível inserir pontos 
de interrupção clicando no número de uma linha e removê-los clicando 
novamente. Todos os pontos de interrupção podem ser removidos clicando 
no botão Limpar. Quando um novo ponto de interrupção é encontrado, a 
execução é parada até ser dado o comando para prosseguir.
O comando de script atual é mostrado na janela no meio da caixa de diálogo.
Os códigos de status e as mensagens de erros são mostrados na janela infe-
rior esquerda. Essas informações são, basicamente, as mesmas mostradas na 
janela Progresso da Execução do Script quando o script é executado sem o 
depurador.
A janela inferior direita mostra todas as variáveis e seus respectivos valores. 
Os valores que foram alterados são mostrados em vermelho.
49
QlikView Developer | 6 CARREGAMENTO DE DADOS A PARTIR DA BASE DE DADOS
O script pode ser executado em três modos diferentes:
Para executar o script inteiro, use um dos seguintes métodos:
Figura 4. O Depurador
Executar Este é o modo de execução normal do script. O script é 
executado até o final ou até encontrar um ponto de inter-
rupção. 
Animar O script é executado conforme descrito acima, mas com 
uma pequena pausa após cada comando. Assim, é possí-
vel seguir a execução com mais atenção. 
Incremento O script é executado um comando de cada vez.
Carga Limitada Selecione Carga Limitada e digite um número na janela 
abaixo. Esse é o número máximo de registros aceitos para 
cada comando LOAD e SELECT. Essa é uma maneira 
muito prática de limitar o tempo de execução quando um 
script é executado com dados dinâmicos.
Parar Aqui Clique em Parar Aqui para encerrar a recarga atual. Os 
dados já carregados serão retidos no QlikView.
Cancelar Clique em Cancelar para parar a execução e descartar os 
dados carregados.
50
QlikView Developer | 6 CARREGAMENTO DE DADOS A PARTIR DA BASE DE DADOS
Exercício: Usar o Depurador de Script
Agora, vamos tentar executar nosso script no depurador.
1 No menu Arquivo, selecione Editar Script.
2 Clique em Depurar.
3 Para inserir pontos de interrupção, clique no número da linha ao lado de 
SQL SELECT nas tabelas Customers e Shippers, e ao lado de LOAD na 
tabela Products. Os pontos de interrupção serão vistos como pontos ver-
melhos.
4 Clique em Animar.
5 Clique em Fechar.
6 Abra o depurador novamente e execute o script com uma Carga Limi-
tada de 10 registros. 
Usar uma carga limitada é útil para identificar erros e validar alterações. É 
também uma forma de criar documentos com um pequeno número de regis-
tros inseridos.
6.3.1 Arquivo de Log de Execução do Script
Um arquivo registra tudo o que acontece durante a execução de um script. 
No início do curso, definimos a seleção Gerar Arquivo de Log nas Proprie-
dades do Documento. Agora, examinaremos o arquivo que é gerado durante 
a execução do script.
O arquivo de log terá o mesmo nome que seu documento QlikView, mas 
com “.qvw” anexado e uma extensão de arquivo .log (por exemplo, QVDe-
velope-rI_Exercise.qvw.log). O arquivo estará localizado no mesmo diretó-
rio que o documento QlikView que está sendo recarregado.
Em geral, o arquivo de log conterá todos os comandos de script executados, 
sem a linha ou os comentários entre parênteses (os comandos REM são 
mostrados). As informações a seguir também são incluídas:
• Registro de data/hora de início da execução
• Registro de data/hora de conclusão da execução
• O número de campos e o nome de cada campo identificado em LOAD ou 
SELECT, juntamente com o número de registros incluídos nesse LOAD 
ou SELECT.
• O número da linha do script
• A versão do QlikView que está executando o script
• Todos os erros de execução do script que possam ter ocorrido
• Todas as chaves sintéticas criadas serão listadas no final do arquivo de log.
51
QlikView Developer | 6 CARREGAMENTO DE DADOS A PARTIR DA BASE DE DADOS
Exercício: Visualização do arquivo de log
1 No Bloco de Notas, abra seu arquivo de log. O arquivo estará localizado 
no mesmo diretório que o documento QlikView que está sendo recarre-
gado.
Figura 5. Arquivo de Log
Parabéns por ter concluído a Lição 6. Na próxima lição, veremos informa-
ções sobre como estruturar o script. 
52
QlikView Developer | 7 ESTRUTURAÇÃO DO SCRIPT
7 ESTRUTURAÇÃO DO SCRIPT
Bem-vindo à Lição 7. Nesta lição, criaremos abas para organizar o script. 
O uso de abas facilita o gerenciamento do script quando se carrega várias 
tabelas. 
7.1 Criar Abas no Script
Para facilitar a localização de tabelas no script, estruturaremos o script 
criando abas para organizá-lo.
As tabelas no script devem ser consideradas tabelas de dimensões. Contêm 
informações importantes para serem consultadas por tempo e para fazer 
seleções. Criaremos uma aba no script com o nome de Dimensions. Nela, 
colocaremos as tabelas de dimensões. 
Exercício: Estruturação do Script
Siga as etapas abaixo para estruturar seu script:
1 Abra seu documento QlikView. 
2 Clique no ícone Editar Script ou pressione Ctrl+e.
3 Clique no botão da ferramenta Adicionar nova aba.
Figura 1. Incluir Nova Aba
4 A caixa de diálogo Renomear Aba é exibida. Digite: Dimension para 
nomear a aba.
5 Clique no botão OK.
6 Vá para a aba Principal e selecione todas as tabelas carregadas até o 
momento. Deixe os comandos Set e o comando Connect de lado por 
enquanto.
Objetivos
• Definir por que a criação de tabelas pode ser benéfica na estruturação 
de um Script do QlikView
• Criar abas para estruturar seu script
• Descrever o que faz o QlikView para criar Chaves Sintéticas e por que 
evitá-las.
• Criar medidas principais
53
QlikView Developer | 7 ESTRUTURAÇÃO DO SCRIPT
7 Recorte as tabelas e clique na aba Dimensões. .
8 Cole as tabelas na aba Dimensões.
9 Clique em Salvar.
Agora, o script deve conter duas abas, a aba Principal, com dados rele-
vantes para todo o aplicativo, e a aba Dimensões, com as tabelas de 
dimensões que serão usadas no documento.
Vamos continuar incluindo as tabelas de fatos no documento QlikView. As 
tabelas de fatos contêm dados que você deseja analisar. Normalmente, elas 
são as tabelas de conexão com as tabelas de dimensões.
Neste curso, existem duas tabelas de fatos, Orders e OrderDetails. Vamos 
carregá-las em uma aba separada do script. Após carregar a tabela Order-
Details, os campos UnitPrice e ProductID são comuns à tabela Products. 
Isso faz com que o QlikView crie um novo campo, $Syn 1, a chamada 
Chave Sintética.
7.2 Chaves Sintéticas
Ao carregar mais tabelas, nosso modelo de dados fica mais complexo. Não é 
recomendável ter várias chaves comuns em várias tabelas em uma estrutura 
de dados do QlikView. Isso pode fazer o QlikView usar chaves complexas 
(também conhecidas como chaves sintéticas) para gerar as conexões na 
estrutura de dados. 
Em geral, as chaves sintéticas utilizam muitos recursos e podem tornar os 
cálculos lentos e, em situações extremas, sobrecarregar o documento. Elas 
também dificultam a compreensão e a manutenção do documento. 
Existem casos em que não é possível evitar as chaves sintéticas (por exem-
plo, em tabelas de Correspondência de Intervalo) mas, em geral, as chaves 
sintéticas devem ser sempre eliminadas, quando possível.
Existem várias maneiras de eliminar as chaves sintéticas no QlikView, e é 
importante conhecer a estrutura de dados e as fontes de dados para criar a 
solução correta.
No exercício abaixo, apresentamos uma solução para eliminar a chave sinté-
tica.
54
QlikView Developer | 7 ESTRUTURAÇÃO DO SCRIPT
Exercício: Pedidos e Detalhes do Pedido
De acordo com o plano do projeto, na seção Tendências, será necessário for-
necer a análise por Month, MonthYear, Quarter e Year. Neste exercício, 
você inclui as dimensões Year, Month e Day ao estruturar o script. Em exer-
cícios posteriores, aprofundaremos o tópico de dimensões de data, acrescen-
tando MonthYear e Quarter.
1 Abra oEditor de Scripts.
2 Crie uma nova aba e a nomeie Orders.
3 Clique no botão Selecionar.
4 Carregue a tabela Orders.
5 Digite o seguinte após OrderDate, no comando Load,
Year(OrderDate) AS Year,
Month(OrderDate) AS Month,
Day(OrderDate) AS Day,
Você está editando script manualmente para usar o campo OrderDate para 
gerar novos campos para Year, Month e Day. Essas funções de datas do 
QlikView ainda serão explicadas em mais detalhes no curso. 
//*************** Orders table ***************
Orders: 
LOAD CustomerID,
EmployeeID,
Freight,
OrderDate,
Year(OrderDate) AS Year,
Month(OrderDate) AS Month,
Day(OrderDate) AS Day,
OrderID,
ShipperID
;
SQL SELECT *
FROM Orders; 
6 Abra o Editor de Scripts.
7 Clique no script depois do script de carga da tabela LOAD. Você está 
incluindo a tabela Orders Details depois da tabela Orders.
8 Clique no botão Selecionar.
9 Carregue a tabela Orders Details.
55
QlikView Developer | 7 ESTRUTURAÇÃO DO SCRIPT
Aqui, criaremos um novo campo LineSalesAmount, que é a primeira Medida 
Principal, identificada no plano de projeto na seção Medidas Principais. Line-
SalesAmount é o resultado de um cálculo baseado em UnitPrice*Quantity* 
(1-Discount). 
10 Depois de UnitPrice, digite,
UnitPrice * Quantity * (1 - Discount) AS 
LineSalesAmount;
11 Clique em Salvar.
12 Clique em Recarregar.
O script de carga deve ter a seguinte aparência:
//*************** Order Details table 
***************
OrderDetails:
LOAD Discount,
LineNo,
OrderID,
ProductID,
Quantity,
UnitPrice,
UnitPrice * Quantity * (1 - Discount) 
AS LineSalesAmount
;
SQL SELECT * 
FROM [Order Details]; .
13 Abra o Visualizador de Tabelas (Ctrl+t) para compreender melhor como 
as tabelas são conectadas. Essa caixa de diálogo é usada para mostrar a 
estrutura da tabela de dados do documento QlikView atual. As tabelas 
são mostradas como caixas, com uma lista de campos que elas contêm. 
Linhas conectoras entre as caixas mostram as associações. 
As tabelas, os pontos de conector e também todos os pontos onde os 
conectores se dobram podem ser movidos usando o recurso arrastar e 
soltar do mouse (consulte a seguir). Ao reorganizar o layout dessa 
forma, as alterações serão salvas com o documento, a menos que você 
saia do diálogo pressionando Cancelar.
(Veremos o Visualizador de Tabelas em mais detalhes na Lição 8). 
Como já mencionamos, o QlikView criou uma chave sintética, formada 
pelos campos UnitPrice e ProductID. Em nosso modelo de dados, o 
campo UnitPrice na tabela Product contém os preços de lista ou de catá-
logo. Assim, vamos renomear o campo UnitPrice na tabela Products 
para CataloguePrice.
56
QlikView Developer | 7 ESTRUTURAÇÃO DO SCRIPT
14 No Editor de Scripts, vá a tabela Products, na aba Dimensions.
15 Renomeie UnitPrice para CataloguePrice
//*************** Products table ***************
Products:
LOAD
CategoryID,
ProductID,
ProductName,
QuantityPerUnit,
SupplierID,
UnitCost,
UnitPrice as CataloguePrice,
UnitsInStock,
UnitsOnOrder
;
SQL SELECT * FROM Products;
57
QlikView Developer | 7 ESTRUTURAÇÃO DO SCRIPT
16 Recarregue e abra o Visualizador de Tabelas.
O script deve teve ter a aparência a seguir. Observe que as diferentes 
abas do script são marcadas com ///$tab. Essa é a forma como o Qli-
kView marca as abas diferentes quando você exporta o script para um 
arquivo de script
///$tab Main
SET ThousandSep=',';
SET DecimalSep='.';
SET MoneyThousandSep=',';
SET MoneyDecimalSep='.';
SET MoneyFormat='$#,##0.00;($#,##0.00)';
SET TimeFormat='h:mm:ss';
SET DateFormat='M/D/YYYY';
SET TimestampFormat='M/D/YYYY h:mm:ss[.fff]';
SET MonthNames='Jan;Feb;Mar;Apr;May;Jun;Jul;Aug;Sep;Oct;Nov;Dec';
SET DayNames='Mon;Tue;Wed;Thu;Fri;Sat;Sun';
//Este é o Editor de Scripts, e esse é um exemplo de 
um comentário de uma única linha.
58
QlikView Developer | 7 ESTRUTURAÇÃO DO SCRIPT
OLEDB CONNECT32 TO 
[Provider=Microsoft.Jet.OLEDB.4.0;User ID=Admin;Data 
Source=Datasources\`WT.mdb];
///$tab Dimensions
// ************** Customers table **************
Customers:
LOAD 
Address,
City,
CompanyName,
ContactName,
Country,
CustomerID,
DivisionID,
Fax,
Phone,
PostalCode,
StateProvince
;
SQL SELECT * FROM Customers;
// ************** Shippers table **************
Shippers:
LOAD
CompanyName AS Shippers, 
ShipperID
;
SQL SELECT * FROM Shippers;
59
QlikView Developer | 7 ESTRUTURAÇÃO DO SCRIPT
//*************** Products table ***************
Products:
LOAD
CategoryID,
ProductID,
ProductName,
QuantityPerUnit,
SupplierID,
UnitPrice as CataloguePrice,
UnitCost,
UnitsInStock,
UnitsOnOrder
;
SQL SELECT * FROM Products;
//*************** Categories table ***************
Categories:
LOAD
CategoryID,
CategoryName,
Description
;
SQL SELECT * FROM Categories;
60
QlikView Developer | 7 ESTRUTURAÇÃO DO SCRIPT
//*************** Divisions table ***************
Divisions:
LOAD
DivisionID,
DivisionName
;
SQL SELECT * FROM Divisions; 
///$tab Orders
//*************** Orders table ***************
Orders: 
LOAD
CustomerID,
EmployeeID,
Freight,
OrderDate,
Year(OrderDate) AS Year,
Month(OrderDate) AS Month,
Day(OrderDate) AS Day,
OrderID,
ShipperID
;
SQL SELECT * FROM Orders; 
//*************** Order Details table **************
OrderDetails:
LOAD
Discount,
LineNo,
OrderID,
ProductID,
Quantity,
UnitPrice,
UnitPrice * Quantity * (1 - Discount) AS LineSalesAmount
;
SQL SELECT * FROM [Order Details]; 
61
QlikView Developer | 7 ESTRUTURAÇÃO DO SCRIPT
Ao utilizar um comando LOAD anterior, podemos usar as funções de data 
do QlikView. O mês é representado como um número ao usar o comando 
SELECT e como uma combinação de texto e número ao usar o comando 
LOAD.
Parabéns por ter concluído a lição 7. Na próxima lição, veremos fundamen-
tos básicos de modelos de dados e o visualizador de tabelas.
Observação: Os caracteres de texto usados para representar os meses 
dependem das configurações regionais do seu sistema operacional, con-
forme visto nos comandos do script inicial. Se as suas configurações esti-
verem em inglês, os meses serão mostrados em inglês.
62
QlikView Developer | 8 MODELO DE DADOS BÁSICO E VISUALIZADOR DE TABELAS
8 MODELO DE DADOS BÁSICO E VISUALIZADOR DE 
TABELAS
Bem-vindo à Lição 8. Esta lição explorará o Visualizador de Tabelas. Use o 
Visualizador de Tabelas para analisar e compreender a estrutura interna do 
documento QlikView.
8.1 O Visualizador de Tabelas
O visualizar de Tabelas é usado para mostrar a estrutura da tabela de dados 
do documento QlikView atual.
As tabelas são mostradas como caixas, com uma lista de campos que elas 
contêm. Entre as caixas, há linhas de conectores que mostram as associa-
ções. Quando mais de duas linhas se encontram, há pontos de conector na 
forma de pequenos pontos. As tabelas, os pontos de conector e também 
todos os pontos onde os conectores se dobram podem ser movidos usando o 
recurso arrastar e soltar. Ao reorganizar o layout dessa forma, as alterações 
serão salvas com o documento, a menos que você saia da caixa de diálogo 
pressionando Cancelar.
O Visualizador de Tabelas tem duas visões disponíveis:
Visão das Tabelas Internas
A Visão das Tabelas Internas mostra as tabelas de dados à medida que o 
QlikView as armazena. Chaves sintéticas compostas são formadas em 
tabelas que compartilham mais de um campo. Tabelas sintéticas são usadas 
para vinculá-las. Essa visão proporciona a melhor compreensão da lógica do 
QlikView e também fornece um layout bastante claro, em que cada par de 
tabelas tem, no máximo, um conector entre elas. Essa é a visão padrão.
Objetivos
• Usar o Visualizador de Tabelas para analisar e compreender a estrutura 
interna do documento QlikView
• Identificar como é possível usar o Visualizador de Tabelas para depurar 
problemas
Figura 1. Alternando entre visões de tabelas
63
QlikView Developer I | 8 MODELO DE DADOS BÁSICO E VISUALIZADOR DE TABELAS
Visão das Tabelas Fonte 
A Visão das Tabelas Fonte mostra as tabelas de dadosà medida que o QlikView 
as lê. Não existem campos nem tabelas sintéticas. As chaves compostas são 
representadas por vários conectores entre as tabelas.
Abrir o Visualizador de Tabelas
Siga as etapas abaixo para abrir o Visualizador de Tabelas:
• No menu Arquivo, selecione o Visualizador de Tabelas ou clique em seu 
ícone. 
O Visualizador de Tabelas exibe todas as tabelas carregadas e seus campos 
chave de conexão. Você pode reorganizar seus componentes clicando e 
arrastando ou clicando em Layout Automático. 
Figura 2. O Visualizador de Tabelas mostrando um exemplo
64
QlikView Developer | 8 MODELO DE DADOS BÁSICO E VISUALIZADOR DE TABELAS
Exercício: Compreendendo o Visualizador de Tabelas
1 Abra seu documento QlikView. No menu Arquivo, selecione o Visualiza-
dor de Tabelas ou pressione CTRL + T.
2 Reorganize manualmente as tabelas ou clique no botão Ferramentas, de 
forma a poder ver as conexões entre elas.
3 Coloque o cursor sobre o cabeçalho da tabela Orders.
Uma bolha com estatística será exibida indicando a quantidade de 
Linhas, Campos e Chaves na tabela. Essa bolha informativa permane-
cerá por aproximadamente 30 segundos ou até você mover o mouse 
sobre outra área.
4 Coloque o cursor sobre ShipperID na tabela Shippers. Ao passar o cur-
sor sobre um dos campos da tabela, é exibida uma dica de ferramenta 
com informações sobre o conteúdo deste campo:
Figura 3. Informações da tabela
Opção Definição
Densidade da informação Densidade da informação é o número de registros 
que possuem valores (ou seja, diferentes de NULL) 
nesse campo, em comparação ao total de registros 
na tabela.
Proporção de subconjunto Proporção de subconjunto é o número de valores 
distintos desse campo encontrados na tabela, em 
comparação com o total de valores distintos desse 
campo (isto é, todas as outras tabelas). As ações a 
seguir podem ser executadas nos layouts de tabela:
Comentários de Tabela Comentários de tabela são mostrados na parte 
superior da ferramenta.
65
QlikView Developer I | 8 MODELO DE DADOS BÁSICO E VISUALIZADOR DE TABELAS
5 Clique com o botão direito do mouse na tabela Divisions e escolha Visu-
alizar.
6 Clique em Fechar. A janela Visualizar é fechada.
7 Clique no botão OK. A janela do Visualizador de Tabelas é fechada.
Campos do sistema
Ao extrair campos de uma fonte de dados, o QlikView também produz 
vários campos de sistema:
• $Field Mostra os nomes de todos os campos carregados
• $Table Mostra os nomes de todas as tabelas carregadas
• $Rows Mostra o número de linhas nas tabelas
• $Fields Mostra o número de campos nas várias tabelas
• $FieldsNo Mostra as posições dos campos nas tabelas 
(número da coluna)
• $Info Mostra os nomes das tabelas de informações carre-
gadas
Os campos de sistema podem ser exibidos como listas em um documento 
QlikView. Essas listas ajudam a entender mais facilmente a estrutura subja-
cente do aplicativo.
Quando uma única tabela é selecionada na lista $Table, um símbolo de 
informação é mostrado na barra de título da lista. Ao clicar aqui, você 
poderá exibir a tabela (se for um arquivo de texto).
Ao definir a lista $Field como Mostrar Frequência, na página Geral, da caixa 
de diálogo Propriedades da Lista, fica fácil consultar os campos que estão 
associados às diferentes tabelas. 
Comentários de Campo Comentários de campo são mostrados na dica de 
ferramenta.
Tags Tags que são incluídas no script ou em Proprieda-
des do Documento, Tabelas, incluindo tags do sis-
tema, são mostradas na dica de ferramenta.
Opção Definição
66
QlikView Developer | 8 MODELO DE DADOS BÁSICO E VISUALIZADOR DE TABELAS
Outra ferramenta muito útil é uma tabela dinâmica com as duas dimensões 
$Field e $Table e a expressão only($Field). Coloque a dimensão $Field à 
esquerda e a dimensão $Table na parte superior. Classifique as duas dimen-
sões por ordem de carga.
Exercício: A Aba Sistema
Ao desenvolver um documento, uma pasta do sistema é bastante útil para 
mostrar como as tabelas lógicas no documento se relacionam. É recomendá-
vel criar a pasta do sistema no primeiro passo após o carregamento dos 
dados.
1 Feche o Editor de Scripts e clique no botão Incluir Pasta na janela prin-
cipal.
2 Clique com o botão direito do mouse na nova pasta e selecione Proprie-
dades. 
3 Digite o Título da pasta como Sistema na aba Geral.
4 Na aba Campos, marque a caixa Mostrar Campos do Sistema e sele-
cione todos os campos com o sinal de cifrão, $, na frente.
5 Clique no botão Incluir e em OK. 
6 Organize os campos na pasta e clique com o botão direito do mouse na 
lista $Field.
7 Clique em Propriedades, Geral, Mostrar Frequência para ver como 
muitas vezes vários campos se repetem na estrutura de dados interna. 
8 Na aba Classificar, você pode classificá-los de acordo com a frequência 
decrescente para colocar os campos que ocorrem com mais frequência 
na parte superior da lista.
9 Repita esses passos para a lista $Table.
8.1.1 Usando Campos do Sistema
Se você selecionar IDCliente em $Field, verá as tabelas nas quais o campo 
aparece, juntamente com outras informações de campos do sistema.
Figura 4. O resultado da seleção de CustomerID na lista $Field
67
QlikView Developer I | 8 MODELO DE DADOS BÁSICO E VISUALIZADOR DE TABELAS
8.2 Tabela do Sistema
A tabela do sistema é uma tabela dinâmica que ilustra o relacionamento e 
as conexões entre tabelas e campos na base de dados interna do QlikView.
A seguir, crie uma tabela de sistema em sua pasta de sistema.
Exercício: Compreendendo a Tabela do Sistema
1 Clique na pasta Sistema.
2 Clique com o botão direito do mouse na pasta e selecione novo objeto de 
pasta, Tabela do Sistema. Será criada uma tabela dinâmica com as 
dimensões $Field e $Table. A expressão no gráfico será Only($Field). 
As duas dimensões são classificadas de acordo com a ordem de carrega-
mento.
Figura 5. Exemplo de Tabela do Sistema
68
QlikView Developer | 8 MODELO DE DADOS BÁSICO E VISUALIZADOR DE TABELAS
8.3 Propriedades do Documento: página Tabelas
Esta página de diálogo fornece ainda uma outra forma de examinar a estru-
tura de dados. Todas as tabelas e todos os campos incluídos no documento 
QlikView são listados, juntamente com estatísticas de cada entidade.
Clique no botão Exportar Estrutura para exportar vários arquivos de texto 
delimitados por tabulação com essas informações. Esses arquivos poderão 
então ser importados novamente no QlikView, nesse ou em outro docu-
mento, para análises adicionais.
Parabéns por ter concluído a Lição 8. Na próxima lição, começaremos a 
usar transformações.
Figura 6. Página Propriedades do Documento - Tabelas.
69
QlikView Developer | 9 TRANSFORMAÇÃO DE DADOS BÁSICA
9 TRANSFORMAÇÃO DE DADOS BÁSICA
Bem-vindo à Lição 9. Dados de origem são raramente perfeitos. Um dos 
vários pontos fortes do QlikView são seus sofisticados recursos de extrair, 
transformar e carregar (ETL) para transformar dados. Nesta lição, explora-
remos recursos avançados do editor de scripts. No QlikView, a transforma-
ção é feita no script quando os dados são convertidos de um formato de 
dados para outro.
9.1 Comando Load
O comando LOAD carrega campos de um arquivo ASCII digitado, a partir 
dos dados definidos no script, a partir de uma tabela de entrada já carre-
gada, do resultado de um comando Select que o segue ou gerando dados 
automaticamente. A sintaxe geral do comando Load é:
Load [ distinct ] *fieldlist
[( from file [ format-spec ] | 
from_fieldfield [format-spec] 
inline data [ format-spec ] | 
residenttable-label | 
autogenerate size )] 
[ where criterion ] | while criterion ]
[ group_by fieldlist ] 
[order_by field [ sortorder ] { , field [ sortorder ] } ]
Segue uma listagem parcial dos tipos de dados que podem ser carregados no 
QlikView:
• Carregados diretamente de um arquivo de texto, Excel, qvd, xml etc.
• Carregados com um comando Select ou Load. Os comandos Select ou 
Load devem estar imediatamente após esse comando Load.
• Carregados de uma tabela carregada anteriormente (residente)
•Carregados diretamente de dados no script de carga usando Inline Load
• Carregados de dados gerados
Objetivos
• Definir os usos avançados do editor de scripts
• Renomear campos
• Usar Funções transformadoras no script
71
QlikView Developer | 9 TRANSFORMAÇÃO DE DADOS BÁSICA
Da mesma forma que com outros comandos, os nomes de campos e de tabe-
las devem estar entre aspas simples ou colchetes, se contiverem espaços ou 
caracteres especiais.
Cinco comandos Load de exemplo:
Load * from 'c:\userfiles\data2.txt' (ansi, txt,
delimiter is '\t', embedded labels);
Load A, B, if(C>0,'+','-') as X, weekday(D) as Y;
Select A,B,C,D from Table1;
Load A, B, A*B+D as E
Resident tab1;
Load * Inline
[CatID, Category
0,Regular
1,Occasional
2,Permanent];
Load RecNo() as A, rand() as B
Autogenerate(10000);
9.2 Renomear um Campo
É possível renomear um ou mais campos no script de carga. Também é pos-
sível denominar os campos que não têm um nome nos dados de origem. 
Existem várias formas de fazer isso em um script:
9.2.1 Comando AS
Renomear usando As em um comando Load, ou seja, você renomeia um 
campo específico nesse comando específico. Se estiver usando o Assistente para 
Arquivos de Tabelas para criar um comando Load, você poderá clicar em qual-
quer nome de campo na área Rótulo e inserir um novo nome. O comando 
Load gerado incluirá a sintaxe as automaticamente
Exemplo de comando As:
Load Capital as [Capital city],
Cntry as Country,
Pop as Population
From Country.csv (ansi, txt, delimiter is ',' ,embedded labels);
Dica: Uma vantagem do comando Load sobre o comando Select é a 
capacidade de usar todas as funções de script do QlikView.
72
QlikView Developer | 9 TRANSFORMAÇÃO DE DADOS BÁSICA
9.2.2 Comando Alias
Renomear usando o comando alias. Desse modo você renomeia todas as 
ocorrências desses campos com os nomes especificados no script. Segue a 
diretriz de sintaxe:
Alias <fieldname> as <new fieldname>, <fieldname> as <new fieldname>,…
Exemplo de uso do comando Alias :
Alias ProdId as ProductID, Mon as Month, Cname as Customer;
9.2.3 Comando Rename Field
Renomear um ou mais campos existentes usando o comando Rename Field. 
Opcionalmente, esse comando pode usar uma tabela de mapeamento que 
armazena os dados de conversão de oldname em newname. As tabelas de 
mapeamento serão discutidas posteriormente neste curso.
A sintaxe do comando Rename field é a seguinte:
rename field[s] (using mapname | oldname to newname {, oldname to newname} )
mapname é o nome de uma tabela de mapeamento carregada anteriormente, 
que contém um ou mais pares de nomes de campos antigos e novos
oldname é o nome antigo do campo e
newname é o novo nome do campo.
Exemplo de uso do comando rename field:
Rename field XAZ0007 to Sales;
FieldMap:
Mapping Select oldnames, newnames from datadict;
Rename fields using FieldMap;
9.3 Expressões de Script
Os scripts do QlikView incluem um conjunto abrangente de funções e ferra-
mentas para a transformação de dados. Consulte o Manual de Referência 
do QlikView para obter uma listagem completa e a explicação dessas fun-
ções. De forma geral, elas podem ser agrupadas nas seguintes categorias:
• Operadores (AND / OR)
• Funções de agregação (Sum(),Avg())
• Outros (Upper(),Left())
Nesta seção, examinaremos algumas das funções de transformação mais 
básicas para lidar com problemas de dados comuns.
Observação: Tanto rename field quanto rename fields são formas permi-
tidas sem diferença alguma no efeito.
73
QlikView Developer | 9 TRANSFORMAÇÃO DE DADOS BÁSICA
9.4 Carregar um Arquivo XML
O acrônimo XML significa Extensible Markup Language. Trata-se de um for-
mato de texto simples e flexível. Originalmente, ele foi criado para enfrentar 
os desafios da publicação eletrônica em grande escala. Atualmente, o XML 
também é usado em diversas formas de armazenamento de dados
Exercício: Carregar um Arquivo de Texto em Formato 
XML
1 Abra seu documento QlikView.
2 No menu Arquivo, selecione Editar Script.
3 Posicione o cursor na parte inferior da aba Dimensions.
4 Inclua o comentário: Suppliers.
5 Clique no botão Arquivos de Tabela para abrir a caixa de diálogo Abrir 
Arquivos Locais.
6 Localize o arquivo suppliers.xml na pasta DataSources e clique em Abrir.
7 Verifique se a tabela Suppliers/_empty_ está selecionada. Ao examinar a 
janela dos campos, a tabela deverá conter 29 linhas.
8 Clique em Terminar.
9 Edite o script removendo o comando Directory; e substitua-o com Sup-
pliers: para nomear a tabela. 
Também será preciso remover o texto _empty_:
Figura 1. O Assistente de Arquivo XML
74
QlikView Developer | 9 TRANSFORMAÇÃO DE DADOS BÁSICA
10 Verifique no seu trabalho se o script da tabela Suppliers tem a aparência 
a seguir. 
//*************** Suppliers ***************
Suppliers:
Load SupplierID,
CompanyName,
ContactName,
Address,
City,
PostalCode,
Country,
Phone,
Fax
FROM Datasources\Suppliers.xml (XmlSimple, Table is 
[Suppliers/_empty_]); 
9.5 Comando Qualify
A junção automática entre campos com o mesmo nome em tabelas diferen-
tes pode ser suspensa usando o comando Qualify, que qualifica o nome do 
campo com seu nome de tabela. Se forem qualificados, os nomes de campo 
serão renomeados quando encontrados em uma tabela. O novo nome terá o 
formato tablename.fieldname. Tablename equivale ao rótulo da tabela atual 
ou, se não existir um rótulo, ao nome que aparece depois de From nos 
comandos Load e Select.
A qualificação é sempre desativada, por padrão, no início da execução do 
script. A qualificação do nome de um campo pode ser ativada a qualquer 
momento usando um comando Qualify A qualificação pode ser desativada a 
qualquer momento usando um comando Unqualify.
A sintaxe é:
Qualify ListOfFields
em que ListOfFields refere-se a um ou mais nomes de 
campo separados por vírgulas.
9.5.1 Como renomear campos usando o comando Qualify
O QlikView associa campos com o mesmo nome. Se as duas tabelas tiverem 
vários campos em comum, o QlikView poderá criar chaves complexas (tam-
bém conhecidas como Chaves Sintéticas) para associar as tabelas.
75
QlikView Developer | 9 TRANSFORMAÇÃO DE DADOS BÁSICA
 
O arquivo suppliers.xml tem vários campos em comum com a tabela Custo-
mers na base de dados do Access. Esses campos não devem ser associados 
entre si e alguns dos campos do suppliers.xml devem ser renomeados. O 
único campo comum deve ser SupplierID, que também se encontra na tabela 
Products.
Em vez de renomear cada campo usando o comando As ou outros, a solu-
ção mais simples é colocar o nome da tabela antes do nome do campo 
(como é comum observar na maioria dos utilitários de base de dados). É 
fácil fazer isso usando um comando especial do QlikView que, ao carregar 
os nomes de campos, qualifica todos eles com o nome da tabela. O nome 
dos novos campos serão tablename.fieldname. Como queremos renomear 
todos os campos, exceto SupplierID, usaremos o * (caractere curinga).
Exercício: Comando Qualify
Siga as etapas abaixo para usar o comando Qualify:
1 Digite as seguintes linhas de código antes do comando Load da tabela 
Suppliers.
Qualify *;
Unqualify SupplierID;
como SupplierID deverá ser conectado a outra tabela, ele não deve ter o 
qualificador de tabela. Isso é especificado usando o comando Unqualify 
SupplierID.
2 Depois que a tabela Suppliers tiver sido carregada, deveremos incluir o 
comando a seguir de forma que todos os campos carregados depois 
desse não tenham o qualificador de tabela.
 Unqualify *;
3 Salve e Recarregue o documento.
4 Abra o Visualizador de Tabelas. Agora, você verá os resultados da 
inclusão do nome da tabela ao nome do campo.
Observação: Geralmente, é recomendável evitar Chaves Sintéticas no seu 
modelo de dados. Com grandes volumes de dados podem ocorrer alguns 
problemas significativos de desempenho.
Dica: O comando Qualify pode ser usado com todos os tipos de tabelas e 
ficará ativo até ser cancelado por um comando Unqualify. Isso pode ser 
útil quando você tiver várias tabelas com os mesmosnomes de campos.
76
QlikView Developer | 9 TRANSFORMAÇÃO DE DADOS BÁSICA
9.6 Campos-chave
Lembre-se, os campos-chave são aqueles que são comuns a uma ou mais 
tabelas (campos associados). Quando um campo ocorre em mais de uma 
tabela, pode não ficar claro para o QlikView qual das tabelas deve ser usada 
para calcular a frequência dos dados.
Carregar um Campo Várias Vezes em uma Tabela
Existe uma solução relativamente simples para o problema dos campos-
chave e do cálculo da frequência de dados. Você carrega novamente o 
campo que deseja usar para calcular a frequência com outro nome.
Exemplo de como solucionar a questão:
Load …,
OrderID,
OrderID as OrderIDCount
FROM Orders;
Agora você pode usar o novo campo (não associado) em uma lista que mos-
tra a frequência ou em um gráfico com funções para calcular a frequência. 
O nome do novo campo pode ser facilmente escondido pelo uso de outro 
Figura 2. Estrutura do arquivo do exercício até o momento, como mostrado 
no Visualizador de Tabelas
77
QlikView Developer | 9 TRANSFORMAÇÃO DE DADOS BÁSICA
rótulo, de forma que ele não confunda os usuários do documento. Se você 
criar um campo calculado, presume-se que os dados sejam exclusivos. Caso 
contrário, você deverá executar distinct count.
Essa solução funciona bem em aplicativos menores, mas se os aplicativos 
tiverem muitos dados, ela poderá utilizar muita memória, pois você execu-
tará count distinct nesses campos com frequência. 
9.7 Usar um Contador de Registros em Campos-chave
Em vez de usar o campo-chave uma segunda vez, podemos usar um conta-
dor de registros na tabela na qual desejamos realizar o cálculo. Um contador 
de registros é simplesmente o número 1 de cada linha na tabela conectada 
ao campo de ID da tabela. Por exemplo, se quisermos contar o número de 
pedidos, criamos um contador de registros na tabela Orders e usamos a 
soma do contador de registros em gráficos.
O contador de registros pode ser criado da seguinte forma:
Load…,
OrderID,
1 as OrderRecordCounter,
…
FROM Orders;
Essa resolução do problema é mais eficiente quando se trabalha com gran-
des quantidades de dados, pois a soma de um valor numérico demanda 
muito menos do que a contagem de um valor.
Observação: cuidado ao criar Campos Count e Contadores de Registros 
para que o novo campo seja criado na tabela correta.
78
QlikView Developer | 9 TRANSFORMAÇÃO DE DADOS BÁSICA
9.8 Isto Está Certo?
Ao criar um gráfico no QlikView, é importante verificar se ele realmente 
mostra o que você deseja mostrar. Sempre escolha as expressões adequadas 
a cada caso. O QlikView possui diversas expressões. Segue um resumo des-
sas expressões e aquilo que elas mostram.
Expressão Resultado
Count(Salesperson) 4
Count(Distinct Salesperson) 3
Count(Article) 4
Count(Distinct Article) 2
Count(Quantity) 4
Sum(Quantity) 900
Salesperson Article CustomerNo Quantity
Karl A 10 100
Janne A 101 200
Ola B 10 250
Karl B 111 350
79
QlikView Developer | 9 TRANSFORMAÇÃO DE DADOS BÁSICA
Exercício: Transformação de Dados Básica
1 Crie um novo contador, ProductIDRecordCounter. O novo campo será 
usado para produzir a Medida Principal necessária Total Products Sold, 
conforme especificado no plano de projeto. Pense com cuidado na tabela 
na qual o campo ProductIDRecordCounter deve ser criado antes de sua 
criação.
2 Crie um novo contador OrderIDCounter. O novo campo será usado 
para calcular o número total de Orders. Crie o campo do contador de 
registros na tabela correta.
3 Recarregue.
4 Crie uma tabela dinâmica.
5 Use CompanyName, ProductName e Month como dimensões. 
6 A expressão deve calcular o número distinto de produtos vendidos e 
deve ser rotulada como [Total Products Sold]. Habilite Mostrar Subto-
tais por CompanyName e Month. Essa opção se encontra na aba Apre-
sentação.
7 Inclua uma nova expressão para o número de Pedidos realizados. Use o 
campo OrderIDCounter para esse cálculo. Rotule essa expressão como 
[Number of Orders].
8 Classifique as dimensões CompanyName e ProductName pela mesma 
expressão que [Number of Orders], na ordem Decrescente.
Parabéns por ter concluído a Lição 9. Na próxima lição, usaremos o Assis-
tente de Arquivo para criar um comando Load do QlikView.
Figura 3. A tabela dinâmica resultante
80
QlikView Developer | 10 ADICIONAR DADOS DE TEXTO
10 ADICIONAR DADOS DE TEXTO
Bem-vindo à Lição 10. Nesta lição, usaremos o Assistente de Arquivo para 
criar um comando Load do QlikView. Suas fontes de dados são dois arqui-
vos do Microsoft Excel.
10.1 Assistente de Arquivo
Os tipos de arquivo que o QlikView pode reconhecer são arquivos de texto 
delimitados (por exemplo, arquivos CSV), arquivos de registro fixo, arquivos 
DIF, arquivos do Excel, arquivos HTML e arquivos XML. Neste manual, 
esses tipos de arquivo são referidos como Arquivos de Tabela. Os arquivos 
podem ser carregados da rede local ou diretamente da Internet.
Os tipos de arquivo que o QlikView pode reconhecer são arquivos de texto 
delimitados (por exemplo, arquivos CSV), arquivos de registro fixo, arquivos 
DIF, arquivos do Excel, arquivos HTML e arquivos XML. Neste manual, 
esses tipos de arquivo são referidos como Arquivos de Tabela. Os arquivos 
podem ser carregados da rede local ou diretamente da Internet.
10.2 Arquivos do Excel
Vamos começar examinando as fontes de dados. 
10.2.1 Funcionários
Obtenha dados dos funcionários no arquivo Excel EmpOff.xls e na planilha 
Employee (na pasta C:\QlikViewTraining\Deveoper\DataSources). Primeiro, 
abra o arquivo no Excel para examinar seu conteúdo.
Objetivos
• Examinar fontes de dados de planilhas do Excel
• Usar o Assistente de Arquivo para carregar dados no QlikView
• Transformar (renomear um campo) dados com o Assistente de Arquivo
81
QlikView Developer | 10 ADICIONAR DADOS DE TEXTO
A chave desta tabela é o campo EmpID, que será renomeado porque é 
necessário vincular essa tabela a outra tabela no QlikView. Os nomes de 
campo devem ser exatamente iguais para que o QlikView vincule as tabelas. 
10.2.2 Escritórios
Os dados dos escritórios da empresa também serão obtidos do arquivo Excel 
EmpOff.xls, mas da planilha Office, que é a segunda planilha do arquivo 
Excel EmpOff.xls.
O campo-chave desta tabela é Office, e os valores nesse campo serão asso-
ciados com os valores no campo Office da tabela Employee.
Figura 1. Tabela Employees
Figura 2. Tabela Office
82
QlikView Developer | 10 ADICIONAR DADOS DE TEXTO
10.3 Geração de scripts usando o Assistente de Arquivo
Agora, vamos continuar com a geração do script de carga incluindo coman-
dos LOAD do QlikView para as duas planilhas que acabamos de analisar.
Exercício: Carregamento de arquivos do Microsoft Excel
Siga as etapas abaixo para carregar arquivos do Microsoft Excel no seu script:
1 Abra seu arquivo.
2 No menu Arquivo, selecione Editar Script. 
3 Crie uma nova aba e a nomeie File Data.
4 No grupo Dados dos arquivos, verifique se a caixa Caminhos Relativos 
está marcada.
5 Clique em Arquivo de Tabela. 
6 Localize o arquivo EmpOff.xls na pasta DataSources e clique em Abrir.
7 Verifique se as configurações padrão do Assistente de Arquivo estão 
corretas. Elas devem ser as seguintes:
Tipo: Arquivos Excel (xls)
Tabela: Employee$
Rótulos: Rótulos Incluídos
Compare suas configurações com a figura abaixo.
8 Clique no nome do campo EmpID e altere o nome para EmployeeID.
9 Pressione Enter para aplicar a alteração.
Figura 3. Assistente de Arquivo
83
QlikView Developer | 10 ADICIONAR DADOS DE TEXTO
10 Clique em Terminar para voltar para a caixa de diálogo Editar Script. 
11 Veja o novo comando LOAD gerado para os dados da tabela Employee.
12 Crie um comentário: Employees table
13 Exclua o comando DIRECTORY; gerado devido à especificação de 
Caminhos Relativos. Esses comandos não serão necessários no nosso 
script.
14 Inclua um campo Employee Hire Year usando a função Year, no campo 
[Hire Date]. Chame o novo campo de HireYear.
Year([Hire Date]) AS HireYear
15 Os comandos de script deverão ter a seguinteaparência:
//*************** Employees table ***************
Employees:
LOAD
EmpID AS EmployeeID,
[Last Name],
[First Name],
Title,
[Hire Date],
Year([Hire Date]) AS HireYear,
Office,
Extension,
[Reports To],
[Year Salary]
FROM Datasources\EmpOff.xls 
(biff, embedded labels, table is [Employee$]); 
Agora, siga o mesmo procedimento para os dados de Office. Essa tabela está 
na segunda planilha do arquivo Excel EmpOff.xls
1 No menu Arquivo, selecione Editar Script.
2 Crie uma nova aba e a nomeie File Data.
3 No grupo Dados dos arquivos, verifique se a caixa Caminhos Relati-
vos está marcada.
4 Clique em Arquivo de Tabela. 
5 Localize o arquivo EmpOff.xls na pasta DataSources e clique em Abrir.
6 Ao abrir o Assistente de Arquivo, certifique-se de selecionar a planilha 
do Excel Office$, na caixa rotulada como Tabela, na primeira página do 
assistente.
Observação: Os nomes de campos que contêm espaços devem estar entre 
colchetes (também é possível usar aspas " ”), por exemplo, [Last Name].
84
QlikView Developer | 10 ADICIONAR DADOS DE TEXTO
7 Adicione um comentário de tabela: Offices table. O script deve ter a apa-
rência a seguir:
//*************** Offices table ***************
Offices:
LOAD Office,
OfficeAddress,
OfficePostalCode,
OfficeCity,
OfficeStateProvince,
OfficePhone,
OfficeFax,
OfficeCountry
FROM Datasources\EmpOff.xls (biff, embedded labels, 
table 
is [Office$]); 
8 Salve e Recarregue o documento. 
9 Abra o Visualizador de Tabelas e observe os vínculos nos campos 
Office e EmployeeID.
10 Na aba Principal do layout, inclua Listas para OrderID, EmployeeID e 
Office. Faça as seleções e observe que as tabelas são vinculadas.
Parabéns por ter concluído a Lição 10. Na próxima lição, veremos diferen-
tes métodos para a criação de dados diretamente no Script do QlikView.
Figura 4. Selecionando outra planilha em um arquivo Excel.
85
QlikView Developer | 11 GERAR DADOS NO SCRIPT DO QLIKVIEW
11 GERAR DADOS NO SCRIPT DO QLIKVIEW
Bem-vindo à Lição 11. Nesta lição, examinaremos alguns métodos de cria-
ção de dados diretamente no script do QlikView. No exemplo deste capí-
tulo, uma das Dimensões Principais é SalesPerson. Como não há nenhum 
campo para SalesPerson incluído nos nossos dados de origem, será necessá-
rio gerar esse campo no QlikView durante o carregamento dos dados. Tra-
balharemos com cargas residentes e condicionais, além de apresentar o 
conceito de criação de várias tabelas lógicas no QlikView, com base em uma 
única tabela de dados de origem.
11.1 Resident Load
Uma tabela que foi carregada no script pode ser acessada usando o comando 
LOAD RESIDENT no script. No exercício desta lição, veremos como criar 
uma nova tabela lógica no QlikView com base em uma tabela carregada ante-
riormente (residente). Na verdade, SalesPerson é um valor concatenado de 
First Name e Last Name na tabela Employee. Começaremos criando esse 
campo na tabela Employees.
Exercício
1 Abra seu documento. 
2 No menu Arquivo, selecione Editar Script.
3 Localize a tabela Employees na aba Dados do Arquivo e substitua os 
campos First Name e Last Name pela seguinte linha:
[First Name]&' '&[Last Name] AS Name, 
4 Adicione uma nova aba ao script e a nomeie como Sales Person. Agora, 
vamos incluir outra tabela carregada no script mas, em vez de usar um 
assistente para criar o código, copiaremos o código existente e o modifi-
caremos. 
5 Localize a tabela Employees carregada na aba do script File Data. 
6 Copie todas as linhas deste comando, vá para a aba e para a aba Sales 
Person e cole.
Objetivos
• Usar Resident Load
• Criar dados a partir de outros dados e usando o comando Autogenerate
• Carregar dados usando scripts externos com Include
• Criar um calendário mestre
87
QlikView Developer | 11 GERAR DADOS NO SCRIPT DO QLIKVIEW
Você deve ter agora uma duplicata da tabela Employee carregada na 
nova aba. Edite o comando LOAD duplicado da seguinte forma:
7 Altere o nome da tabela para SalesPersons.
8 Apague ou remova o comentário de EmpID para mostrar apenas o 
campo EmployeeID (não vamos mais ler os dados de origem, mas os 
dados já carregados e o campo renomeado na tabela Employees). 
9 Remova a operação de concatenação de First Name e Last Name do 
campo Name e use o campo SalesPerson.
10 Remova os campos [Hire Date], HireYear, Office, Extension, [Reports 
To] e [Year Salary] do comando LOAD.
11 Remova a vírgula do campo Title (agora ele é o último campo nesta 
carga) e o renomeie como SalesTitle.
12 Remova a especificação FROM, pois esta carga não será lida de um 
arquivo em disco.
13 Inclua uma especificação RESIDENT que aponte para a tabela residente 
da qual desejamos carregar, no mesmo local que o FROM anterior.
O script deverá ter a seguinte aparência:
//************** SalesPersons table **************
SalesPersons:
LOAD
EmployeeID,
Name AS SalesPerson,
Title AS SalesTitle
RESIDENT Employees; 
Agora, queremos limitar a carga de todos os registros de dados de 
Employee àqueles que podemos identificar como vendedores. Para fazer 
isso, é necessário alterar novamente o script. 
14 Remova o ponto-e-vírgula (;) localizado após Resident Employee. 
15 Inclua a condição WHERE após a linha Resident, da seguinte forma:
WHERE Title LIKE 'Sales*' or Title='President';
O operador LIKE funciona com o curinga (*) e pesquisa o campo e loca-
liza todos os valores que começam com Sales.
16 Salve e Recarregue o documento. 
17 Inclua listas para Name, Title e SalesTitle na pasta Principal. 
18 Selecione tudo no campo SalesTitle. Observe que apenas alguns dos 
valores de Name e Title são mostrados como valores possíveis (em 
branco). Para que um valor da tabela Employees original seja incluído 
na nova tabela lógica SalesPersons, ele deve atender a pelo menos uma 
das condições definidas. A primeira condição é que o valor no campo 
Title deve começar com Sales. A segunda condição é que o campo Title 
seja igual a President.
19 Salve o documento.
88
QlikView Developer | 11 GERAR DADOS NO SCRIPT DO QLIKVIEW
11.2 Uso da tabela Orders para determinar o valor de Sales Person
Acabamos de usar um método bastante simples que nos permitiu examinar 
os valores de campo necessários para o campo SalesPerson. Esse método é 
perfeitamente adequado, mas o que acontecerá se obtivermos Employees 
(Funcionários) que estão envolvidos com vendas e que tenham um Title que 
não começa com Sales?
Para contornar esse problema, podemos ter o mesmo resultado usando uma 
solução mais elegante. Podemos começar observando que todos os vendedo-
res estão incluídos nos nossos dados de vendas. Depois, eles devem estar no 
campo EmployeeID da tabela Orders. 
Comecemos criando um novo campo EmployeeSalesID no script no qual a 
tabela Orders está sendo carregada. Ao fazer referência a esse campo poste-
riormente no script, podemos assegurar que todos os funcionários a quem 
tenham sido creditadas vendas serão listados no campo SalesPerson.
11.3 A Cláusula Where Exists
WHERE exists é uma cláusula utilizada para declarar se um registro deve 
ou não ser incluído na seleção. A seleção será incluída se o critério for verda-
deiro.
Exercício: Como usar a cláusula WHERE exists
1 Inclua a linha do script a seguir no comando LOAD da tabela Orders, 
imediatamente após o carregamento do campo EmployeeID.
EmployeeID as EmployeeSalesID,
2 Comente a condição WHERE no comando LOAD da tabela SalesPerson.
3 Crie uma nova condição WHERE para usar a função exists do QlikView. 
SalesPersons:
LOAD EmployeeID,
Name AS SalesPerson,
Title AS SalesTitle
RESIDENT Employees 
//WHERE Title LIKE 'Sales*' or Title='President';
WHERE exists(EmployeeSalesID, EmployeeID); 
A condição na cláusula Where assegura que os dados carregados tenham 
valores correspondentes no campo EmployeeSalesID. A função exists 
pode ser usada para verificar se um valor de campo específico existe em 
um campo especificado dos dados carregados até o momento. Cuidado 
com a ordem dos comandos no script, pois o campode referência deve 
ser preenchido antes de verificar os valores. Nesse exemplo, a tabela 
89
QlikView Developer | 11 GERAR DADOS NO SCRIPT DO QLIKVIEW
Orders deve ser carregada antes da tabela SalesPersons para que essa 
condição funcione corretamente. 
4 Salve e Recarregue.
5 Para verificar a funcionalidade do script, inclua uma lista OrderID, cli-
que com o botão direito do mouse e escolha Selecionar Todos. Os valo-
res associados das outras listas devem ficar evidentes com relação ao que 
sabemos sobre esses dados.
11.4 Incluir Arquivos
A variável Include especifica um arquivo contendo texto que deve ser inclu-
ído no script. Dessa forma, todo o script pode ser colocado em um arquivo. 
Ela é chamada usando
$(Include=filename)
Exemplo:
$(Include=abc.txt)
Nesta seção, aprenderemos como incluir ou fazer referência a um arquivo de 
script externo já existente no comando LOAD. 
Primeiro, vamos examinar o que vai ser incluído no script.
• Usando o Bloco de Notas ou uma ferramenta semelhante, abra o 
arquivo de texto email.txt localizado no diretório Datasources da pasta.
Esse arquivo contém o script a seguir.
Rem *** creates e-mail address;
LOAD 
EmpID as EmployeeID,
IF((ord("First Name") >= 65 AND ord("First Name") <= 
90), chr(ord("First Name")+32),
IF((Left("First Name",1)='Ä' OR Left("First 
Name",1)='ä'), chr(97),
IF((Left("First Name",1)='Å' OR Left("First 
Name",1)='å'), chr(97),
IF((Left("First Name",1)='Ö' OR Left("First 
Name",1)='ö'), chr(111),Left("First Name",1)))))&
IF((ord("Last Name") >= 65 AND ord("Last Name") <= 
90), chr(ord("Last Name")+32),
IF((Left("Last Name",1)='Ä' OR Left("First 
Name",1)='ä'), chr(97),
IF((Left("Last Name",1)='Å' OR Left("First 
Name",1)='å'), chr(97),
IF((Left("Last Name",1)='Ö' OR Left("First 
Name",1)='ö'), chr(111), Left("Last Name",1)))))&
90
QlikView Developer | 11 GERAR DADOS NO SCRIPT DO QLIKVIEW
IF((ord(Right("Last Name",1)) >= 65 AND 
ord(Right("Last Name",1)) <= 90), chr(Right("Last 
Name",1))+32,
IF((Right("Last Name",1)='Ä' OR Left("First 
Name",1)='ä'), chr(97),
IF((Right("Last Name",1)='Å' OR Left("First 
Name",1)='å'), chr(97),
IF((Right("Last Name",1)='Ö' OR Left("First 
Name",1)='ö'), chr(111), Right("Last Name",1)))))&
'@'&
IF(Office=1,'stockholm.se',
IF(Office=2,'lund.se',
IF(Office=3,'paris.fr',
IF(Office=4,'nice.fr','seattle.com')))) as "e-mail"
FROM datasources\empoff.xls(ansi, biff, embedded 
labels, table is [Employee$]);
Esse é um exemplo de um comando LOAD complexo, que se baseia princi-
palmente em comandos IF aninhados. Nesse caso, queremos criar endereços 
de e-mail a partir das informações contidas na nossa base de dados. É neces-
sário satisfazer várias condições, o que leva a um comando LOAD complexo 
que gera uma nova tabela lógica com dois campos. 
EmployeeID e o novo campo e-mail serão carregados, sendo que o primeiro 
fornece a associação com o restante da estrutura.
O comando LOAD cria uma assinatura que consiste na primeira letra do pri-
meiro nome, e a primeira e a última letra do último nome. Ele também asse-
gura que não haja letras maiúsculas na assinatura, somente letras minúsculas. 
Letras estrangeiras (suecas), como å, Å, ä, Ä, ö e Ö também são removidas. 
Após a assinatura, é anexado @, seguido do endereço do servidor apropriado. 
Esse é determinado pelo escritório no qual o funcionário trabalha.
Exercício: Como adicionar um comando INCLUDE
1 Abra seu arquivo.
2 No menu Arquivo, selecione Editar Script.
3 Posicione o cursor na parte inferior da aba Principal.
4 Selecione o comando Include no comando de menu Inserir.
5 Pesquise o arquivo email.txt localizado no diretório Datasources e clique 
em Abrir. A linha a seguir será incluída no script.
$(Include=datasources\email.txt)
Observe que não há um ponto-e-vírgula depois do comando, mas pode 
haver um ou mais pontos-e-vírgulas no arquivo de texto incluído.
6 Salve e Recarregue o script.
91
QlikView Developer | 11 GERAR DADOS NO SCRIPT DO QLIKVIEW
7 Inclua uma nova pasta ao layout e nomeie-a como Employees. Inclua o 
novo campo e-mail como uma lista.
11.5 Criar um Calendário 
Às vezes, ao trabalhar com datas, é melhor manter os campos de data fora 
das tabelas de fatos e criá-los em uma tabela separada. Por exemplo, você 
pode ver todas as datas e não apenas as datas em que alguma coisa aconte-
ceu. Nesse caso, é possível obter a data inicial e a data final da tabela de 
fatos, e usar essas datas para criar uma tabela de calendário. Nesta seção, 
examinaremos como obter o maior e o menor valor de data da tabela 
Orders. Colocaremos esses valores em variáveis que serão usadas para criar 
uma tabela Calendar.
11.6 Obtendo a Maior e a Menor Data da Tabela Orders
Existem várias formas de obter o menor e o maior valor de um campo em 
uma tabela. Uma delas é a função PEEK . Ela retorna o conteúdo do campo 
fieldname no registro especificado por linha na tabela de entrada tablename. 
Os dados são lidos a partir da base de dados interna do QlikView.
Ao usar funções de registro PEEK, a ordem de classificação da tabela sem-
pre é importante. Começaremos classificando a tabela Orders para que as 
datas fiquem na ordem correta.
Exercício: Classificando Dados
1 Abra a caixa de diálogo Editar Script e vá para a aba Orders.
2 Exceto pelo campo OrderDate, remova todos os campos Date da tabela 
Orders utilizando comentários. O motivo para manter OrderDate é que 
esse será o campo de conexão com a tabela Calendar.
3 Classifique a tabela Orders digitando o seguinte no final do comando 
SELECT, antes do ponto-e-vírgula. 
ORDER BY OrderDate ASC; 
O script deve ter a aparência a seguir depois que você incluir o comando 
ORDER BY.
Observação: Qualquer parte ou mesmo o script inteiro pode estar locali-
zado em um arquivo Include externo. Também pode haver vários arqui-
vos Include em um script.
92
QlikView Developer | 11 GERAR DADOS NO SCRIPT DO QLIKVIEW
//*************** Orders table ***************
Orders:
LOAD 
CustomerID,
EmployeeID,
Freight,
OrderDate,
// Year(OrderDate) AS Year,
// Month(OrderDate) AS Month,
// Day(OrderDate) AS Day,
OrderID,
OrderID AS OrderIDCounter,
ShipperID
;
SQL SELECT *
FROM Orders ORDER BY OrderDate ASC;
O comando ORDER BY define a ordem de classificação da tabela. Você 
pode usar um ou mais campos do comando para especificar como a tabela 
deve ser classificada. Os campos serão classificados na ordem mostrada, 
sendo que o primeiro campo terá prioridade, se você tiver mais de um 
campo. Os campos devem ser separados por vírgulas. Você também pode 
decidir classificar os campos na ordem Crescente ou Decrescente digi-
tando ASC ou DESC depois do último campo.
Depois que a tabela for classificada, poderemos usar a função PEEK para 
obter a primeira e a última OrderDate da tabela Orders.
11.7 Tabelas autogenerate
Uma outra forma de gerar dados no QlikView é usando a cláusula AUTO-
GENERATE no comando LOAD. A especificação de AUTOGENERATE em 
um comando LOAD gerará automaticamente um número de registros especí-
fico. Somente constantes e funções sem parâmetros são permitidas em 
AUTOGENERATE LOAD. As funções recno() ou rowno() são usadas com 
frequência para fornecer um número exclusivo para cada linha.
11.8 Criando Variáveis no Script
Podemos criar variáveis no script do QlikView para obter valores dinâmicos 
que podem mudar ao longo do tempo. Nesse caso, criaremos uma variável 
que contém a primeira data da tabela Orders e uma variável que contém a 
última data da tabela Orders.
93
QlikView Developer | 11 GERAR DADOS NO SCRIPT DO QLIKVIEW
Exercício: Criar Variáveis
1 Crie uma nova aba no script e a denomine Calendar.
2 Crie uma nova variável para a primeira data digitando o comando de 
script a seguir.
LET varMinDate = Num(Peek('OrderDate', 0, 
'Orders')); 
Ao criar uma variável no QlikView, é usado um comando SET ou LET 
para defini-la. O comando SET é usado quando você deseja que uma 
variável contenha o valor de caractere ou numérico à direita do sinal de 
Igual (=). O comandoLET é usado quando você precisa avaliar o que 
está à direita do sinal de Igual.
A sintaxe da função Peek é a seguinte:
 Peek( ‘fieldname’ [ , row [ , ‘tablename’ ] ] ). 
Fieldname é o campo do qual desejamos extrair um valor. Row é o 
número da linha do valor que desejamos obter. 0 representa a primeira 
linha da tabela e -1 representa a última linha da tabela. Tablename é o 
nome da tabela em que está o Fieldname.
No nosso script, desejamos localizar o valor em OrderDate na primeira 
linha da tabela Orders para obter a primeira data. Isso é possível porque 
classificamos a tabela por OrderDate anteriormente nesta lição.
3 Crie uma segunda variável para a última data digitando o comando a 
seguir.
LET varMaxDate = Num(Peek('OrderDate', -1, 
'Orders')); 
4 Crie uma terceira variável para today digitando o comando a seguir.
LET varToday = num(today());
5 Crie uma nova tabela digitando o script a seguir no Editor de Scripts.
//*************** Temporary Calendar ***************
DateField:
LOAD 
$(varMinDate) + rowno() - 1 AS Num, 
date($(varMinDate) + rowno() - 1) AS TempDate 
AUTOGENERATE 
$(varMaxDate) - $(varMinDate) + 1; 
94
QlikView Developer | 11 GERAR DADOS NO SCRIPT DO QLIKVIEW
O comando AUTOGENERATE cria a tabela na qual os números de 
linhas criadas dependem do número de dias entre as datas mínima e 
máxima. 
6 Salve e Recarregue o script.
11.9 O Calendário Mestre
Depois de criar todas as datas necessárias, podemos começar a criar uma 
tabela Master Calendar, na qual criaremos todos os campos de data necessá-
rios. Já criamos Year, Month e Day na tabela Orders. Vamos criar esses cam-
pos novamente, além de alguns outros campos de data que podem ser úteis 
no layout.
Exercício: Criação do Calendário Mestre
1 Abra o editor de scripts.
2 Na aba Calendar.
3 Crie uma tabela MasterCalendar que faz referência ao script mostrado a 
seguir.
//*************** Master Calendar ***************
MasterCalendar:
LOAD
TempDate AS OrderDate,
Week(TempDate) AS Week,
Year(TempDate) AS Year,
Month(TempDate) AS Month,
Day(TempDate) AS Day,
Weekday(TempDate) AS WeekDay,
'Q' & ceil(month(TempDate) / 3) AS Quarter,
Date(monthstart(TempDate), 'MMM-YYYY') AS
MonthYear,
Week(TempDate)&'-'&Year(TempDate) AS WeekYear,
inyeartodate(TempDate, $(varToday), 0) * -1 AS
CurYTDFlag,
inyeartodate(TempDate, $(varToday), -1) * -1 AS
LastYTDFlag 
RESIDENT DateField 
ORDER BY TempDate ASC;
Observe que tivemos de renomear o campo TempDate como OrderDate 
para obter uma conexão com a tabela Orders. Criamos dois campos indica-
95
QlikView Developer | 11 GERAR DADOS NO SCRIPT DO QLIKVIEW
dores. Os campos indicadores são criados usando a função inyeartodate. 
A sintaxe dessa função é a seguinte:
inyeartodate(date, basedate , shift [, first_month_of_= 1] )
A função inyeartodate retornará verdadeiro se a data estiver dentro da parte 
do ano que contém a basedate até e incluindo o último milissegundo da base-
date. O ano pode ser deslocado por shift. Shift é um inteiro em que o valor 0 
indica o ano que contém a basedate. Os valores negativos no shift indicam 
anos precedentes e os valores positivos indicam anos subsequentes.
Ao criar os campos indicadores CurYTDFlag e LastYTDFlag, criamos cam-
pos que podem ser usados em expressões quando desejamos ver apenas os 
resultados do ano atual e do mesmo período no último ano.
Antes de recarregar o script, é necessário remover a tabela DateField usada 
para criar as datas. Isso pode ser feito usando o comando DROP TABLE 
como a seguir.
DROP TABLE DateField;
O comando DROP TABLE remove totalmente a tabela da base de dados do 
QlikView.
4 Inclua o comando DROP TABLE no final do script na aba Calendar.
Parabéns por ter concluído a Lição 11. Na próxima lição, veremos conside-
rações sobre scripts.
96
QlikView Developer | 12 CONSIDERAÇÕES SOBRE SCRIPTS
12 CONSIDERAÇÕES SOBRE SCRIPTS
Bem-vindo à Lição 12. Ao ler dados no QlikView, às vezes encontramos 
estruturas de dados complexas que não podem ser entendidas diretamente e 
que podem ter um desempenho menos eficiente. Quando isso ocorre, você 
precisa saber como contornar o problema. Nesta lição, teremos uma visão 
geral sobre Chaves Sintéticas, Referências Circulares e Tabelas Parcialmente 
Desconectadas.
12.1 Mais informações sobre Chaves Sintéticas
Como já vimos, o QlikView cria chaves sintéticas quando duas ou mais tabe-
las carregadas tiverem dois ou mais campos em comum e com o mesmo nome. 
Essas chaves são campos anônimos que representam todas as combinações 
ocorridas da chave composta. Quando o número de chaves compostas 
aumentar, dependendo da quantidade de dados, estrutura da tabela e outros 
fatores, o QlikView pode ou não tratá-las com tolerância. O QlikView pode 
acabar usando uma quantidade excessiva de tempo e/ou memória. Infeliz-
mente, é praticamente impossível prever as limitações reais, o que deixa ape-
nas o método de tentativa e erro como uma forma prática de determiná-las. 
Dessa forma, recomendamos que o designer do aplicativo faça uma análise 
geral da estrutura pretendida da tabela. 
As soluções típicas incluem:
• Renomear os campos (como mostrado na Lição 7)
• Formar suas próprias chaves não-compostas, normalmente usando a 
concatenação de caracteres dentro de uma função de script AutoNum-
ber.
• Certificar-se de que somente os campos necessários sejam conectados. 
Por exemplo, se você usar uma data como chave, certifique-se de não 
carregar ano, mês ou dia_do_mês de mais de uma tabela de entrada.
Objetivos
• Criar uma chave sintética
• Identificar referências circulares
• Definir tabelas parcialmente desconectadas
• Definir por que essas condições devem ser evitadas
97
QlikView Developer | 12 CONSIDERAÇÕES SOBRE SCRIPTS
Exercício: Leitura da Tabela Shipments
Agora, vamos incluir o script de carga para trazer a tabela Shipments.
1 No menu Arquivo, selecione Editor de Script. 
2 Vá para a parte inferior da aba Dimensions.
3 Clique no botão Selecionar. A caixa de diálogo Criar Comando Select é 
exibida.
4 Selecione a tabela Shipments e leia todos os campos do documento 
QlikView com preceding load.
5 Salve e Recarregue o documento.
6 Abra o Visualizador de Tabelas e estruture as tabelas de forma que seja 
fácil acompanhar as conexões.
Como você pode ver no Visualizador de Tabelas, a estrutura mudou bas-
tante desde a última vez que examinamos a estrutura das tabelas. Em vez de 
ter duas tabelas de fatos em Orders e OrderDetails, agora temos uma Tabela 
$Syn 3 que se conecta às tabelas de fatos e dimensões.
12.1.1 Tabelas de Chaves Sintéticas
Não é recomendável ter várias chaves comuns em várias tabelas em uma 
estrutura de dados do QlikView. Isso pode fazer o QlikView usar chaves 
complexas (também conhecidas como chaves sintéticas) para gerar as cone-
xões na estrutura de dados. 
Em geral, as chaves sintéticas utilizam muitos recursos e podem tornar os 
cálculos lentos e, em situações extremas, sobrecarregar o documento. Elas 
também dificultam a compreensão e a manutenção do documento. 
Existem casos em que não é possível evitar as chaves sintéticas (por exem-
plo, em tabelas de Correspondência de Intervalo) mas, em geral, as chaves 
sintéticas devem ser sempre eliminadas, quando possível.
Quando carregamos a tabela Shipments, havia vários campos comuns à 
tabela OrderDetails e à tabela Shipments e, por isso, o QlikView criou um 
novo campo, $Syn 1. 
Além disso, havia vários campos comuns à tabela Orders e à tabela Ship-
ments, o que fez com que o QlikView gerasse os campos $Syn 2 e $Syn 3. 
Não é raro obter uma estrutura de dados semelhante a essa no QlikView; 
porém, devido aos motivos citados, você sempre deve tentar evitar esse tipo 
de estrutura. 
Existem várias maneiras de eliminar as chaves sintéticas no QlikView, e é 
importante conhecer a estrutura de dados e as fontes de dados para criar a 
solução correta.
98
QlikView Developer | 12 CONSIDERAÇÕES SOBRE SCRIPTS
Existe um relacionamento de um para um entre as tabelas OrderDetails e 
Shipments.Também podemos ver que o campo ProductID obtém os valores 
diretamente da tabela OrderDetails. Por isso, podemos remover o campo 
ProductID da tabela Shipments. 
Para obter uma chave exclusiva entre as tabelas OrderDetails e Shipments, 
podemos criar uma chave composta dos campos comuns restantes OrderID 
e LineNo.
Exercício: Chaves Sintéticas
1 No menu Arquivo, selecione Editor de Script.
2 Localize a tabela Shipments.
3 Comente o campo ProductID.
4 Crie um campo composto de OrderID e LineNo usando “&” para con-
catenar os campos. Também coloque um separador entre os campos. 
Nomeie o campo chave como OrderLineKey.
(OrderID &'-'& LineNo) AS OrderLineKey,
5 Use a função autonumber para obter um número em vez de texto para o 
campo chave. Isso é especialmente útil ao trabalhar com tabelas grandes, 
pois os valores numéricos ocupam menos memória que os valores de 
texto.
autonumber(OrderID &'-'& LineNo) AS OrderLineKey,
6 Comente os campos OrderID e LineNo. Isso é necessário para evitar a 
chave sintética e ter apenas um campo de conexão (OrderLineKey) entre 
as tabelas Shipments e OrderDetails.
O script deve ter a seguinte aparência:
//*************** Shipments table *************** 
Shipments: 
LOAD
CustomerID, 
EmployeeID, 
// LineNo, 
// OrderID, 
autonumber(OrderID &'-'& LineNo) AS
OrderLineKey, 
// ProductID, 
ShipmentDate, 
ShipperID
; 
SQL SELECT * 
FROM Shipments; 
99
QlikView Developer | 12 CONSIDERAÇÕES SOBRE SCRIPTS
7 Crie a mesma OrderLineKey na tabela OrderDetails.
 autonumber(OrderID &'-'& LineNo) as OrderLineKey,
8 Salve e Recarregue o script. O QlikView avisa que foram encontradas 
referências circulares ou loops na estrutura de tabelas. 
9 Clique em OK.
Ao trabalhar com estruturas de dados complexas que contêm muitas tabe-
las, é possível ter situações em que a interpretação dos dados não é precisa. 
O QlikView foi desenvolvido de forma a lidar com as estruturas mais com-
plexas e interpretá-las corretamente, mas há algumas limitações. É impor-
tante estar ciente dessas limitações e saber como solucionar o problema dos 
loops quando eles surgirem.
12.2 Referências Circulares
Considere o exemplo a seguir, que consiste em uma estrutura de dados sim-
ples com três tabelas:
Nesse exemplo, é fácil detectar uma referência circular, mas isso pode ser 
mais difícil em estruturas complexas.
As estruturas de dados desse tipo devem ser evitadas, pois elas podem causar 
ambiguidades na interpretação dos dados.
Infelizmente, as referências circulares são bastante comuns e não é raro 
encontrálas. Às vezes, elas são causadas por um desenho de base de dados 
deficiente, mas em alguns casos são inevitáveis.
Em algumas situações, um campo (ou uma tabela) pode ter várias funções; 
por exemplo, uma empresa pode ser fornecedor e cliente. O campo (ou a 
tabela) deverá então ser carregado no QlikView duas vezes com nomes dife-
rentes.
O QlikView resolve o problema de referências circulares definindo uma 
tabela parcialmente desconectada. Se o QlikView encontrar um loop ao exe-
cutar o script de carga, uma caixa de diálogo de aviso será mostrada e uma 
ou mais tabelas serão definidas como parcialmente desconectadas. 
100
QlikView Developer | 12 CONSIDERAÇÕES SOBRE SCRIPTS
O QlikView tentará tornar a tabela mais longa parcialmente desconectada. 
Muitas vezes, essa é uma tabela de transações. Se desejar sair do padrão do 
QlikView, 
você poderá definir a tabela a ser parcialmente desconectada usando um 
comando loosen table no script. Também é possível alterar interativamente 
a configuração de tabelas parcialmente desconectadas após a execução do 
script na aba Tabelas das Propriedades do Documento. 
Você também pode determinar as tabelas da sua estrutura que são definidas 
para serem parcialmente desconectadas usando o utilitário Visualizador de 
Tabelas. As tabelas parcialmente desconectadas mostram linhas pontilhadas 
como conectores.
Para evitar referências circulares e tabelas parcialmente desconectadas, reno-
meie os campos que causam os loops. Às vezes você terá de unir várias tabe-
las em uma para resolver a referência circular.
12.3 Verificar os Números
Um aspecto importante do desenvolvimento de documentos QlikView é a 
necessidade de confirmar se os dados que estão sendo carregados no QlikView 
estão corretos.
Muitos desenvolvedores usariam uma combinação de listas e caixas de esta-
tísticas, juntamente com números dos dados originais, para assegurar que o 
documento QlikView esteja funcionando corretamente.
Por exemplo, você está trabalhando em um documento de Análise de Ven-
das e precisa verificar os números das vendas, por região e por data, para 
certificar-se de que o script de carga e o calendário estejam funcionando cor-
retamente no documento QlikView.
Nesse exemplo, você pode criar uma aba no QlikView e incluir listas para as 
regiões, datas e produtos de vendas, além de incluir uma caixa de estatísticas 
com a soma do valor de vendas.
Em seguida, é possível fazer seleções e confirmar os números com o original.
Para cada grande alteração no design, é necessário desenvolver um meio de 
confirmar se os números e os dados ainda estão corretos.
Exercício: Verificar os números
1 Abra seu documento QlikView.
2 Abra o arquivo SummaryReport.xls (um arquivo Excel que se encontra 
no diretório Datasources)
3 Clique na pasta Main.
4 Adicione listas para DivisionName, Year e CategoryName.
101
QlikView Developer | 12 CONSIDERAÇÕES SOBRE SCRIPTS
5 Inclua uma caixa de estatísticas com a soma dos números de vendas. 
(Dica: use o campo LineSalesAmount.)
6 Faça as Seleções de Year, Division e CategoryName, e compare os resul-
tados de vendas com o Relatório Resumido do Excel. 
7 Clique em um mês e em uma região, e compare os resultados do Qli-
kView com os resultados no Relatório Resumido do Excel. Verifique 
duas vezes se os números são coerentes em um nível superior.
8 Crie uma tabela dinâmica (objeto gráfico) usando as mesmas dimensões 
das listas acima (Divisions, Year and CategoryName) e a expressão para 
vendas usada na Caixa de Estatísticas (Sum(LineSalesAmount).. Tam-
bém será necessário definir a caixa de verificação Mostrar Subtotais 
para as dimensões Year e Divisions.
Parabéns por ter concluído a Lição 12. Na próxima lição, obteremos infor-
mações sobre os Arquivos de Dados QlikView (QVD).
Figura 1. Assim deve ser a aparência da tabela dinâmica de cré-
ditos adicionais.
102
QlikView Developer | 13 ARQUIVOS QVD (ARQUIVOS DE DADOS QLIKVIEW)
13 ARQUIVOS QVD (ARQUIVOS DE DADOS QLIKVIEW)
Bem-vindo à Lição 13. Um dos recursos mais importantes da criação de 
scripts no QlikView é a utilização dos arquivos QVD. Nesta lição, explora-
remos como usar os arquivos de dados QlikView.
13.1 Sobre os arquivos QVD
Um arquivo QVD (Dados do QlikView) é um arquivo que contém uma 
tabela de dados exportada do QlikView. O QVD é um formato nativo do 
QlikView Só pode ser gravado e lido no QlikView. O formato de arquivo é 
otimizado para agilizar a leitura de dados de um script do QlikView, mas 
também é bastante 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.
13.2 Formato de Arquivo QVD
O arquivo QVD é uma tentativa de selar o compromisso do desempenho 
ideal do QlikView na leitura e gravação de arquivos e na representação com-
pacta. Um arquivo QVD contém exatamente uma tabela. Em termos concei-
tuais, é muito semelhante a qualquer arquivo de tipo csv, dif, biff ou fix, e 
consiste em três partes:
• Um cabeçalho XML composto de modo apropriado (com o conjunto de 
caracteres UTF-8), que descreve os campos da tabela, o layout das infor-
mações subsequentes e alguns outros metadados.
• Tabelas Symbols compostas por bytes.
• Dados da tabela atual compostos por bits.
Objetivos
• Definir arquivos QVD
• Explicar porque os arquivos QVD são tão importantes
• Criar um arquivo QVD manualmente
103
QlikView Developer | 13 ARQUIVOS QVD (ARQUIVOS DE DADOS QLIKVIEW)13.3 Utilização de Arquivos QVD
Os arquivos QVD podem ser usados para vários fins. Pelo menos quatro 
usos principais podem ser facilmente identificados. Em muitos casos, dois 
ou mais usos serão aplicáveis ao mesmo tempo.
• Aumento da Velocidade de Carga - Se forem armazenados em buffer 
partes de dados de entrada de arquivos QVD que não mudam ou que 
mudam lentamente, a execução do script poderá ser consideravelmente 
mais rápida para conjuntos grandes de dados. Para conjuntos grandes de 
dados, será mais fácil atender aos limites da janela de tempo de recarga. 
No desenvolvimento de documentos, muitas vezes é necessário executar 
o script repetidamente. O uso de buffers de QVD nessas situações pode 
reduzir significativamente os tempos de espera repetidos, mesmo que o 
conjunto de dados não seja grande.
• Diminuição da Carga nos Servidores de Base de Dados - Se forem arma-
zenadas em buffer partes de dados de entrada de arquivos QVD que não 
mudam ou que mudam lentamente, o volume de dados lidos de fontes de 
dados externas pode ser reduzido de forma considerável. Isso reduz a 
carga nas bases de dados externas e o tráfego na rede. Quando vários 
scripts do QlikView compartilham os mesmos dados, basta carregá-los 
uma vez a partir da base de dados de origem. Os outros documentos 
podem utilizar os dados de um arquivo QVD.
• Consolidação de dados de vários documentos QlikView - É possível con-
solidar dados de vários aplicativos QlikView com a ajuda de arquivos 
QVD. Com o comando de script Binary, é possível carregar dados de 
apenas um único documento QlikView para outro. Com os arquivos 
QVD, um script do QlikView pode combinar dados de qualquer número 
de documentos QlikView. Isso aumenta as possibilidades, por exemplo, 
para documentos 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 é, carregar apenas 
os novos registros a partir de uma base de dados crescente. Leia mais 
sobre os arquivos QVD e Carga Incremental na Seção de Ajuda ou no 
Manual de Referência. 
104
QlikView Developer | 13 ARQUIVOS QVD (ARQUIVOS DE DADOS QLIKVIEW)
13.4 Criação de Arquivos QVD
Os arquivos QVD podem ser criados de três maneiras. Veremos o primeiro 
método neste curso.
• Criados e nomeados explicitamente a partir do script por meio do comando 
STORE. Basta indicar no script que uma tabela lida anteriormente ou parte 
de uma tabela residente deve ser exportada para um arquivo nomeado 
explicitamente em um local de sua escolha.
• Criados e mantidos automaticamente a partir do script. Ao preceder um 
comando LOAD ou SELECT com o prefixo BUFFER, o QlikView criará 
automaticamente um arquivo QVD que, se determinadas condições 
forem atendidas, será usado no lugar da fonte de dados original ao 
recarregar dados posteriormente. O arquivo QVD terá um nome oculto 
baseado em um hash do comando LOAD/SELECT e normalmente reside 
na pasta Dados de aplicativos do Windows.
• Criados e nomeados explicitamente a partir de layout ou via Automa-
ção. Dados exportados do layout do QlikView por meio de comandos 
da GUI ou macros de Automação. Na GUI, você encontrará QVD como 
um dos formatos possíveis de exportação, no comando EXPORT... , loca-
lizado no menu de objeto da maioria dos objetos de pasta.
13.5 Comando Store
Um arquivo QVD ou CSV pode ser criado por um comando Store no script. 
O comando criará um arquivo QVD ou CSV nomeado explicitamente. E só 
pode exportar campos de uma tabela lógica. Os valores de texto são exporta-
dos para o arquivo CSV no formato UTF-8. É possível especificar um delimi-
tador. O comando Store para um arquivo CSV não suporta exportação de 
BIFF.
13.6 Criação Manual de um Arquivo QVD no Script
Criaremos agora um arquivo QVD no script de carga usando o comando 
Store. Esse comando criará um arquivo QVD nomeado explicitamente.
A sintaxe do comando store é a seguinte:
STORE 
Discount,
LineNo,
OrderID
FROM OrderDetails into OrderDetails.qvd; 
Observe que os campos em <field list> após o comando Store podem ser 
renomeados usando As.
105
QlikView Developer | 13 ARQUIVOS QVD (ARQUIVOS DE DADOS QLIKVIEW)
Exercício: Criação Manual do QVD
1 Abra seu documento.
2 No menu Arquivo, selecione Editar Script.
3 Localize o comando LOAD da tabela Customers na aba Dimensions.
4 Após o comando LOAD da tabela Customers, inclua o comando STORE 
da seguinte forma:
STORE Customers into datasources/customers.qvd;
5 Clique em OK.
6 Salve seu arquivo. 
7 Recarregue o script.
Você não verá nenhuma alteração na pasta System no seu documento. 
Não existem novas tabelas ou novos campos lógicos. O comando 
STORE que você acabou de incluir não afeta seu documento QlikView 
atual, além de executar um comando de script adicional. No entanto, 
quando esse comando tiver sido executado, existirá um novo arquivo de 
dados que poderá ser lido por esse documento QlikView ou por qual-
quer documento QlikView com acesso à pasta na qual o arquivo custo-
mers.qvd foi colocado. Para testar isso, vamos substituir 
temporariamente o comando Select de Customers por um novo 
comando Load do arquivo customers.qvd que acabamos de criar.
8 Abra novamente a caixa de diálogo Editar Script.
9 Comente o comando SELECT de Customers e o comando STORE que 
acabamos de incluir.
10 Adicione um novo comando LOAD de arquivos de tabela usando o 
Assistente de Arquivos de Tabela. Localize o arquivo customers.qvd 
na pasta Datasources e abra-o
106
QlikView Developer | 13 ARQUIVOS QVD (ARQUIVOS DE DADOS QLIKVIEW)
11 Observe se o Tipo está indicado corretamente como QVD. 
12 Clique em Terminar.
13 Remova o comando Directory.
107
QlikView Developer | 13 ARQUIVOS QVD (ARQUIVOS DE DADOS QLIKVIEW)
14 Adicione o rótulo de tabela Customers ao novo comando LOAD. O script 
deve ter a seguinte aparência:
// ************** Customers table **************
Customers:
LOAD 
Address, 
City, 
CompanyName, 
ContactName, 
Country, 
CustomerID, 
DivisionID, 
Fax, 
Phone, 
PostalCode, 
StateProvince
FROM Datasources\customers.qvd (qvd); 
15 Clique em OK.
16 Salve seu arquivo.
17 Recarregue o script.
Você não perceberá mudanças na pasta System no seu documento, pois não 
alteramos nenhuma tabela, apenas o local e o tipo de onde os dados são 
lidos. Em um ambiente normal, provavelmente você também veria uma 
grande diferença no tempo que leva para a leitura da tabela Customer, pois 
um arquivo QVD é lido no QlikView muito rápido.
Independentemente do método QVD usado, quando nenhuma transforma-
ção for aplicada nos campos lidos (além da renomeação de campos), será 
usado o modo de leitura super-rápido (otimizado). Você pode determinar o 
modo qvd usado examinando a caixa de diálogo Progresso da Execução do 
Script.
108
QlikView Developer | 13 ARQUIVOS QVD (ARQUIVOS DE DADOS QLIKVIEW)
13.7 Funções de Script do Arquivo QVD
Existem várias funções de script para o acesso aos dados localizados no cabe-
çalho XML de um arquivo QVD. Essas funções estão descritas na seção Fun-
ções de Arquivo do Manual de Referência do QlikView. Veja um exemplo:
QvdCreateTime ( filename ) 
Retornará a data/hora do cabeçalho de XML de um arquivo QVD, se 
houver, caso contrário, retornará o valor NULL.
QvdNoOfRecords ( filename ) 
Retorna o número de registros que se encontra no momento em um 
arquivo QVD.
QvdNoOfFields ( filename )
Retorna o número de campos de um arquivo QVD.
QvdFieldName ( filename, fieldno ) 
Retorna o nome do número de campo field_no, se existir em um arquivo 
QVD (caso contrário, será NULL).
QvdTableName ( filename )
Retorna o nome da tabela contida em um arquivo QVD.
Parabéns por ter concluído a Lição 13.
109
QlikView Developer | 14 TABELAS DE MAPEAMENTO
14 TABELAS DE MAPEAMENTO
Bem-vindo à Lição 14. No QlikView, há uma forma eficiente de incluir cam-
pos únicos em uma tabela. Nesta lição, veremos o que fazer quando é neces-
sário adicionar um campo extra a uma tabelae como limpar a estrutura de 
dados com as tabelas de mapeamento.
14.1 Tabelas de Mapeamento
O prefixo Mapping é usado para criar uma tabela de mapeamento. As tabe-
las lidas usando Mapping Load ou Mapping Select são tratadas de forma 
diferente das outras tabelas. Elas serão armazenadas em uma área separada 
da memória e usadas somente como tabelas de mapeamento durante a exe-
cução do script. Depois da execução do script, serão automaticamente elimi-
nadas.
• A tabela de mapeamento deve ter duas colunas: a primeira contendo 
valores de comparação e, a segunda, os valores de mapeamento deseja-
dos. 
• As duas colunas devem ser nomeadas, mas os nomes não têm relevância 
neles mesmos. Os nomes de coluna não têm conexão com os nomes de 
campo nas tabelas de entrada normais. 
• Quando as tabelas de mapeamento são usadas para mapear um determi-
nado valor de campo ou uma expressão, esse valor será comparado aos 
valores da primeira coluna da tabela de mapeamento. Se encontrado, o 
valor original será substituído pelo valor correspondente na segunda 
coluna da tabela de mapeamento. Se não for encontrado, nenhuma subs-
tituição será feita.
14.2 Limpeza da estrutura da tabela
Provavelmente, você desejará minimizar o número de tabelas no QlikView. 
(Omitir as tabelas desnecessárias.) Os recursos do computador são utiliza-
dos para fazer os cálculos entre tabelas. Se você tiver tabelas com apenas 
dois campos, mapeie-as para outra tabela e, assim, minimize o número de 
tabelas. 
Vejamos o Visualizador de Tabelas para ver se existem tabelas que podem 
ser mapeadas facilmente para outra tabela.
Objetivos
• Identificar quando usar tabelas de mapeamento
• Identificar áreas para limpeza da estrutura da tabela
111
QlikView Developer | 14 TABELAS DE MAPEAMENTO
Exercício com Tabelas de Mapeamento
1 Retorne ao arquivo com o qual você está trabalhando nesta lição.
2 Abra o Visualizador de Tabelas.
No Visualizador de Tabelas, algumas tabelas têm apenas dois campos. 
Essas tabelas poderiam ser mapeadas para as tabelas de conexão. 
Vamos começar mapeando a tabela Shippers e a tabela Orders
.
3 Abra o Editor de Scripts e crie uma aba depois da aba Main. Nomeie-a 
como MappingTables
4 Mude a tabela que se refere ao script para a tabela Shippers, como a seguir.
Shippers_Map:
MAPPING LOAD 
ShipperID,
CompanyName AS Shipper;
SQL SELECT * 
FROM Shippers; 
5 Inclua a linha a seguir na parte inferior da tabela Orders.
applymap('Shippers_Map', ShipperID, 
'MISSING') AS Shipper
Figura 1. O Visualizador de Tabelas
112
QlikView Developer | 14 TABELAS DE MAPEAMENTO
A linha acima do script instrui o QlikView a usar a palavra MISSING no 
campo Shipper quando não for possível encontrar nenhum valor de Shippe-
rID correspondente.
6 Verifique se o script da tabela Orders se parece com este:
//*************** Orders table 
***************
Orders:
LOAD CustomerID,
EmployeeID,
EmployeeID AS EmployeeSalesID,
Freight,
OrderDate,
year(OrderDate) AS Year,
month(OrderDate) AS Month,
day(OrderDate) AS Day,
applymap('Quarters_Map', 
num(month(OrderDate)),
null()) AS Quarter,
date(monthstart(OrderDate), 'MMM-
YYYY') AS 
MonthYear,
OrderID,
OrderID AS OrderIDCounter,
 ShipperID,
applymap('Shippers_Map', ShipperID, 
'MISSING')
AS Shipper;
SQL SELECT * 
FROM Orders; 
7 Salve o documento e Recarregue o script.
8 Examine o Visualizador de Tabelas para ver se agora, de fato, o campo 
Shipper faz parte da tabela Orders
113
QlikView Developer | 14 TABELAS DE MAPEAMENTO
.
Exercício:
1 Abra a caixa de diálogo Editar Script.
2 Mapeie a tabela Divisions para a tabela Customers. Remova a tabela 
Divisions (ou exclua os comentários) da aba Dimensions e crie uma 
tabela de mapeamento na aba MappingTables. 
Existem outras tabelas que podem ser mapeadas para outra tabela? Verifi-
que o Visualizador de Tabelas. Procure tabelas com apenas dois campos. 
Discuta com o instrutor do curso.
//*************** Divisions ***************
Divisions_Map:
MAPPING LOAD
DivisionID,
DivisionName;
SQL SELECT *
FROM Divisions;
//*************** Customers ***************
Customers:
LOAD Address,
City,
CompanyName,
ContactName,
Country,
CustomerID,
DivisionID,
applymap ('Divisions_Map', DivisionID) 
as
Division,
Fax,
Figura 2. Agora, o campo Shipper faz parte da tabela Orders.
114
QlikView Developer | 14 TABELAS DE MAPEAMENTO
Phone,
PostalCode,
StateProvince;
SQL SELECT *
FROM Customers;
Parabéns por ter concluído a Lição 14. Na próxima lição, teremos uma 
visão geral sobre tabelas condicionais, agregação, união de tabelas e carga 
anterior.
115
QlikView Developer | 15 CARREGAMENTO DE DADOS DE ORÇAMENTO
15 CARREGAMENTO DE DADOS DE ORÇAMENTO
Bem-vindo à Lição 15. Nesta lição, veremos como identificar tabelas cruza-
das e como usar o Assistente de Arquivo para transformar dados.
15.1 Tabelas Cruzadas
Uma tabela cruzada é um tipo comum de tabela que apresenta uma matriz 
de valores entre duas listas retangulares de dados de cabeçalho. Ela pode ter 
a aparência da tabela a seguir.
Se essa tabela for simplesmente carregada no QlikView, o resultado será um 
campo Year e um campo para cada um dos meses. Geralmente, esse resul-
tado não seria o desejado. Provavelmente, seria preferível que fossem gera-
dos três campos, um para cada categoria de cabeçalho (Year e Month) e um 
para os valores de dados dentro da matriz.
Para isso, é preciso incluir o prefixo crosstable no comando Load ou 
Select. O comando para carregar essa tabela cruzada poderia ser:
crosstable (Month, Sales) load * from ex1.csv;
Objetivos
• Identificar tabelas cruzadas
• Usar o Assistente de Arquivo para transformar os dados e criar o 
script de carga
117
QlikView Developer II | 15 CARREGAMENTO DE DADOS DE ORÇAMENTO
O resultado no QlikView seria o seguinte:
Nos dados do exemplo, há uma tabela Budget para Employees e Offices. 
Vamos carregar isso em nosso documento QlikView. A tabela Budget é 
criada como uma tabela cruzada, sendo necessário convertê-la ao fazer sua 
leitura no QlikView. Também incluiremos na tabela Budget um campo que 
nos permita alterar os valores do orçamento para ajudar no planejamento.
15.2 Leitura de Tabelas Cruzadas
Primeiro, abriremos a tabela Budget contida no arquivo Excel. É necessário 
retrabalhar essa tabela para que ela possa ser lida no QlikView. Felizmente, 
o QlikView tem uma funcionalidade excelente para interpretar e alterar 
tabelas, de forma que não precisamos alterar a aparência original do 
arquivo Excel. Inicialmente, use o Assistente para Tabelas Cruzadas para 
carregar os dados e fazer ajustes no script. Use também um campo de 
entrada para carregar os dados e fazer ajustes no script. 
118
QlikView Developer | 15 CARREGAMENTO DE DADOS DE ORÇAMENTO
Exercício sobre carregamento de dados de 
orçamento
1 Abra a caixa de diálogo Editar Script.
2 Crie uma nova aba após a aba Sales Person e a denomine Budget.
3 Clique no botão Arquivos de Tabela e abra o arquivo Budget.xls que 
está na pasta para esta lição.
4 No Assistente de Arquivo, selecione o Tamanho do Cabeçalho como 
Linhas e defina o valor como 1.
Em seguida, precisamos certificar que não haja linhas vazias no campo 
Office. 
5 Clique no botão Próximo e clique em Ativar Passo de Transformação 
para transformar a tabela.
6 Clique na aba Preencher.
7 Clique no botão Preencher….
8 Clique em Condição da célula. Se a célula estiver vazia, queremos que 
ela seja preenchida. 
9 Clique em OK.
10 Clique em OK.
11 Clique em Avançar.
12 Clique em Tabela Cruzada… para alterar a tabela cruzada em uma 
tabela normal.
13 Clique nos Campos do Qualificador e digite 2 para expandi-los de forma 
a incluir os campos Office e EmployeeID em roxo. Um campo qualifica-
dor em uma tabela cruzada não deve ser alterado durante o carrega-
mento da Tabela cruzada. 2006 não é um campo qualificador. Ele é o 
primeiro dos campos que desejamos transformar para que os anos sejam 
colocados em um campo e os valores do orçamento sejam colocadosem 
outro campo.
14 Denomine o Atributo BudgetYear.
15 Denomine os dados como BudgetAmount.
16 Clique em OK.
119
QlikView Developer II | 15 CARREGAMENTO DE DADOS DE ORÇAMENTO
17 Clique em Terminar. Você deve ter a tabela a seguir no script.
CROSSTABLE(BudgetYear, BudgetAmount, 2)
LOAD
Office,
EmployeeID,
[2008],
[2009],
[2010],
[2011],
[2012]
FROM Datasources\Budget.xls (biff, header is line, 
embedded labels, table is [Sheet1$], 
filters(Replace(1, top, StrCnd(null))))
; 
18 Nomeie esta tabela como BudgetTemp.
19 Salve e Recarregue o documento.
20 Abra o Visualizador de Tabelas. Como você pode ver, há uma chave 
sintética entre as tabelas BudgetTemp e Employees. Queremos remover 
essa chave sintética. Ajuste o script para obter os dados que você precisa 
da tabela BudgetTemp. Depois, remova-a. 
21 Vá para o Editor de Scripts.
120
QlikView Developer | 15 CARREGAMENTO DE DADOS DE ORÇAMENTO
22 Altere a tabela BudgetTemp para o script abaixo substituindo cada 
nome de campo por um asterisco. Isso fará com que o script seja execu-
tado mesmo quando os rótulos dos dados mudarem. 
BudgetTemp:
CrossTable(BudgetYear, BudgetAmount, 2)
LOAD 
*
FROM
[Datasources\Budget.xls] (biff, embedded labels, 
header is 1 lines, table is Sheet1$, 
filters(Replace(1, top, StrCnd(null))))
;
23 Para consertar a primeira parte do problema da chave sintética, vá para 
a aba Dados do Arquivo e inclua a seguinte linha à parte superior da 
tabela Employees.
Office&'-'&EmpID AS BudgetKey,
24 Salve e Recarregue o script.
Agora, trate do campo da chave sintética no comando Budget.
25 Vá para o Editor de Scripts e coloque o cursor logo após os comandos 
SET na aba Main.
26 Na aba Budget, crie uma tabela Budget: 
Budget:
LOAD 
Office &'-'& EmployeeID AS BudgetKey,
BudgetYear,
BudgetAmount AS BudgetPrognosis,
BudgetAmount
RESIDENT BudgetTemp
;
DROP TABLE BudgetTemp; 
27 Posicione o cursor perto da parte superior, após o comando CONNECT 
da aba Main.
INPUTFIELD BudgetPrognosis; 
O comando INPUTFIELD informa o QlikView que o campo será um 
campo INPUT. Isso deve ser declarado no script para que você possa 
realmente ler o campo em uma tabela.
121
QlikView Developer II | 15 CARREGAMENTO DE DADOS DE ORÇAMENTO
28 Salve e Recarregue o script.
Agora, podemos usar o campo INPUT BudgetPrognosis para definir valo-
res de orçamento diferentes, caso seja necessário alterar o orçamento para 
que ele corresponda aos valores reais.
29 Crie uma nova Tabela intitulada Sales Budget, que consiste nos seguin-
tes campos: SalesPerson, BudgetYear, BudgetAmount e BudgetPrognosis.
30 Mova o cursor do mouse sobre a coluna BudgetPrognosis na tabela. 
Será exibido um ícone de seta de entrada.
31 Clique no ícone de entrada em qualquer linha e digite qualquer número.
32 Clique com o botão direito do mouse na coluna BudgetPrognosis. 
Observe as opções relacionadas para Restaurar Valor Único, Restaurar 
Valores Possíveis e Restaurar Todos os Valores.
Agora, podemos usar o campo INPUT BudgetPrognosis para definir 
valores de orçamento diferentes, caso seja necessário alterar o orça-
mento para que ele corresponda aos valores reais.
Parabéns por ter concluído a Lição 15.
122
QlikView Developer | 16 OTIMIZAÇÃO DO MODELO DE DADOS
16 OTIMIZAÇÃO DO MODELO DE DADOS
Bem-vindo à Lição 16. Nesta lição, criaremos várias medidas principais. 
Calcularemos OrderLineAmount, CostOfGoodsSold e Margin e criaremos 
o campo CategoryType. Para isso, usaremos técnicas avançadas de script.
16.1 Condição em um campo em uma tabela
O campo CategoryType pode ser criado usando o campo CategoryID. Se 
CategoryID for 5 ou 6, CategoryType deverá ser Footwear; caso contrário, 
o tipo deverá ser vestuário. 
16.2 Agregando Dados
Uma das medidas principais desta lição é OrderSalesAmount. É necessário 
calculá-la no script. Agora, você tem o campo LineSalesAmount, mas pre-
cisa do total de vendas para cada Order. Para isso, precisamos agregar o 
campo LineSalesAmount.
Para agrupar ou agregar os dados, usaremos a cláusula GROUP BY no 
comando LOAD. Group by é uma cláusula usada para definir os campos de 
agregação (agrupamento) dos dados. É necessário agregar os dados na 
tabela OrderDetails por OrderID.
16.3 Unindo Tabelas
É possível unir tabelas que já estão no script. O resultado de um comando 
JOIN entre duas tabelas é uma única tabela. 
Incluiremos o campo OrderSalesAmount da tabela OrderDetails na tabela 
Orders. Uma forma de fazer isso é combiná-las em uma única tabela. 
A junção de tabelas pode ser executada em relação à base de dados de origem 
ou podemos usar um comando JOIN do QlikView. 
Como já temos os dados de origem que desejamos carregar na memória, usa-
remos o comando JOIN LOAD em relação à tabela que acabamos de criar. 
Objetivos
• Analisar medidas principais
• Usar condições em tabelas, agregação, junção de tabelas e carga 
precedente em carga precedente dentro do script
Dica: Junções incorretas podem resultar em penalidades significativas 
para a memória. Se você receber um erro de “Memória Excedida”, verifi-
que duas vezes o script e o modelo de dados!
123
QlikView Developer | 16 OTIMIZAÇÃO DO MODELO DE DADOS
16.4 Concatenação
Uma outra forma de unir dados de várias tabelas é usando a concatenação. 
Há duas formas de concatenar dados. Vamos explorar cada um desses méto-
dos.
16.4.1 Concatenação Automática
Se os nomes de campo e o número de campos de duas ou mais tabelas carre-
gadas forem exatamente os mesmos, o QlikView concatenará automatica-
mente os resultados dos diferentes comandos LOAD ou SELECT em uma 
tabela.
Exemplo:
LOAD a, b, c FROM Table1.csv;
LOAD a, c, b FROM Table2.csv;
A tabela lógica resultante tem os campos a, b e c. O número de registros 
é a soma do número de registros na tabela 1 e na tabela 2.
Regras:
- O número e os nomes dos campos devem ser exatamente iguais.
- A ordem dos campos listados em cada comando é arbitrária.
- A ordem dos dois comandos é arbitrária.
16.4.2 Concatenação Forçada
Se duas ou mais tabelas não tiverem exatamente o mesmo conjunto de cam-
pos, ainda será possível forçar o QlikView a concatenar as duas tabelas. Isso é 
feito usando o prefixo Concatenate no script, que concatena uma tabela com 
outra tabela nomeada ou com última tabela lógica criada anteriormente.
Exemplo:
LOAD a, b, c FROM Table1.csv;
Concatenate LOAD a, c FROM Table2.csv;
A tabela lógica resultante tem os campos a, b e c. O número de registros na 
tabela resultante é a soma dos números de registros na Table1 e Table2.
O valor do campo b nos registros vindos da tabela 2 é NULL.
Regras:
- Os nomes dos campos devem ser exatamente iguais.
- A ordem dos campos listados em cada comando é arbitrária.
- A menos que o nome de uma tabela carregada anteriormente seja espe-
cificado no comando Concatenate, o prefixo concatenate utiliza a última 
tabela lógica criada anteriormente. Dessa forma, a ordem dos dois 
comandos não é arbitrária.
124
QlikView Developer | 16 OTIMIZAÇÃO DO MODELO DE DADOS
16.4.3 Evitar a Concatenação
Se duas tabelas tiverem o mesmo conjunto de campos e, portanto, normal-
mente forem concatenadas automaticamente, você poderá evitar a concatena-
ção usando o prefixo NoConcatenate. Esse comando impede a concatenação 
com quaisquer tabelas lógicas existentes com o mesmo conjunto de campos.
A sintaxe é:
NoConcatenate ( LoadStatement | SelectStatement )
Exemplo:
LOAD a, b FROM Table1.csv;
Noconcatenate LOAD a, b FROM Table2.csv; 
Nos nossos dados, foi fornecido um conjunto adicional de novos funcioná-
rios que ainda não estão contidos no arquivo EmpOff.xls. Para adicionar 
esses dados, é necessário modificar nosso script de carga.
16.5 Load Anterior em Load Anterior
A próxima medida principal que vamos incluir é CostOfGoodsSold. Para cal-
cular esse valor, é necessário incluir o campo UnitCost da tabela Products na 
tabela OrderDetails. Vamos fazer isso usando uma tabela de mapeamento e 
aplicá-la à tabela OrderDetails.
Exercício: Condição em um Campo em umaTabela
1 Abra a caixa de diálogo Editar Script e vá para a aba Dimensions.
2 Localize a tabela Categories e coloque o cursor depois do último campo 
da tabela. 
3 Digite uma vírgula e pressione ENTER para obter uma nova linha. Digite 
o seguinte para criar o CategoryType.
IF(CategoryID = 5 OR CategoryID = 6, 'Footwear', 
'Clothing') AS CategoryType;
O comando IF no QlikView usa a seguinte sintaxe:
if( condition , then , else )
A condição deve ser avaliada como verdadeira ou falsa. Se for verda-
deira, a parte then será processada. Contudo, se a condição for falsa, a 
parte else do comando será processada.
4 Salve o script e Recarregue. 
5 Examine os campos. Agora você pode ver que temos um novo campo 
denominado CategoryType.
125
QlikView Developer | 16 OTIMIZAÇÃO DO MODELO DE DADOS
Exercício: Agregação
1 Abra o arquivo QlikView com o qual você está trabalhando nesta lição.
2 Abra o Editor de Scripts e coloque o cursor depois da tabela OrderDe-
tails na aba Orders.
3 Inclua o seguinte comando no script:
LOAD OrderID,
sum(LineSalesAmount) AS 
OrderSalesAmount 
RESIDENT OrderDetails
GROUP BY OrderID;
Observe a função de agregação sum(LineSalesAmount) incluída no comando. 
Essa função será avaliada sobre todas as combinações possíveis dos outros 
campos no comando LOAD (OrderID). A cláusula GROUP BY é necessária 
para agregar ou agrupar os campos diferentes daqueles incluídos na agrega-
ção. Nesse caso, ela totalizará o Sales Amount de cada OrderID.
Exercício: Unindo Tabelas
1 Vá para o Script novamente e coloque o cursor imediatamente antes de 
LOAD na tabela recém-criada.
2 Digite LEFT JOIN (Orders) antes do comando LOAD. O resultado deve 
ser semelhante ao seguinte.
LEFT JOIN (Orders)
LOAD …
Aqui, usamos uma carga LEFT JOIN porque queremos ter certeza de que 
não obteremos nenhum valor de Orders que não exista na tabela 
Orders. No QlikView, o comportamento de junção padrão é uma junção 
externa completa. Portanto, se não houver nenhum campo correspon-
dente entre as duas tabelas unidas. Como estamos especificando Orde-
rID nas duas tabelas e estamos especificando Left, apenas os registros 
que correspondem a OrderID na tabela Orders serão incluídos. Nós 
incluímos o campo OrderSalesAmount porque é isso que desejamos 
incluir na tabela Orders.
3 Salve e Recarregue o script.
Exercício: Concatenação
1 Abra a caixa de diálogo Editar Script no arquivo QlikView com o qual 
você está trabalhando nesta lição.
2 Posicione cursor sobre a aba Dados do Arquivo logo depois que a tabela 
Employees tiver sido carregada. Precisamos duplicar os campos atuais 
em Employees, então, nesse caso, não usaremos o Assistente de 
Arquivo. Copie o comando LOAD de Employee e cole o texto depois do 
texto original.
126
QlikView Developer | 16 OTIMIZAÇÃO DO MODELO DE DADOS
Como o formato de dados do novo arquivo corresponde ao nosso primeiro 
arquivo, precisamos apenas alterar a fonte dos dados. 
3 Revise a cláusula From no novo comando load para que ela tenha as 
seguinte aparência:
FROM Datasources\Employees_New.xls (biff, embedded 
labels, table is [Employee$]);
4 Clique em OK e salve o documento QlikView.
5 Execute o script.
Se você observar várias novas Chaves Sintéticas ou um novo valor 
$Table de Employee-1, saberá que algo não funcionou corretamente na 
concatenação automática.
É possível evitar vários possíveis problemas com a concatenação auto-
mática usando o prefixo concatenate em comandos LOAD que você sabe 
que devem ser concatenados. 
6 Inclua o prefixo concatenate ao novo comando Employee LOAD e espe-
cifique a tabela Employees. 
Isso sempre concatenará essas duas tabelas, mesmo que depois sejam fei-
tas alterações de script não intencionais a um dos load, mas não ao 
outro. Agora, o novo comando LOAD da tabela Employee deve começar 
da seguinte maneira:
Concatenate (Employees) Load
Talvez você tenha notado que há pouquíssimas diferenças entre os dois 
comandos LOAD da tabela Employee. Na verdade, podemos usar outro 
recurso do QlikView para carregar os mesmos dados em apenas um 
único comando LOAD. 
Usando uma especificação de curinga no nome de arquivo FROM, o 
QlikView será carregado automaticamente a partir de todos os arquivos 
que correspondem a essa especificação e concatenará os dados em uma 
única tabela lógica. Como o nome dos dois arquivos começa com 
“Emp” e têm a extensão “.xls”, você pode usar o curinga “Emp*.xls” 
na cláusula FROM.
7 Faça as alterações acima e comente o segundo comando LOAD da tabela 
Employee. O script deverá ter a seguinte aparência:
Employees:
Load Office & ‘-’ & EmpID as BudgetKey,
EmpID AS EmployeeID,
//[Last Name],
//[First Name],
[First Name] & ' ' & [Last Name] AS Name,
127
QlikView Developer | 16 OTIMIZAÇÃO DO MODELO DE DADOS
Title,
[Hire Date],
Year([Hire Date]) AS [HireYear],
Office,
Extension,
[Reports To],
[Year Salary]
FROM Datasources\Emp*.xls (biff, embedded labels, 
table is [Employee$]);
//Employees:
//Concatenate (Employee) Load
//Office & ‘-’ & EmpID as BudgetKey,
//EmpID AS EmployeeID,
//[Last Name],
//[First Name],
//[First Name] & ' ' & [Last Name] AS 
Name,
//Title,
//[Hire Date],
//Year([Hire Date]) AS [HireYear],
//Office,
//Extension,
//[Reports To],
//[Year Salary]
//FROM Datasources\Employees_New.xls (biff, embedded 
labels, table is [Employee$]);
8 Salve o script revisado e o documento QlikView. Em seguida, recarregue 
e verifique se os dados de Employee não mudaram.
Você também pode querer tentar determinar porque os funcionários lista-
dos no arquivo Employees_New.xls não têm endereços de e-mail atribuídos 
(o campo e-mail desses funcionários é nulo). O que você precisa fazer para 
corrigir esse problema?
Exercício: Load Anterior em Load Anterior
1 No arquivo QlikView com o qual você está trabalhando nesta lição, vá 
para o Editor de Scripts e coloque o cursor na parte inferior da aba 
MappingTables.
128
QlikView Developer | 16 OTIMIZAÇÃO DO MODELO DE DADOS
2 Crie a tabela a seguir, digitando-a a partir do início ou usando o botão 
Selecionar.
UnitCost_Map: 
MAPPING LOAD 
ProductID,
UnitCost;
SQL SELECT * 
FROM Products; 
3 Vá para a aba Orders e inclua a linha de script a seguir na parte inferior 
da tabela OrderDetails, logo acima da linha SQL SELECT *. Lembre-se 
de remover o ponto-e-vírgula da linha acima e substituí-lo por uma vír-
gula.
applymap('UnitCost_Map', ProductID, 0) * Quantity AS 
CostOfGoodsSold;
Combinamos a função applymap com um cálculo e criamos o campo 
CostOfGoodsSold diretamente no LOAD que precede a tabela OrderDe-
tails.
A última medida principal restante que precisamos criar no script é Mar-
gin. Margin é calculada como LineSalesAmount – CostOfGoodsSold. 
A forma mais fácil de fazer isso é colocando um load anterior acima do 
load anterior na tabela OrderDetails. Você pode incluir vários loads 
anteriores, um antes do outro, e eles serão avaliados de baixo para cima. 
Isso significa que você pode usar um campo criado em um load anterior 
em um novo load anterior sobre o primeiro. Usaremos essa funcionali-
dade para criar o campo Margin.
4 Coloque o cursor depois do rótulo OrderDetails.
5 Crie um load anterior incluindo o script a seguir.
LOAD
LineSalesAmount - CostOfGoodsSold AS 
Margin,
*
;
129
QlikView Developer | 16 OTIMIZAÇÃO DO MODELO DE DADOS
O script OrderDetails completo deve ter a seguinte aparência:
//*************** Order Details table 
OrderDetails:
LOAD
LineSalesAmount - CostOfGoodsSold AS Margin,
*
;
LOAD 
Discount,
LineNo,
OrderID,
ProductID,
Quantity,
UnitPrice,
UnitPrice * Quantity * (1 - Discount) AS
LineSalesAmount,
applymap('UnitCost_Map', ProductID, 0) * 
Quantity AS 
CostOfGoodsSold;
SQL SELECT * FROM `Order Details`;
LEFT JOIN (Orders) 
LOAD OrderID,
sum(LineSalesAmount) AS OrderSalesAmount 
RESIDENT OrderDetails
GROUP BY OrderID;
6 Salve e recarregue o script.
Os novos campos de medidas principais devem estar prontos para uso.
Exercício:
1 Para limpar um pouco mais o script, Unaas tabelas Categories e Products. 
Certifique-se de não obter Categories que não existem na tabela Products.
//************** Categories table **************
Categories:
LEFT JOIN (Products)
LOAD CategoryID,
CategoryName,
Description AS CategoryDescription,
IF(CategoryID = 5 OR CategoryID = 6, 
'Footwear',
'Clothing') AS 
CategoryType;
SQL SELECT *
FROM Categories; 
130
QlikView Developer | 16 OTIMIZAÇÃO DO MODELO DE DADOS
2 Crie uma tabela dinâmica com CategoryType e CategoryName como 
dimensões.
3 Crie as quatro expressões a seguir:
Sales Sum(LineSalesAmount)
COGS Sum (CostOfGoodsSold)
Margin Sum (Margin)
Margin % Sum (Margin)/ Sum (LineSalesAmount)
4 Formate a tabela da maneira desejada.
Parabéns por ter concluído a Lição 16!
Figura 1. Tabela dinâmica resultante.
131
QlikView Developer | 17 CÁLCULOS AVANÇADOS EM OBJETOS DE PASTA
17 CÁLCULOS AVANÇADOS EM OBJETOS DE PASTA
17.1 Limites de Dimensão
Os Limites de Dimensão são um novo recurso do QlikView que permite que 
um gráfico mostre totais, outros segmentos e limite os valores máximo/mínimo 
da dimensão de desempenho. Os Limites de Dimensão podem ser definidos 
para tipos de gráfico, exceto para Gráficos de Mostrador e Tabelas Dinâmicas. 
A aba Limites de Dimensão controla o número dos valores de dimensão que 
podem se vistos em um determinado gráfico.
É importante descrever o efeito produzido pelas três opções no menu suspenso.
O menu suspenso contém três valores: Primeiro, Maior e Menor. Esses valo-
res controlam como os mecanismos de cálculo classificam os valores que 
retornam ao mecanismo de gráfico. Se a dimensão deve ser restrita, uma 
dessas opções deverá ser selecionada.
Objetivos
• Apresentar cálculos avançados em gráficos e tabelas, incluindo:
• Limites de Dimensão
• Análise de conjunto
• Expansão de sinal de cifrão
• Função AGGR
• Estados alternativos
133
QlikView Developer | 17 CÁLCULOS AVANÇADOS EM OBJETOS DE PASTA
 
Item Definição
Restringir valores exibidos 
usando a primeira expressão
Essas propriedades são usadas para determinar 
quantos valores de dimensão serão exibidos no 
gráfico, de acordo com as configurações feitas 
abaixo.
Mostrar somente Selecione essa opção se desejar mostrar os x 
números Primeiro, Maior ou Menor de valores. 
Se essa opção for definida como 5, cinco valo-
res serão mostrados. Se a dimensão tiver a 
opção Mostrar Outros ativada, o segmento 
Outros ocupará um dos cinco slots de exibição.
134
QlikView Developer | 17 CÁLCULOS AVANÇADOS EM OBJETOS DE PASTA
Primeiro A opção Primeiro retornará as linhas com base 
nas opções selecionadas na aba Classificar da 
caixa de diálogo de propriedades. Se o gráfico 
for uma Tabela Simples, as linhas serão retor-
nadas com base na classificação principal do 
momento. Em outras palavras, um usuário pode 
alterar a exibição de valores clicando duas 
vezes em qualquer cabeçalho de coluna e tor-
nando essa coluna a classificação principal.
Maior A opção Maior retorna as linhas em ordem 
decrescente com base na primeira expressão do 
gráfico. Quando usados em uma Tabela Simples, 
os valores de dimensão permanecerão consis-
tentes enquanto classificam interativamente as 
expressões. Os valores de dimensões serão 
(poderão ser) alterados quando a ordem das 
expressões for alterada.
Menor A opção Menor retorna as linhas em ordem 
crescente com base na primeira expressão do 
gráfico. Quando usados em uma Tabela Sim-
ples, os valores de dimensão permanecerão 
consistentes enquanto classificam interativa-
mente as expressões. Os valores de dimensões 
serão (poderão ser) alterados quando a ordem 
das expressões for alterada.
Mostrar somente valores que 
são
Selecione essa opção para mostrar todos os 
valores de dimensões que atendem à condição 
especificada para essa opção. Selecione para 
exibir valores baseados em uma porcentagem 
do total ou em um valor exato. A opção Porcen-
tagem habilita um modo relativo que é seme-
lhante à opção Relativo na guia Expressões da 
caixa de diálogo de propriedades. O valor pode 
ser inserido como uma fórmula calculada.
Item Definição
135
QlikView Developer | 17 CÁLCULOS AVANÇADOS EM OBJETOS DE PASTA
Mostrar somente valores que 
se acumulam em
Quando essa opção é selecionada, todas as 
linhas até a linha atual são acumuladas e o 
resultado é comparado com o valor definido na 
opção. A opção Porcentagem habilita um modo 
relativo que é semelhante à opção Relativo na 
guia Expressões da caixa de diálogo de pro-
priedades. Essa opção compara os valores acu-
mulados (com base nos valores primeiro, maior 
ou menor) com o total geral. O valor pode ser 
inserido como uma fórmula calculada.
Mostrar Outros Habilitar essa opção irá gerar um segmento 
Outros no gráfico. Todos os valores de dimensão 
que não atendem aos critérios de comparação 
das restrições de exibição serão agrupados no 
segmento Outros. Se houver dimensões após a 
dimensão selecionada, Contrair Dimensões 
Internas controlará se os valores individuais para 
as dimensões subsequentes/internas serão exi-
bidos no gráfico.
Mostrar Total O gráfico exibirá um total para a dimensão 
selecionada quando essa opção for habilitada. 
Esse total se comporta diferentemente da 
expressão total, que ainda está configurada na 
aba Expressões da caixa de diálogo de proprie-
dades.
Modo de Agrupamento Global A opção se aplica apenas a dimensões inter-
nas. Quando essa opção for habilitada, as res-
trições serão calculadas somente na dimensão 
selecionada. Todas as dimensões anteriores 
serão ignoradas. Se essa opção for desabili-
tada, as restrições serão calculadas com base 
em todas as dimensões anteriores.
Item Definição
136
QlikView Developer | 17 CÁLCULOS AVANÇADOS EM OBJETOS DE PASTA
17.1.1 Totais de Expressão Comparados com os Totais de Dimensão
Os Totais de Dimensão são gerados pelo mecanismo de cálculo e são retorna-
dos ao mecanismo de gráfico como linhas separadas (ou valores de dimen-
são). Isso terá um impacto nas linhas Outros. A diferença entre usar Totais 
de Expressão e Totais de Dimensão pode ser vista abaixo.
Figura 1. Quando a opção Totais de Dimensão é usada, é possível ter subto-
tais dentro de uma tabela simples.
Exercício de Limites de Dimensão 
Primeiro, vamos criar uma Tabela Simples que mostre a soma das vendas 
por vendedor e família de produtos. 
1 Crie uma nova pasta com o nome de Limites de Dimensão
2 Clique com o botão direito do mouse na pasta Limites de Dimensão.
3 Clique em Novo Objeto de Pasta. Depois, clique em Gráfico. 
4 Selecione Tabela Simples.
5 Clique em Avançar. É exibida a caixa de diálogo Dimensões.
6 Em Grupos/Campos Disponíveis, selecione SalesPerson e Category-
Name.
137
QlikView Developer | 17 CÁLCULOS AVANÇADOS EM OBJETOS DE PASTA
7 Renomeie a dimensão CategoryName como Product Family. 
8 Clique em Incluir. 
9 Clique em Avançar. É exibida a caixa de diálogo Expressão.
10 Crie uma expressão que calcule a soma de vendas: Na caixa de diálogo 
Expressão, digite Sum(LineSalesAmount)
11 Clique em OK. 
12 Clone o gráfico: Pressionando CTRL, clique na barra de título da tabela 
e arraste-a para uma nova posição na pasta. Coloque as duas tabelas 
uma ao lado da outra.
13 Clique com o botão direito do mouse em um dos gráficos que você aca-
bou de criar.
14 Clique na aba Limites de Dimensão.
15 Clique em Restringir valores exibidos usando a primeira expressão.
16 Selecione Mostrar somente e Primeiro e digite 3;
17 Clique em OK e veja como essa configuração afeta os gráficos.
18 Volte para a etapa 13 e explore as configurações de limites Maior e 
Menor.
138
QlikView Developer | 17 CÁLCULOS AVANÇADOS EM OBJETOS DE PASTA
17.2 Análise de conjunto.
O QlikView 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 reclassifi-
car em expressões complexas com cláusulas if. 
A análise de conjunto muda tudo isso, permitindo modificar qualquer funçãode 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 ou de todos os dados. 
17.2.1 Identificadores de conjunto
Sum ({set identifier} Sales)
Existe uma constante que pode ser usada para denotar um conjunto de 
registros: 1. 
• 1 representa um conjunto completo de todos os registros no docu-
mento.
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-$} define o inverso da seleção atual, ou seja, tudo o que as sele-
ções atuais excluem.
Seleções da pilha Voltar/Adiante podem ser usadas como identificadores de 
conjunto, pelo uso do cifrão: 
• $1 representa a seleção anterior e é equivalente a pressionar o botão 
Voltar. 
• $_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.
Marcadores podem ser usados como identificadores de conjunto. 
139
QlikView Developer | 17 CÁLCULOS AVANÇADOS EM OBJETOS DE PASTA
É possível usar o ID do marcador ou o nome do marcador, BM01 ou 
MyBookmark.
sum( {$} Sales ) Retorna as vendas da seleção atual, ou seja, 
o mesmo que sum(Sales).
sum( {$1} Sales ) Retorna as vendas da seleção anterior.
sum( {1} Sales ) Retorna o total das vendas no aplicativo, 
sem importar a seleção, mas não a dimen-
são. Se usado em um gráfico com, por 
exemplo, Produtos como dimensão, cada 
produto obterá um valor diferente.
sum( {1} Total Sales ) Retorna o total das vendas no aplicativo, 
ignorando a seleção e a dimensão. Isto é, 
o mesmo que Sum(All Sales).
sum( {BM01} Sales ) Retorna as vendas do marcador BM01.
sum( {MyBookMark} Sales ) Retorna as vendas do marcador MyBook-
Mark.
sum({Server\BM01} Sales) Retorna as vendas do marcador do servi-
dor BM01.
140
QlikView Developer | 17 CÁLCULOS AVANÇADOS EM OBJETOS DE PASTA
17.2.2 Operadores de conjunto
Vários operadores são usados em expressões de conjunto. Todos os opera-
dores de conjunto usam conjuntos como operandos, conforme descrito 
acima, e retornam um conjunto como resultado. Os operadores são os 
seguintes:
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) é dife-
rente de (A + B) – C que, por sua vez, é diferente de (A – C) + B.
+ 
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 ope-
rando do conjunto, mas não ao outro. 
Além disso, quando usada como um 
operador unário, ela retorna o con-
junto 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
Essa operação binária retorna um 
conjunto formado pelos registros que 
pertencem a um dos dois operandos 
do conjunto.
141
QlikView Developer | 17 CÁLCULOS AVANÇADOS EM OBJETOS DE PASTA
17.2.3 Modificadores de conjunto
Sum ({set identifier} <set modifier> Sales)
Um conjunto pode ser modificado por uma seleção adicional ou alterada. 
Uma modificação como essa pode ser escrita na expressão do conjunto. 
O modificador é composto por um dos diversos nomes de campo, cada um 
seguido de uma seleção que deve ser feita no campo e estar entre < >, como em 
<Year={2007, 2008}, Region={US}>
Os nomes e os valores de campo podem estar entre aspas simples, 
 <[Sales Region]={’West coast’, ’South America’}>.
Existem várias formas de definir a seleção:
Um caso simples é uma seleção baseada nos valores selecionados de outro 
campo:
 <OrderDate = DeliveryDate>. 
Esse modificador usará os valores selecionados em “DeliveryDate” e os apli-
cará como uma seleção em “OrderDate”. 
Contudo, o caso mais comum é uma seleção baseada em uma lista de valo-
res de campo entre chaves, os valores separados por vírgula: 
<Year = {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: 
<Ingredient = {"*Garlic*"}> 
Selecionará todos os ingredientes com a palavra “Garlic”.
A seleção dentro de um campo pode ser definida usando operadores de con-
junto e vários conjuntos de elementos, como com o modificador: 
<Year = {"20*", 1997} - {2000}> 
que selecionará todos os anos iniciados por “20”, além de “1997”, exceto 
“2000”.
sum( {1-$} Sales ) Retorna vendas de todos os itens excluídos 
pela seleção atual.
sum( {$*BM01} Sales ) Retorna as vendas da interseção entre a 
seleção atual e o marcador BM01.
sum( {-($+BM01)} Sales ) Retorna as vendas excluídas pela seleção 
atual e o marcador BM01.
142
QlikView Developer | 17 CÁLCULOS AVANÇADOS EM OBJETOS DE PASTA
17.2.4 Exemplo de análise de conjuntos
Vejamos dois exemplos do uso de Análise de Conjuntos no QlikView.
Neste exemplo, temos uma análise comparativa por ano/mês. Ao selecionar 
2010, é feita uma comparação entre 2010 e 2009. Ao selecionar 2009, é feita 
uma comparação entre 2009 e 2008. Note que 2008, neste caso está esmae-
cido, mas ainda é possível ver seus valores.
Neste exemplo, ao selecionar grupos de produtos, o gráfico não filtra ape-
nas esses produtos, mas mantém todo o conjunto de dados e mostra a por-
centagem em que os grupos de produtos selecionados se compara ao total. 
É um exemplo de como usar a análise de conjuntos para mostrar a razão em 
relação à análise total.
143
QlikView Developer | 17 CÁLCULOS AVANÇADOS EM OBJETOS DE PASTA
17.3 Expansão de sinal de cifrão.
As expansões do sinal de cifrão são definições de substituições do texto 
usado no script ou em expressões. Esse processo é conhecido como expan-
são, mesmo se o novo texto for menor. 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 cifrão. 
17.3.1 Expansão de Cifrão Usando uma Variável
Ao utilizar uma variável para a substituição de texto no script ou em uma 
expressão, a sintaxe 
$ (variablename) 
é usada. $(variablename) é expandida para o valor de variablename. 
Se variablename não existir, a expansão será o caractere vazio.
Para expansões de variáveis numéricas, a sintaxe
$ (#variablename) 
é usada. $(#variablename) sempre gera um reflexo de ponto decimal válido 
do valor numérico variablename, possivelmente com notação exponencial 
(para números muito grandes/pequenos). Se variablename não existir, ou 
não contiver um valor numérico, será expandida para 0. 
17.3.2 Expansão do Cifrão com Parâmetros
Parâmetros podem ser usados em expansões de variável. A variável deve 
conter parâmetros formais, como $1, $2, $3 etc. Quando a variável for 
expandida, os parâmetros deverão 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âme-
tros reais excedentes serão ignorados. 
O parâmetro $0 retorna o número de parâmetros realmente passados por 
uma chamada. 
Observação: A expansão de macro não estárelacionada com as macros 
de script (script VB ou Java definido no modulo de script).
144
QlikView Developer | 17 CÁLCULOS AVANÇADOS EM OBJETOS DE PASTA
17.3.3 Expansão do Cifrão com uma Expressão
Expressões podem ser usadas em expansões de cifrão. O conteúdo entre 
parênteses deve começar com um sinal de igual: 
$(=expression)
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 sis-
tema. Assim, se a data do sistema for 28 de maio de 2009, 2009 será 
retornado
$(=Only(Year)-1)retorna o ano anterior ao selecionado
Exercício de Análise de Conjunto
Crie um gráfico de Tabela Simples exibindo uma comparação das vendas 
anuais de CompanyName com base no ano selecionado pelo usuário.
1 Navegue para o diretório C:\`likViewTraining\Developer\Lesson17 e 
abra o arquivo Set_Analysis.qvw.
2 Salve uma cópia do arquivo para preservar o original caso, posterior-
mente, seja preciso começar novamente desde o início. 
Também há um arquivo QlikView que termina em “_Solution.qvw”, que 
contém o exercício concluído para sua referência.
3 Confira se há mesmo uma lista na pasta para o campo Year. Se não hou-
ver, inclua uma.
4 Clique com o botão direito do mouse em uma área em branco da pasta e 
clique em Novo Objeto de Pasta | Gráfico do menu de contexto.
5 Clique no ícone Tabela Simples (no canto inferior direito dos Tipos de 
Gráfico) e digite Annual Comparison no Título da Janela. Clique em 
Próximo.
6 Inclua Customer às Dimensões Usadas e clique em Próximo.
7 Crie as três Expressões abaixo usando os Rótulos:
Rótulo Expressão
1 =Only(Year) Sum({$<Year={$(=Only(Year))}>} Sales) 
2 =Only(Year)-1 Sum({$<Year={$(=Only(Year)-1)}>} Sales)
3 =Only(Year) & ' vs ' 
& (Only(Year)-1) 
Sum({$<Year={$(=Only(Year))}>} Sales) - 
Sum({$<Year={$(=Only(Year)-1)}>} Sales)
145
QlikView Developer | 17 CÁLCULOS AVANÇADOS EM OBJETOS DE PASTA
8 Clique em Terminar
9 Salve seu arquivo QlikView e continue editando a tabela simples 
Annual Comparison.
10 Defina a Ordem de Classificação para corresponder à descrição a seguir, 
lembrando que Customer deve ser definido como Texto.
11 Na aba Efeitos Visuais , torne os valores negativos da comparação 
anual vermelhos e os valores positivos verdes.
146
QlikView Developer | 17 CÁLCULOS AVANÇADOS EM OBJETOS DE PASTA
12 Retorne à aba Geral e inclua uma Condição de Cálculo para garantir que 
o usuário selecione um ano (Year) para começar a comparação digitando 
o seguinte na caixa Condição de Cálculo
Count (distinct Year)=1
13 Clique no botão Mensagens de Erro, na aba Geral e, em seguida, em 
Condição de Cálculo Não Satisfeita na lista Mensagens Padrão.
14 Tipo: Selecione um ano para ser comparado com o ano anterior na caixa 
Mensagem Personalizada e clique em OK.
 
15 Clique em OK novamente para fechar a caixa de diálogo de proprieda-
des do gráfico.
147
QlikView Developer | 17 CÁLCULOS AVANÇADOS EM OBJETOS DE PASTA
16 Com 2009 selecionado na lista Ano que você incluiu no início do Exercí-
cio, sua tabela simples deve ter uma aparência semelhante à seguinte:
17 Salve seu trabalho.
148
QlikView Developer | 17 CÁLCULOS AVANÇADOS EM OBJETOS DE PASTA
Exercício de Análise de Conjunto Avançada
1 Continue trabalhando com o arquivo que você está usando neste exercí-
cio. 
2 Crie um gráfico que compare as vendas de produtos da categoria 
Babywear com produtos da categoria Children's Wear ao longo do 
tempo para o escritório de vendas de Nice.
3 Para isso, será necessário criar uma expressão usando a Análise de con-
junto e a Expansão de $ em vez dos comandos if() tradicionais. 
4 Defina o nome da categoria para localizar Babywear e que o escritório 
seja 4. 
5 Atenção aos sinais <> e {}.
Solução:
sum({$<CategoryName={'Babywear'}, Office={4}>} Sales)
sum({$<CategoryName={'Children*'}, Office={4}>} Sales)
149
QlikView Developer | 17 CÁLCULOS AVANÇADOS EM OBJETOS DE PASTA
17.4 Análises Comparativas usando Estados Alternativos
O QlikView permite que os usuários desvinculem um gráfico do modelo de 
dados subjacente. Quando um gráfico é desvinculado, o objeto deixa de res-
ponder às seleções do usuário. Assim que o usuário vincula o objeto nova-
mente, ele é atualizado instantaneamente para refletir o estado atual das 
seleções.
Os Estados Alternativos são semelhantes a isso. O desenvolvedor do QlikView 
pode criar vários estados dentro de um documento QlikView e aplicá-los a 
objetos específicos no documento. O usuário final pode criar cópias desses 
objetos (objetos do Server) e, em seguida, colocar esses objetos em estados 
diferentes.
A diferença mais importante entre Desvincular e Estados Alternativos é o 
fato de que TODOS os objetos em um determinado estado responderão às 
seleções do usuário feitas nesse estado. Os objetos em um estado específico 
não são afetados pelas seleções do usuário feitas em outros estados.
Os Estados Alternativos não estão acessíveis no script de carga. Eles são um 
recurso da interface do usuário (IU). O desenvolvedor invoca a caixa de 
diálogo Estados Alternativos a partir do botão Estados Alternativos... na 
aba Propriedades do Documento/Geral. O desenvolvedor do QlikView 
pode criar qualquer número de estados no documento QlikView e fornecer 
um nome para cada estado criado. Quando o recurso Estados Alternativos 
está ativado, o desenvolvedor do QlikView também pode criar novos esta-
dos a partir dos objetos da tela. Os usuários finais que acessam documentos 
QlikView a partir de um QlikView Server podem usar, mas não criar Esta-
dos Alternativos.
17.4.1 Identificadores de Estado
Os nomes de estado criados pelo desenvolvedor do QlikView são conheci-
dos como Identificadores de Estado. Existem dois estados que estão sempre 
disponíveis: estado padrão e herdado. No estado padrão, ocorre a maioria 
da utilização do QlikView; esse estado é representado por $. O documento 
QlikView está sempre no estado padrão. Os objetos podem herdar estados 
de objetos de nível superior, como pastas e contêineres. Isso significa que são 
herdados estados como:
• Documento > Folha > Objetos de Pasta. 
As pastas e os objetos de pasta estão sempre no estado herdado, a não ser 
que sejam substituídos pelo desenvolvedor do QlikView.
150
QlikView Developer | 17 CÁLCULOS AVANÇADOS EM OBJETOS DE PASTA
17.4.2 Comportamento lógico ao usar Estados Alternativos
• Pressionar o botão Limpar afeta todos os estados. No entanto, um item 
de menu foi adicionado ao menu suspenso do botão Limpar que permite 
ao usuário apagar as seleções de um estado específico. O menu mostra 
apenas quando os estados alternativos são definidos no documento 
atual.
• Pressionar os botões Voltar e Adiante afeta todos os estados. Não há 
nenhum mecanismo para voltar e avançar em estados específicos.
• Pressionar os botões Bloquear e Desbloquear afeta todos os estados. 
Não é possível bloquear e desbloquear estados específicos com esses 
botões. É possível bloquear campos específicos em estados usando o 
menu exibido ao clicar com o botão direito em listas em um estado espe-
cífico.
• Os itens do menu Seleções se aplicam a todos os estados. Não há 
nenhum mecanismo para afetar estados específicos nesse menu.
17.4.3 Recursos em Estados Alternativos
Os recursos a seguir estão incluídos em Estados Alternativos:
• Não há nenhuma indicação automática na tela para informar que obje-
tos ou expressões estão em estados alternativos ou fazem referência a 
eles. O desenvolvedor do QlikView deve decidir se fornecerá essas infor-
mações para o usuário final usando a função StateName().
• Os Estados Alternativos podem ser usados com objetos vinculados. 
O estado se aplica a todas as instâncias de um objeto. A alteração de um 
estado em um objeto vinculado colocará os outros objetos vinculados no 
mesmo estado.
• As variáveis pertencem ao estado padrão. As alterações em outros esta-
dos não afetarão os valores de variável.
• Os disparadores são acionados em todos os estados.
151
QlikViewDeveloper | 17 CÁLCULOS AVANÇADOS EM OBJETOS DE PASTA
• As ações podem ser definidas para ocorrer em estados específicos. Uma 
exceção conhecida é a ação Executar Macro. Ela pode ser definida para 
ser executada em um estado específico; no entanto, as macros são acio-
nadas em todos os estados.
• Os objetos que usam um estado ausente (o estado foi removido por um 
desenvolvedor) serão revertidos para o estado padrão, embora o menu 
suspenso Estado Alternativo exiba algo semelhante a: AlternateState-
Name <unavailable>.
No exemplo, é feita a comparação de vendas regionais para dois diferentes 
conjuntos de produtos definidos pelo usuário. Na barra azul, estão as bebi-
das, e na cinza, estão enlatados e laticínios. Isso permite que o usuário per-
ceba com rapidez semelhanças e diferenças entre as regiões, mostrando, por 
exemplo, que o mercado dos EUA é mais forte do que o europeu em bebidas 
(tanto alcoólicas como não alcoólicas), enquanto que a Espanha e o Reino 
Unido são mais fortes em enlatados e laticínios.
152
QlikView Developer | 17 CÁLCULOS AVANÇADOS EM OBJETOS DE PASTA
No exemplo, é feita a comparação de vendas regionais para dois diferentes 
conjuntos de produtos definidos pelo usuário. Na barra azul, estão as bebi-
das, e na cinza, estão enlatados e laticínios. Isso permite que o usuário per-
ceba com rapidez semelhanças e diferenças entre as regiões, mostrando, por 
exemplo, que o mercado dos EUA é mais forte do que o europeu em bebidas 
(tanto alcoólicas como não alcoólicas), enquanto que a Espanha e o Reino 
Unido são mais fortes em enlatados e laticínios.
Exercício 1: Estados Alternativos: 
Crie uma cópia de uma pasta e permita que um usuário analise diferentes 
conjuntos de divisões, empresas e vendedores em cada pasta.
1 Navegue para o diretório C:\QlikViewTraining\Developer\Lesson17 
e abra o arquivo AltState_Exercise1.qvw
2 Copie a pasta Exercise 1 e renomeie-a para Exercise 1 StateA.
3 Rebaixe a pasta até a segunda pasta.
4 Clique com o botão direito do mouse na pasta e selecione Propriedades. É 
exibida a caixa de diálogo Propriedades da Pasta. Observe que você não 
tem a opção de selecionar um estado se não criar primeiro um estado nas 
propriedades do documento. Após criar pelo menos um estado nas pro-
priedades do documento, crie outros estados na aba Geral, na caixa de 
diálogo Propriedades.
153
QlikView Developer | 17 CÁLCULOS AVANÇADOS EM OBJETOS DE PASTA
5 Clique em OK.
6 No menu Configurações, clique em Propriedades do Documento.
7 Clique no botão Estados Alternativos. É exibida a caixa de diálogo Esta-
dos Alternativos.
8 Clique no botão Incluir.
9 Digite StateA na caixa de diálogo Nome do Novo Estado.
10 Clique em OK. A caixa de diálogo Nome do Novo Estado é fechada.
11 Clique em OK. A caixa de diálogo Estados Alternativos é fechada.
12 Clique em OK. A caixa de diálogo Propriedades do Documento é 
fechada.
13 Clique com o botão direito do mouse na pasta Exercise 1 StateA, e sele-
cione Propriedades. Observe que agora você tem a opção de selecionar 
um Estado Alternativo.
154
QlikView Developer | 17 CÁLCULOS AVANÇADOS EM OBJETOS DE PASTA
14 Selecione StateA como seu Estado Alternativo.
15 Clique em OK.
16 Vá para a pasta Exercise 1 e selecione Year 2008.
17 Navegue para a pasta Exercise 1 StateA. Observe que a seleção feita na 
outra pasta não afeta esta. 
155
QlikView Developer | 17 CÁLCULOS AVANÇADOS EM OBJETOS DE PASTA
Exercício 2: Estados Alternativos: 
Modifique um objeto de modo que o usuário possa analisar com clareza o 
desempenho de diferentes grupos de produtos entre as regiões.
1 Clique na pasta Exercise 2.
2 Clone o Gráfico Padrão Hot Stock. Faça várias seleções para conferir o 
que você acabou de fazer.
3 Clique com o botão direito do mouse na pasta e selecione Propriedades.
4 Abra a lista suspensa Estados Alternativos e clique em Novo Estado. 
Como você criou um estado no exercício 1 através das propriedades do 
documento, agora é possível criar outros estados na aba Geral nas pro-
priedades do objeto.
5 Digite RegionA na caixa de diálogo Nome do Novo Estado.
6 Clique em OK. A caixa de diálogo Nome do Novo Estado é fechada.
7 Clique em OK. A caixa de diálogo Propriedades do Gráfico é fechada.
8 Com o botão direito, clique na lista Region e selecione Copiar Objeto.
9 Clique com o botão direito do mouse na Pasta e selecione Colar Objeto 
de Pasta. Não selecione a opção Colar objeto de pasta como vínculo.
10 Mova a cópia da lista Region para a direita do Gráfico Hot Stock 
[RegionA].
11 Clique com o botão direito do mouse na cópia da lista Region e sele-
cione Propriedades.
12 No Estado Alternativo, selecione RegionA.
13 Clique em OK.
14 Faça uma cópia da caixa Seleções Atuais Padrão e atribua a ela o Estado 
Alternativo RegionA.
15 Teste o que você fez fazendo seleções.
156
QlikView Developer | 17 CÁLCULOS AVANÇADOS EM OBJETOS DE PASTA
17.5 Função AGGR
AGGR é uma função avançada do QlikView que retorna um conjunto de 
valores de expressão calculados sobre dimensões. O resultado pode ser com-
parado à 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 de 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 defi-
nido por uma expressão de conjunto.
Utilizando essa função em dimensões calculadas, é possível obter uma agre-
gação de gráfico aninhada em vários níveis. 
Quando a AGGR for usado nas expressões do gráfico, é possível obter totais 
de soma de linha em uma tabela dinâmica.
Exemplos:
aggr( sum(Sales), Country ) 
aggr( nodistinct sum(Sales), Country ) 
aggr( sum(Sales), Country, Region ) 
count( aggr( sum(Sales), Country )) 
Exercício com a função AGGR
1 Navegue para o diretório C:\QlikViewTraining\Developer\Lesson17 e 
abra o arquivo AltState_Exercise1.qvw.
2 Neste exemplo, vamos descobrir a contagem média do campo Orders 
pelos campos Country, Company, Year e Month usando a função 
AGGR().
avg(aggr(count(Distinct OrderID),Country,CompanyName, Year, 
Month)) 
3 A média de LineSalesAmount por Country, Company, Year e Quarter 
com a expressão a seguir: 
avg(aggr(sum(LineSalesAmount),Country,CompanyName, Year, 
Quarter)) 
4 E, por fim, o Total de Vendas 
sum(LineSalesAmount)
157
QlikView Developer | 17 CÁLCULOS AVANÇADOS EM OBJETOS DE PASTA
5 Crie o gráfico mostrado a seguir usando as expressões acima.
Depois de ter criado o gráfico, investigue mais alterando a dimensão de tempo 
na parte dimensional da função aggr(). Determine quantos Pedidos (Orders) 
foram feitos em cada Mês (Month) e quantos Meses tiveram Pedidos. 
Parabéns por ter concluído a Lição 17.
158
QlikView Developer | 18 DESAFIOS DE SCRIPTS E DA MODELAGEM DE DADOS
18 DESAFIOS DE SCRIPTS E DA MODELAGEM DE DADOS
18.1 Tabelas Vinculadas e Tabelas Concatenadas
As tabelas vinculadas combinam informações com diferentes níveis de deta-
lhamento ou de frequência. Em geral, elas são mais úteis quando as métricas 
que estão sendo medidas não têm a mesma base de tempo, talvez uma seja 
uma agregação sobre um período de tempo, ou seja, Month (Mês). As tabe-
las vinculadas também são usadas quando os dados não atendem aos requi-
sitos comerciais de um cálculo. Basta pensar no nome que elas têm. São úteis 
para vincular informações que não seriam automaticamente vinculadas pela 
lógica associativa do QlikView. 
Em outras palavras, ao carregar dados, podem ocorrer determinados cená-
rios em que é necessário armazenarinformações de fatos em tabelas diferen-
tes, como transações separadas de orçamentos. Pode ser necessário unir 
cada tipo de fato com várias dimensões comuns (como Tempo e Produto), 
o que geraria loops na estrutura de dados. Para desviar desses cenários, cria-
mos tabelas vinculadas que armazenam as formas individuais como cada 
tabela de fatos se une às dimensões comuns.
18.1.1 Concatenação
É uma operação que usa duas tabelas para combiná-las em uma. A concate-
nação pode ser usada para reduzir o número de tabelas de fatos em uma 
estrutura, se houver pontos em comum entre as tabelas de fatos suficientes 
para validar essa combinação. Torna o modelo de dados mais eficiente.
Quando as tabelas de fatos contiverem a mesma granularidade de informa-
ções e houver uma chave comum entre dois fatos, uma operação outer join 
será preferível a uma operação concatenate, pois os registros de saída seriam 
vinculados registro por registro e, portanto, a operação de registros únicos 
seria possível. Por exemplo, para um determinado registro de fatos SalesAnd-
Budget, para ser possível calcular a diferença entre o valor de vendas e o valor 
do orçamento.
Objetivos
• Explicar o uso de tabelas vinculadas
• Calcular a variação líquida em um campo
• Utilizar funções avançadas para lidar com o tempo
• Identificar por que a agregação dinâmica e a correspondência de inter-
valos são importantes 
159
QlikView Developer | 18 DESAFIOS DE SCRIPTS E DA MODELAGEM DE DADOS
18.2 Calculando a variação líquida em um campo
Ao carregar dados, você pode ver o que está sendo carregado usando a fun-
ção peek(). Use-a em cálculos que expressem relacionamentos entre regis-
tros. Pode ser útil para entender um balanço de conta durante um período, 
por exemplo.
Também podemos ver o que foi carregado no processo de carga com a fun-
ção previous(). A função previous() pode ser usada somente para examinar 
um registro anterior no processo de carga. Se for necessário voltar mais que 
um registro no processo de carga, você deverá aninhar a função previous(), 
como em:
previous(previous(myRecord))
Isso pode ser problemático e trabalhoso quando você deseja ver a variação 
líquida total ou a variação percentual.
Vamos presumir que precisamos contar o número de unidades que estão em 
um determinado local durante uma semana e precisamos descobrir o percen-
tual de utilização de uma unidade em um determinado local. 
Se as unidades estiverem em vários locais, mas retornarem ao mesmo local 
na mesma semana, peek() e previous() poderão funcionar, mas exigirão 
uma codificação complexa com loops FOR ou cargas RESIDENT. Podemos 
contornar isso agrupando as informações de uma tabela de rastreamento e 
usando Left Join nos resultados de volta para a tabela de rastreamento.
18.3 Funções InDate, Data e DateIslands
Esta seção inclui conceitos usados para criar aplicativos: InDate e Data/
DateIslands.
Data/DateIslands são tabelas que não estão diretamente vinculadas com 
outras tabelas (tabelas que são independentes de qualquer vínculo explícito). 
Você pode considerar isso uma matriz de valores que pode mudar com uma 
seleção do usuário e que fará novos resultados serem exibidos no Modelo de 
Dados do Qlikview, através de uma conexão de campo não chave. 
Contudo, ao usar essa abordagem, você não alterará o estado da seleção no 
Modelo de Dados do QlikView subjacente. Geralmente, isso é usado para 
KPIs, de forma que, ao mudar para uma aba mais detalhada, o usuário terá 
uma visão completa e uma seleção de dados para filtragem. 
Se houver uma seleção feita no Modelo de Dados do QlikView fora de uma 
Data/DateIsland, essa seleção removerá os dados usados no cálculo de um 
KPI e poderia resultar em exibições do KPI em branco ou enganosas. 
As funções InDate() são usadas em conjunto com Data/DateIsland.
160
QlikView Developer | 18 DESAFIOS DE SCRIPTS E DA MODELAGEM DE DADOS
18.4 Class() 
Class() é uma função de agregação que pode ser usada para criar buckets de 
informações semelhantes aos que seriam criados em um aplicativo de Con-
tas a Receber que mostrasse contas antigas. Uma outra forma de pensar em 
Class() é que você pode agrupar seus valores de dimensões. 
18.5 Agregação Dinâmica
No QlikView, você pode atribuir um valor de campo a uma variável. Em 
seguida, é possível utilizar o valor contido na variável em uma expressão. 
Isso é semelhante ao uso de um ponteiro na programação C ou em outras 
linguagens de programação semelhantes.
O QlikView calcula informações de forma dinâmica. Com essa abordagem 
e usando uma tabela que contenha as expressões, você pode criar uma refe-
rência às fórmulas localizadas na tabela que, por sua vez, cria de modo efi-
ciente uma biblioteca de expressões, as quais podem ser usadas para alterar 
dinamicamente sua exibição de informações. 
O usuário poderá navegar pelos KPIs selecionando as opções em uma Lista.
18.6 Correspondência de Intervalo
A função IntervalMatch facilita o mapeamento de datas, em períodos ou 
registros, para alterar dimensões lentamente. É útil para a criação de mode-
los de dados totalmente funcionais, com as devidas dimensões de tempo, de 
acordo com as necessidades da sua empresa. A implementação de Interval-
Match exige alguns passos adicionais além de simplesmente aplicar a fun-
ção, se quisermos evitar a criação de chaves sintéticas na nossa estrutura de 
dados.
A função IntervalMatch() tem a mesma funcionalidade do BETWEEN usado em 
um comando SQL. Existe um inconveniente no IntervalMatch(): ele cria 
uma tabela sintética (tabela $Syn). As tabelas $Syn podem ter um custo alto 
em termos de memória, e o desempenho da Interface do Usuário pode ser 
afetado. Uma solução que deve ser explorada é aplicar LEFT JOIN na tabela 
IntervalMatch() em uma tabela pai. 
161
QlikView Developer | 18 DESAFIOS DE SCRIPTS E DA MODELAGEM DE DADOS
Exercício de tabelas de vínculos
Neste exercício, usaremos IntervalMatch() para descobrir o horário no qual 
um funcionário está trabalhando no local. Os arquivos deste exercício estão 
na página da Lição 18 C:\QlikViewTraining\Developer\Lesson18\
1 Abra o arquivo LinkTable.qvw na pasta LinkTables.
2 Abra o arquivo Excel LinkTable.xls e examine os campos Sales e Budget. 
Você verá que quatro clientes têm um Budget e quatro clientes compram 
mercadorias a cada mês, mas esses não são os mesmos clientes que têm 
um Budget. 
3 Agora, recarregue sua cópia do arquivo LinkTable.qvw. Todas as infor-
mações parecem corretas. 
4 Vá para o Visualizador de Tabelas e examine a estrutura do Modelo de 
Dados. Foram criadas uma Chave Sintética e uma Tabela Sintética. Isso 
pode aumentar a sobrecarga de processamento do aplicativo e, em alguns 
casos raros, retornar resultados inesperados.
5 Desfaça o comentário na aba SynKey.
6 Desfaça o comentário no script na aba Usando uma Chave e recarregue 
o aplicativo. Observe que estamos tentando eliminar a Chave Sintética 
concatenando os campos que estão causando a Tabela sintética. 
7 Verifique o resultado no QVW e o compare com a planilha do Excel. 
Você pode ver que são retornadas informações incorretas devido à não 
correspondência do campo-chave. Existem clientes ausentes em cada 
tabela.
8 Comente o script na aba Usando uma Chave
9 Desfaça os comentários do script na aba Tabela Vinculada e recarregue o 
documento.
Estamos carregando as informações das tabelas Sales e Budget duas vezes. 
Isso gera uma tabela intermediária com informações comuns das duas 
tabelas. O nível de detalhamento de Sales e Budget é mantido em tabelas 
separadas. A tabela vinculada deve ser carregada usando Distinct (apenas 
combinações de chave exclusivas) e estabelecerá relacionamentos corretos.
162
QlikView Developer | 18 DESAFIOS DE SCRIPTS E DA MODELAGEM DE DADOS
10 Crie uma Tabela que inclua todas as colunas.
11 Comente o script do passo 3 (na aba Tabela Vinculada) 
12 Desfaça o comentário na aba Concatenar. 
13 Recarregue o documento. Observe a utilização de um campo RecSource 
para diferenciar registros concatenados.Note também o uso de referên-
cias explícitas a CONCATENATE e à tabela na qual a concatenação ocor-
rerá. Por fim, observe o LEFT JOIN que inclui o campo Customer na 
tabela e veja que isso resulta em um Modelo de Dados com uma única 
tabela. Sugira uma forma alternativa de obter o mesmo resultado.
14 Examine o resultado. Você verá os mesmos resultados que no Passo 1 e 
no Passo 3.
Note que existem valores nulos. Agora, se você somar Sales Amount e 
Budget Amount, eles estarão equilibrados.
Observação: isso é semelhante a union no SQL. Os valores nulos não têm 
um alto custo no QlikView como normalmente teriam no SQL.
Lembre-se: as tabelas vinculadas resolvem diferenças de granularidade 
entre tabelas de fatos unidas para as mesmas dimensões.
163
QlikView Developer | 18 DESAFIOS DE SCRIPTS E DA MODELAGEM DE DADOS
Exercício: Join
1 Abra o arquivo LeftJoin.QVW localizado na pasta LeftJoin.
2 Salve uma cópia de trabalho e execute o script na aba Previous. 
3 Crie duas Listas e use os campos Units e Dept.
 
4 Selecione a Unit numerada como 54543. 
5 Crie uma Tabela usando todos os campos e examine as contagens. Ainda 
não temos uma contagem completa das unidades no Dept A2. É necessário 
recarregar a tabela novamente. 
Mas onde paramos?
A solução é agregar os dados usando uma cláusula GROUP BY dos dados 
da tabela Tracking e usar LEFT JOIN no resultado para a tabela Tracking.
6 Comente as informações na aba Previous.
7 Desfaça os comentários do script na aba Left Join e recarregue o docu-
mento. Com essa abordagem, agora você pode descobrir o número total 
de vezes que uma Unit é utilizada em todos os Depts em qualquer Week. 
Isso foi feito com um comando RESIDENT load adicional. O resultado 
deve ter a seguinte aparência:
164
QlikView Developer | 18 DESAFIOS DE SCRIPTS E DA MODELAGEM DE DADOS
Agora, você pode calcular o percentual de utilização de uma Unidade em 
um Dept para uma determinada Semana.
 
Lembre-se: os comandos Group by em combinação com operações left join 
permitem a agregação de valores contidos em tabelas inferiores, em uma 
hierarquia pai-filho, e anexados às tabelas superiores; como ao somar o 
valor de itens de linha de pedidos individuais em um único valor por pedido.
Exercício com DateIsland
1 Abra o arquivo DateIsland.qvw na pasta Date_Island.
2 Salve uma cópia de trabalho do arquivo e inclua o código a seguir na 
aba Calendar abaixo da linha MasterCalendar: no script.
DateIsland:
LOAD DISTINCT
monthstart(OrderDate) AS DateIsland,
MonthYear AS DateMonthYear
RESIDENT
MasterCalendar;
 
3 Recarregue o script.
4 Crie uma Lista e uma Tabela Dinâmica. 
5 Na Tabela Dinâmica, use Country e qualquer CategoryType. 
6 Para a Lista mostrar DateMonthYear. 
7 Use duas das três expressões a seguir (dica: uma delas viola uma prática 
recomendada):
sum(LineSalesAmount * InMonth (OrderDate,DateIs-
land,0) *-1))
sum(if(InMonth (OrderDate,DateIsland,0),LineSalesA-
mount,0))
sum(LineSalesAmount)
Observação: A cláusula ORDER BY é necessária, mas funcionará apenas 
para um comando RESIDENT LOAD ou em um comando SQL SELECT. 
ORDER BY não funcionará com um comando LOAD FROM.
165
QlikView Developer | 18 DESAFIOS DE SCRIPTS E DA MODELAGEM DE DADOS
8 Selecione uma única DateMonthYear. O resultado deve ter a seguinte 
aparência:
9 Por fim, é necessário definir uma propriedade da Lista para sempre ter 
apenas um valor selecionado. Isso não é possível, a menos que você 
tenha selecionado um único valor no passo acima.
10 Agora, selecione diversos valores de DateMonthYear e você verá Sales 
mudar em uma coluna, mas não na outra.
Lembre-se destes pontos importantes:
• A filtragem pode ser obtida sem afetar o restante da estrutura de dados. 
• Isso é possível por meio do uso de comandos condicionais e da apresen-
tação dos critérios de seleção desses filtros em campos que não estão vin-
culados à estrutura de dados. 
• As funções inter-registro podem ser usadas para calcular médias móveis 
e executar a comparação de períodos em tabelas simples e dinâmicas.
166
QlikView Developer | 18 DESAFIOS DE SCRIPTS E DA MODELAGEM DE DADOS
Exercício de Class ()
1 Abra o arquivo Class.QVW na pasta Class e salve uma cópia de traba-
lho do arquivo. 
2 Crie variáveis chamadas vDate (defina vDate para uma data atual e for-
mate vDate como uma data e não um número) e vWidth (usar um pre-
fixo v ou var para indicar variáveis é uma prática recomendada) na aba 
Variáveis no menu Configuração | Propriedades do Documento
3 Crie um Objeto Calendário, clique no botão de opção das Variáveis e 
escolha vDate como a variável atribuída ao Objeto Calendário.
4 Crie uma Caixa de Entrada e escolha vWidth como a única Variável 
Mostrada.
5 Em seguida, crie uma Tabela Dinâmica com a dimensão CompanyName 
e a expressão sum(LineSalesAmount)
6 Por fim, criaremos uma dimensão calculada na Tabela Dinâmica.
Inclua a função class() usando o seguinte:
 =class(num(OrderDate - $(vDate)),$(vWidth),'Dt') 
Figura 1. Configuração de variáveis
Figura 2. Objetos Calendário e Caixa de Entrada
167
QlikView Developer | 18 DESAFIOS DE SCRIPTS E DA MODELAGEM DE DADOS
Usamos duas variáveis para alterar dinamicamente o período inicial, 
assim como os buckets nos quais se encontram as informações de vendas 
ou de contas a receber. As capturas de tela a seguir mostram dois valores 
de vWidth diferentes.
168
QlikView Developer | 18 DESAFIOS DE SCRIPTS E DA MODELAGEM DE DADOS
169
QlikView Developer | 18 DESAFIOS DE SCRIPTS E DA MODELAGEM DE DADOS
Exercício de Agregação Dinâmica
1 Abra o arquivo DynamicAggregation.qvw que está em Lesson18/Dyna-
micAggregation.
1 Salve uma cópia de trabalho e recarregue o arquivo. 
1 Crie um gráfico de tabela dinâmica com as seguinte aparência 
Onde a expressão é sum(LineSalesAmount)
2 Quando tiver terminado o gráfico, edite o script criando a seguinte 
tabela INLINE e recarregue. Isso também poderia ser feito criando e car-
regando um arquivo externo do Excel ou de texto, o que seria uma prá-
tica recomendada.
3 Em seguida, crie uma variável vMyAgg com o valor =Formula, como 
mostrado a seguir. Lembre-se do sinal de igual:
170
QlikView Developer | 18 DESAFIOS DE SCRIPTS E DA MODELAGEM DE DADOS
4 Crie uma cópia do primeiro Gráfico e substitua a expressão sum(Line-
SalesAmount) por 
if(Desc = 'Count', 
num($(vMyAgg),'###0'),num($(vMyAgg),'$###.00'))
Observe o teste para determinar como formatar a exibição numérica 
(inteiros ou moeda). Você pode tentar incluir os caracteres de formato 
com a expressão na tabela INLINE como um campo adicional e depois 
alterar a expressão de forma correspondente.
5 Inclua duas Listas com as colunas Desc e Formula, além de uma Caixa 
de Texto com =vMyAgg na área do texto. Como resultado, você poderá 
alterar seus KPIs dinamicamente. O resultado deverá ter a seguinte apa-
rência: 
Essa técnica pode ser usada para alterar a apresentação de tabelas e páginas 
inteiras mudando as Unidades de Medida ou os cálculos feitos no Objeto de 
Pasta (como acima). Ela pode ser usada para Mostrar/Ocultar tabelas e Grá-
ficos de acordo com as seleções feitas em uma Lista. Você pode criar um 
arquivo externo que seja uma biblioteca de expressões e então carregar o 
arquivo e criar variáveis que contenham suas expressões.
171
QlikView Developer | 18 DESAFIOS DE SCRIPTS E DA MODELAGEM DE DADOS
Exercício: Correspondência de Intervalo 
1 Abra o arquivo IntervalMatch.QVW, salve uma cópia de trabalho.
2 Crie uma tabela mostrando a soma de horas que uma pessoa trabalha e 
uma tabela com a contagem de horas trabalhadas por cada Funcionário 
(Emp).
Note que a linha antes de IntervalMatch() está comentada.
3 Examine o resultado no Visualizador de Tabelas. Você verá que esse 
script criou uma tabela $Syn. Como vimos anteriormente, o custo de 
uma tabela $Syn pode ser alto.
4 Desfaça o comentário do comando antes de IntervalMatch() e recarregue 
o documento. 
Resultado:
A tabela $Syn foi removida com um INNER JOIN na tabela que contém 
os valores de starte stop (TabB). Isso pode reduzir a sobrecarga de uma 
tabela $Syn. Você também tem os registros discretos de todas as ocorrên-
cias e pode usar JOIN nessa tabela para uni-la a outras tabelas.
Observe que você aumentou o tamanho da TabB. As linhas na TabB 
aumentarão até o número de linhas que haveria na tabela $Syn.
Parabéns por ter concluído a Lição 18.
172
QlikView Developer | 19 OTIMIZAÇÃO DE DESEMPENHO
19 OTIMIZAÇÃO DE DESEMPENHO
Bem-vindo à Lição 19. Nesta lição, exploraremos o ajuste de desempenho e 
o impacto do design apropriado do documento.
19.1 Ajuste de Desempenho
19.1.1 O que determina o tamanho de um documento QlikView?
• Número de linhas
• Número de colunas
• Número de colunas/valores distintos
• Estrutura de dados
• Número de pastas/objetos de pasta
Número de linhas
• Pergunta: É realmente necessário ter dados de 10 anos no mesmo docu-
mento QlikView?
• Pergunta: Se houver muitas linhas detalhadas, é plausível criar uma versão 
acumulada em um nível agregado superior?
Número de Colunas
Selecione os campos que são incluídos no documento QlikView
• Concentre-se primeiro nas tabelas de fatos maiores
• Porém, não ignore as tabelas de dimensões
Elimine os campos que não estão sendo usados no momento
• Todos os campos podem ser usados no futuro, mas não são usados agora
• A meta é ter um documento QlikView enxuto
Objetivos
• Discutir o ajuste de desempenho
• Explorar os impactos do design apropriado do documento
• Apresentar conceitos de segurança
• Revisar as práticas recomendadas
173
QlikView Developer | 19 OTIMIZAÇÃO DE DESEMPENHO
Número de Colunas/Valores Distintos
Os campos com valores altamente distintos usam a maior parte do espaço.
Vários deles podem ser eliminados/truncados completamente
• Chaves do sistema
• Datas/horas com minutos/segundos
Outros podem ser transformados quebrando-os em componentes separados
• Números de Telefone
• Datas/Horas
Estrutura de Dados
Campos-chave
Desnormalização versus Normalização
Definição de Normalização (Wikipedia):
A normalização divide os dados para evitar redundância (duplicação), 
movendo grupos de dados que se repetem comumente para uma nova 
tabela. Portanto, a normalização tende a aumentar o número de tabelas 
que precisam ser unidas, a fim de executar uma determinada consulta. 
No entanto, a normalização reduz o espaço necessário para manter os 
dados e o número de locais que precisam ser atualizados caso os dados 
mudem.
Número de pastas/objetos de pasta
Remova pastas e objetos de pasta ocultos que não estão sendo usados.
Remova variáveis não utilizadas
Lembre-se de manter o documento QlikView o mais organizado possível.
19.1.2 Design do documento
Evite “Mostrar Frequência”.
Forçar a Exibição Correta de Objetos
• Condições de Cálculo
• Mostrar Condicional
Evite muitos objetos ativos na mesma pasta.
Objetos minimizados não consomem recursos, use-os sempre que possível
19.1.3 Impactos de Segurança - Fazendo as Escolhas Corretas.
Segurança do QlikView Publisher
Seção de Acesso
174
QlikView Developer | 19 OTIMIZAÇÃO DE DESEMPENHO
Segurança do Publisher
Dividir um arquivo QlikView grande em vários arquivos menores, de 
acordo com a segurança em nível de linha
Eficiente para o gerenciamento da memória, se os perfis de segurança NÃO 
contiverem muitos dados sobrepostos
Seção de Acesso
Reduz dinamicamente o arquivo QlikView no logon, de acordo com a auto-
rização do usuário
19.2 Práticas Recomendadas para a Otimização do Arquivo QlikView
19.2.1 Dimensões e Expressões Complexas 
Várias dimensões e expressões que devem ser colocadas em gráficos ou tabe-
las exigem algum nível de complexidade dos scripts, como comandos IF 
THEN ELSE ou WHERE [FIELD1] IS NULL. 
Muitos desenvolvedores criam seus modelos de dados iniciais usando os 
processos acima, mas depois param de aperfeiçoar o script e trabalham uni-
camente no painel ou GUI. Ao elaborar/escrever seu script, você já deve 
estar ciente de algumas das medidas que você vai querer criar no final. 
Sempre que possível, tente colocar todas as fórmulas e os comandos comple-
xos no script do documento e não nos objetos do painel/documento reais. 
Se precisar usar expressões complexas em uma dimensão ou um cálculo, 
passe o máximo delas possível para os scripts do QVW. 
19.2.2 Expressões que Exigem Muitos Recursos 
Count ( Distinct 'FieldName')
Substitua count () por sum() e o qualificador distinct atribuindo o valor '1' a 
cada ocorrência de distinct, conforme está no script
If ( Condition(Text),…..) 
Mapeie Text como numérico, por exemplo, usando autonumber e/ou faça o 
teste no script
Sum ( If (Condition, 'FieldName'…)) 
Aqui, a agregação é independente das dimensões da tabela e o resultado é 
distribuído sobre as dimensões da tabela. O problema pode ser tratado exe-
cutando o teste no script e agregando na tabela ou realizando toda a opera-
ção no script. Existem várias técnicas para isso, por exemplo, interval 
match, group by, peek, if…then…else.
175
QlikView Developer | 19 OTIMIZAÇÃO DE DESEMPENHO
If ( Condition, Sum('FieldName')..) 
Incluída para enfatizar a diferença com a anterior, essa agregação é comple-
tamente contextual.
If ( Condition1, Sum('FieldName'), If (Condition2, Sum('FieldName') 
A lógica das funções If...then else... aninhadas é conceitualmente fácil, mas, 
muitas vezes, pode tornar-se difícil de administrar. Nós já vimos casos com 
centenas de níveis aninhados. Isso exigirá muitos recursos da memória e da 
CPU. Frequentemente, as “Condições” podem ser substituídas ao trans-
formá-las. Um exemplo típico é a agregação de quantidade*preço, onde 
preço é variável. Isso pode ser tratado pela “correspondência de intervalo 
estendido”. Se for necessário que duas condições, por exemplo, “A e B ”, 
sejam atendidas, o teste pode ser substituído por uma condição “C”. 
Classificar o texto 
O QlikView avalia automaticamente se um campo deve ser tratado como 
numérico, texto ou geral. Os campos avaliados como texto serão classifica-
dos como texto, o que equivale à operação de classificação mais lenta. Ela 
pode ser substituída manualmente pela classificação por ordem de carga. 
Títulos dinâmicos e objetos de texto 
As expressões podem ser inseridas em quase todos os lugares onde é possível 
digitar texto. A avaliação de uma expressão depende, no entanto, do 
ambiente. As expressões nos gráficos e em tabelas simples e dinâmicas defi-
nidas na caixa de diálogo de expressões serão incluídas e calculadas somente 
quando o objeto estiver ativo. Por exemplo, elas não são calculadas quando 
o objeto estiver minimizado. 
Por outro lado, se o título do objeto for calculado, esse cálculo será reali-
zado sempre que ocorrer alguma alteração. Também temos várias maneiras 
de definir condições de exibição, condições de cálculo etc. Esses testes tam-
bém serão realizados sempre. Algumas expressões são mais trabalhosas do 
que outras e certamente quanto mais elas tiverem que ser avaliadas, mais 
trabalhosas elas se tornam. A introdução do cálculo assíncrono mudou o 
comportamento e esse efeito pode ter ser tornado mais perceptível em seus 
documentos. As funções de tempo, como Now() e Today(), serão avaliadas 
sempre que um recálculo for necessário. Especialmente a função Now() 
pode tornar-se um tanto quanto custosa, uma vez que ela gera um recálculo 
do aplicativo a cada segundo. Por exemplo 
If ( ReloadTime()+3>Now(), 'Old Data', 'New Data') 
176
QlikView Developer | 19 OTIMIZAÇÃO DE DESEMPENHO
Aqui, podemos considerar... 
If ( ReloadTime()+3>Today(), 'Old Data', 'New Data') 
Como um teste simples, coloque as expressões em caixas de texto. Em 
seguida, tente dimensionar a caixa de texto com Now() dentro dela. 
19.2.3 Incluir Colunas que Podem Ser Agregadas no Seu Script 
Às vezes, é útil incluir colunas manuais no script para que o documento 
possa fazer somas com esses valores. Assim, você poderia então colocar o 
comando complexo (If) no script e teria uma soma simples no seu objeto de 
painel. 
Para isso, bastacolocar um comando IF THEN ELSE no seu script, substi-
tuindo uma coluna da base de dados ou um 1 ou 0 como valor para permitir 
a ocorrência da soma/contagem. 
Exemplos: 
IF(ACTIVE='Y',1,0) 
IF(ACTIVE='Y',sales_amount,0) 
A imposição de um 0 removerá então todos os valores desnecessários/inde-
sejados quando você aplicar SUM. 
19.3 Criar Cargas Incrementais
Uma carga incremental é uma tarefa de base de dados comum. As cargas 
incrementais são usadas ao carregar somente registros novos ou alterados da 
base de dados. Os arquivos QVD são usados para cargas incrementais no 
QlikView. As cargas incrementais com uma engenharia correta podem 
melhorar o desempenho significativamente.
Exercício
Neste exercício, reuniremos vários conceitos do Qlikview, incluindo:
• Carga incremental QVD
• Carregamento Binário
Seu sistema de produção é sobrecarregado quando o QlikView puxa todo o 
histórico. O CIO vem até você e lhe pede que resolva a situação. Como cor-
rigir isso?
1 Abra o arquivo BaseLineDataExtraction.qvw que está na pasta 
da Lição 19.
2 Recarregue o arquivo e salve-o como BaseLineDataModel.qvw na pasta 
QVDs. Observe que agora você tem um QVW que contém seu Modelo 
de Dados, mas com dados apenas até 2006 para Orders, OrderDetails e 
Shipments. Note também que nenhum Master Calendar foi criado.
177
QlikView Developer | 19 OTIMIZAÇÃO DE DESEMPENHO
Carga Binária
1 Feche todos os QVWs abertos. 
2 Crie um novo QVW e salve-o como CreateQVDfromBinary.QVW na 
pasta QVDs. 
3 Edite o script ou clique no botão Arquivo QlikView, no Editor de 
Scripts, para incluir a carga BINARY do arquivo BaseLineDataMo-
del.QVW que você acabou de salvar na mesma pasta.
O script deve ter a seguinte aparência:
Binary baselinedatamodel.qvw;
SET ThousandSep=',';
SET DecimalSep='.';
SET MoneyThousandSep=',';
SET MoneyDecimalSep='.';
SET MoneyFormat='$#,##0.00;($#,##0.00)';
SET TimeFormat='h:mm:ss TT';
SET DateFormat='M/D/YYYY';
SET TimestampFormat='M/D/AAAA h:mm:ss[.fff] TT';
SET 
MonthNames='Jan;Feb;Mar;Apr;May;Jun;Jul;Aug;Sep;Oct;
Nov;Dec';
SET DayNames='Mon;Tue;Wed;Thu;Fri;Sat;Sun'; 
4 Inclua o código a seguir na parte inferior do script.
SET vDataDir = ‘Datasources\`VDs’;
for i = 0 to NoOfTables() - 1
 LET d = TableName(i);
 store $(d) into $(vDataDir)\$(d).QVD;
next
LET j = NoOfTables();
do while j > 0
 let d = TableName(0);
 drop table $(d);
 let j = NoOfTables();
loop 
178
QlikView Developer | 19 OTIMIZAÇÃO DE DESEMPENHO
5 Recarregue e salve o arquivo, e examine a pasta Datasources\QVDs.
Você verá:
6 Feche todos os QVWs abertos. 
7 Crie um novo QVW e salve-o como MyIncrementalQVDApplica-
tion.QVW na pasta QVDs.
8 Abra o Editor de Scripts. Na aba Principal, crie uma conexão com a 
base de dados QWT.MDB.
9 Em seguida, edite o script para carregar todos os arquivos QVD gerados 
anteriormente, exceto Orders e Shipments. 
10 Crie uma nova aba do script chamada Load QVDs e carregue os QVDs 
clicando no botão Arquivos de Tabela, navegando até a pasta Data-
sources\QVDs e escolhendo o primeiro arquivo QVD. 
11 Repita o processo até que todos os arquivos QVD, exceto Orders e Ship-
ments tenham sido incluídos no script. Não esqueça de formatar o script 
de acordo com as práticas recomendadas e lembre-se de nomear cada 
tabela explicitamente. 
12 Salve seu trabalho com frequência.
13 Crie uma nova aba do script chamada New Orders e inclua o código a 
seguir no script:
SQL SELECT
 *
 FROM
 Orders
 WHERE
 year(OrderDate) > 2006
 ORDER BY
 OrderDate ASC;
179
QlikView Developer | 19 OTIMIZAÇÃO DE DESEMPENHO
14 Crie outra nova aba chamada New Order Details e inclua o código a 
seguir no script:
OrderDetails:
LOAD
LineSalesAmount - CostOfGoodsSold AS Margin,
*
;
LOAD 
OrderID & '-' & LineNo AS OrderLineKey,
Discount,
OrderID,
ProductID,
LineNo,
Quantity,
UnitPrice,
UnitPrice * Quantity * (1 - Discount) AS 
LineSalesAmount,
applymap('UnitCostMap', ProductID, 0) * Quantity AS 
CostOfGoodsSold
WHERE
exists(OrderID, OrderID)
;
SQL SELECT * FROM `Order Details`; 
15 Crie outra nova aba chamada New Shipments e inclua o código a 
seguir no script:
Shipments:
LOAD
OrderID & '-' & LineNo AS OrderLineKey,
ShipmentDate
WHERE
exists(OrderID, OrderID)
;
SQL SELECT
*
FROM
Shipments
ORDER BY
ShipmentDate; 
16 Inclua outra nova aba chamada Load Baseline QVDs (QVDs de linha 
de base) e carregue as informações do arquivo Orders. QVD que criamos 
clicando no botão Arquivos de Tabela e escolhendo o arquivo Orders. 
180
QlikView Developer | 19 OTIMIZAÇÃO DE DESEMPENHO
QVD. Inclua a palavra-chave CONCATENATE no comando LOAD e lem-
bre-se de especificar explicitamente a tabela na qual você está carre-
gando os dados de Orders de linhas de base.
17 Faça o mesmo para OrderDetails e Shipments Elas podem ser colocadas 
na aba Load Baseline QVDs juntamente com Orders.
18 Inclua o código a seguir depois de Shipments na aba Load Baseline 
QVDs. Este código calcula um OrderSalesAmount e faz sua junção na 
tabela Orders.
LEFT JOIN (Orders)
LOAD
OrderID,
sum(LineSalesAmount) AS OrderSalesAmount
RESIDENT
OrderDetails
GROUP BY
OrderID; 
19 Por fim, crie uma aba Calendar (observe que Calendar vem depois da 
nossa aba QVD) e inclua o código a seguir no script:
//defina esta variável para estabelecer as datas a 
serem geradas
Temp:
LOAD
min(OrderDate) AS minDate,
max(OrderDate) AS maxDate
181
QlikView Developer | 19 OTIMIZAÇÃO DE DESEMPENHO
RESIDENT
Orders;
LET varMinDate = Num(Peek('minDate', 0, 'Temp')); 
LET varMaxDate = Num(Peek('maxDate', 0, 'Temp')); 
DROP TABLE Temp;
// varMinDate to varMaxDate
TempCalendar:
LOAD
$(varMinDate)+Iterno()-1 AS Num,
Date($(varMinDate)+Iterno()-1) AS TempDate
AUTOGENERATE 1 WHILE $(varMinDate)+Iterno()-1<= 
$(varMaxDate);
//Crie o calendário mestre com a maioria das 
dimensões de data
MasterCalendar:
LOAD
TempDate AS OrderDate,
week(TempDate) AS Week,
Year(TempDate) AS Year,
Month(TempDate) AS Month,
Day(TempDate) AS Day,
Year2date(TempDate)*-1 AS CurYTDFlag,
Year2date(TempDate,-1)*-1 AS LastYTDFlag,
inyear(TempDate,Monthstart($(varMaxDate)),-1) AS 
RC12,
date(monthstart(TempDate), 'MMM-YYYY') AS 
MonthYear,
applymap('QuartersMap', month(TempDate), 
null()) AS Quarter,
Week(TempDate)&'-'&Year(TempDate) AS 
WeekYear,
weekday(TempDate) AS WeekDay
RESIDENT
TempCalendar
ORDER BY
TempDate Asc;
DROP TABLE TempCalendar; 
Nós criamos uma tabela temporária (Temp), descobrimos as OrderDa-
tes, mínima e máxima e usamos a função peek() para localizar o conte-
údo dos dois campos na única linha dessa tabela.
182
QlikView Developer | 19 OTIMIZAÇÃO DE DESEMPENHO
Veja também que poderíamos ter executado mais um Resident Load 
para reorganizar a nova e maior tabela Orders em ordem crescente e, 
então, usado as funções peek() originais para definir nossas variáveis de 
data mínima/máxima. Isso teria exigido que alterássemos um nome de 
tabela e abandonássemos a tabela intermediária depois de configurar as 
variáveis, o que seria uma pequena complicação.
20 Recarregue o documento e crie uma Lista Year. Todas as informações estão 
no documento, com informações de Order, OrderDetails e Shipment ante-
riores a 2007, vindas do nosso QVDs de linha de base e todos os novos 
dados a partir daí, vindos de uma carga do nosso sistema de produção.
O que está faltando em tudo isso? Normalmente, você não atualiza os 
dados de forma incremental por Year. Isso é feito todas as noites, a cada 
três horas ou, possivelmente, por demanda. Nós não salvamos as tabelas 
Orders, OrderDetails e Shipments recém-atualizadas (anos 2007 - 2010) 
para usar no próximo ciclo de atualização. Nossos parâmetros devem 
ser determinados de acordo com o momento em que os arquivos QVD 
foram recarregados pela última vez; leia o excelente artigo da Ajuda do 
Qlikview intitulado “Arquivos QVD e Carga Incremental”. Precisamos 
criar processos programados regularmente para executar nossas atuali-
zações (com o Qlikview Server como ponto inicial). Talvezdevêssemos 
fazer isso para todas as nossas tabelas. Nós presumimos que Orders, 
OrderDetails e Shipments não estavam sendo alteradas ou canceladas, 
ou que novos Orders, OrderDetails e Shipments não estavam sendo 
incluídos nos nossos intervalos de datas anteriores; assim, seria útil ter 
uma CreateDate ou LastModifiedDate nos dados. O tópico da Ajuda 
aborda todos esses casos mais detalhadamente.
Observações
Para fins de desenvolvimento ou manipulação de dados estendidos, a opera-
ção binary load pode ser útil. Apenas um comando binary load é permitido 
em um script.
Para loops e loops while/until são instrumentos de script comuns para criar 
a automação de operações de script repetitivas.
Lembre-se: Armazenar dados históricos que não mudam em arquivos QVD 
e então carregar esses dados juntamente com apenas os dados alterados 
recentemente de outras fontes de dados é uma forma bastante eficiente de:
• Otimizar a velocidade de recarga
• Reduzir o impacto sobre sistemas de origem
• Permitir que vários documentos acessem uma única fonte de 
acesso rápida de dados QVD comuns
183
QlikView Developer | 19 OTIMIZAÇÃO DE DESEMPENHO
A opção Arquivo | Reduzir Dados é uma forma rápida e flexível de produzir 
um subconjunto de dados com base na sua seleção atual ou de abandonar 
todos os dados da memória durante o desenvolvimento.
Parabéns por ter concluído a Lição 19.
184
QlikView Developer | 20 SEGURANÇA DO QLIKVIEW
20 SEGURANÇA DO QLIKVIEW
Bem-vindo à Lição 20. A segurança dos computadores é um elemento impor-
tante na maioria das organizações. Neste capítulo, vamos examinar alguns 
métodos que podem ser usados para limitar o acesso a documentos QlikView 
unicamente do QlikView Desktop (por exemplo, sem o QlikView Server). 
Esta lição é uma introdução a alguns dos métodos que você pode usar direta-
mente no QlikView para limitar o acesso em um documento QlikView. 
Neste capítulo, mostraremos como você pode trabalhar com a segurança do 
QlikView fornecendo um ID de usuário e uma senha para cada usuário. 
Também veremos como usar Nome NT e SID de Domínio do NT para per-
mitir o logon único em um documento QlikView. Por fim, examinaremos 
como você pode reduzir de forma dinâmica a quantidade de dados mostra-
dos a um usuário.
20.1 Controle de acesso
Um documento QlikView é um arquivo encriptado que consiste em uma base 
de dados, um script, layout etc. O próprio formato do arquivo fornece uma 
proteção intrínseca, pois não será possível abrir o arquivo se você não tiver o 
QlikView. Também é possível incluir níveis de acesso no script de carga.
20.2 Níveis de acesso 
Cada usuário do documento QlikView pode ter um nível de acesso atribu-
ído: ADMIN ou USER. 
• Um indivíduo com privilégios ADMIN pode alterar qualquer coisa no 
documento, enquanto uma pessoa com privilégios USER tem acesso res-
trito. 
• Um usuário do cliente QlikView será limitado automaticamente aos pri-
vilégios USER, independentemente da configuração da SEÇÃO DE 
ACESSO.
• Se nenhum nível de acesso for atribuído a um usuário na SEÇÃO DE 
ACESSO, o usuário não poderá abrir o documento QlikView.
Para que fique claro, pode ser útil usar outros níveis de acesso, por exemplo, 
NENHUM. Ele sempre será tratado como “sem acesso”.
Objetivos
• Identificar os componentes de segurança do documento QlikView
• Explicar o controle e as restrições de acesso
• Praticar a implementação da Seção de Acesso do QlikView 
185
QlikView Developer | 20 SEGURANÇA DO QLIKVIEW
20.3 Base de dados de controle de acesso
Todo o controle de acesso é gerenciado por meio de arquivos de texto, bases 
de dados ou cláusulas INLINE, da mesma forma que o QlikView normal-
mente trata os dados. As tabelas são carregadas normalmente, mas primeiro 
uma SEÇÃO DE ACESSO é carregada no script em uma seção declarada 
pelo comando SECTION ACCESS.
Se uma SEÇÃO DE ACESSO estiver declarada no script de carga, a parte 
do script que carrega dados padrão deverá ser precedida pelo comando 
SECTION APPLICATION. Existem vários nomes de campo protegidos na 
base de dados de controle de acesso, incluindo: USERID, PASSWORD, 
SERIAL, NTNAME, NTDOMAINSID, NTSID e ACCESS. É possível 
incluir outros campos definidos pelo usuário, como GROUP ou DEPART-
MENT, para facilitar a redução de dados dinâmicos ou para a administra-
ção, mas o QlikView não usa os campos extra para limitar o acesso ao 
documento. Nenhuma, todas ou qualquer combinação de campos de segu-
rança pode ser carregada na SEÇÃO DE ACESSO. Se nenhum dos campos 
de segurança for carregado, todos os usuários terão direitos de ADMIN.
Como outro exemplo, não é necessário usar USERID; é possível fazer ape-
nas uma verificação em SERIAL. Isso pode ser usado para recargas de linha 
de comando de documentos com acesso restrito. Os nomes de campo prote-
gidos são definidos a seguir:
ACCESS Um campo que define o tipo de acesso que terá o usuário.
USERID Um campo que deve conter um ID de usuário com privilé-
gios especificados no campo ACCESS.
PASSWORD Um campo que deve conter uma senha aceita.
SERIAL Um campo que deve conter um número que corresponda 
ao Número de Série do QlikView. Exemplo: 4900 2394 
7113 7304
NTNAME Um campo que deve conter os caracteres correspondentes 
a um nome de usuário ou nome de grupo do Domínio do 
Windows NT.
DICA: Saiba que todos os nomes e valores de campos serão convertidos 
automaticamente em letras maiúsculas em SECTION ACCESS. Isso deve 
ser considerado ao usar comandos LOAD ou RESIDENT LOAD anterio-
res na SEÇÃO DE ACESSO.
186
QlikView Developer | 20 SEGURANÇA DO QLIKVIEW
NTDOMAINSID Um campo que deve conter os caracteres correspondentes 
a uma SID de Domínio do Windows NT.
Exemplo: S-1-5-21-125976590-467238106-1092489882
NTSID Um campo que deve conter uma SID do Windows NT. 
Exemplo: S-1-5-21-125976590-467238106-1092489882-
1378
OMIT Um campo que deve conter uma lista de campos que 
devem ser omitidos para esse usuário específico. Os carac-
teres curinga podem ser usados e a lista pode ficar vazia.
O QlikView comparará o número de série do QlikView com o campo 
SERIAL, o nome do usuário e grupos do Windows NT com NTNAME, a 
SID do Domínio do Windows NT com NTDOMAINSID e a SID do Win-
dows NT com NTSID. Além disso, solicitará uma ID de Usuário e Senha e 
os comparará com os campos USERID e PASSWORD.
Se uma combinação válida de ID de usuário, uma senha, a propriedade do 
ambiente também for encontrada na tabela Seção de Acesso, o documento 
será aberto com o nível de acesso correspondente. Caso contrário, o Qli-
kView negará ao usuário o acesso ao documento. Se o ID de usuário e/ou a 
senha não forem digitados corretamente em três tentativas, todo o procedi-
mento de logon deverá ser repetido.
No procedimento de logon, o QlikView consultará primeiro SERIAL, 
NTNAME, NTDOMAINSID e NTSID para verificar se essas informações 
são suficientes para conceder o acesso do usuário ao documento. Em caso 
positivo, o QlikView abrirá o documento sem solicitar USERID e PAS-
SWORD. Se apenas alguns dos campos de acesso forem carregados, serão 
executadas ações apropriadas com os dados ausentes, como solicitar mais 
informações.
Todos os nomes de campo listados nos comandos LOAD ou SELECT na 
seção de acesso devem ser escritos em MAIÚSCULAS. Qualquer nome de 
campo que contenha letras minúsculas na base de dados será convertido 
para letras maiúsculas antes de ser lido pelos comandos LOAD ou SELECT. 
No entanto, USERID e PASSWORD digitados pelo usuário final ao abrir 
documentos QlikView não diferenciam letras maiúsculas de minúsculas.
Section Access;
LOAD * INLINE [
ACCESS, USERID, PASSWORD
ADMIN, NEWDBA, ABC
];
Section Application;
..... 
187
QlikView Developer | 20 SEGURANÇA DO QLIKVIEW
20.4 Restrições de acesso herdadas
Um comando binary fará as restrições de acesso serem herdadas pelo novo 
documento QlikView que contém o comando binary. Uma pessoa com direi-
tos ADMIN para esse novo documento pode alterar os direitos de acesso do 
documento incluindo uma nova SECTIONACCESS. Uma pessoa com 
direitos USER pode executar o script e alterá-lo (incluindo seus próprios 
dados no arquivo carregado com o comando binary). Uma pessoa com direi-
tos USER não pode alterar os direitos de acesso. Isso possibilita que o admi-
nistrador de uma base de dados controle o acesso de usuários, incluindo os 
iniciados por um comando binary.
20.5 Script oculto
Um script oculto é uma área oculta do código de script protegida por senha 
que sempre é executada antes do script padrão durante uma recarga.
Ao escolher Editar Script Oculto no menu Arquivo e na caixa de diálogo 
Editar Script, será solicitada uma senha, que será requerida antes de ser 
concedido o acesso ao script oculto. Se essa for a primeira vez que você 
acessa o script oculto em um documento (desse modo criando um), será 
necessário confirmar a nova senha. Depois disso, a aba Script Oculto apare-
cerá à esquerda de todas as outras abas do script e permanecerá lá até o 
documento ser fechado. Lembre-se das seguintes características dos scripts 
ocultos, se você optar por usá-los:
• Se um script oculto for usado, não será possível usar o comando binary 
no script normal, pois ele deve ser o primeiro comando executado em 
um script de documento.
• As tabelas geradas pela parte oculta do script não serão representadas 
por um nome no campo de sistema $Table.
• A caixa de diálogo Progresso da Execução do Script não será atuali-
zada durante a execução de um script oculto. Nenhuma entrada será 
feita no arquivo de log, se for usado. Note que desde o QlikView versão 
7, há disponível uma sobreposição de Segurança do Documento para 
Mostrar Progresso do Script Oculto. As informações de progresso tam-
bém serão gravadas no log de execução do script, se aplicável.
• Se o script oculto contiver uma Seção de Acesso, essa seção não será 
permitida no script normal, nem em um script que inicie com uma carga 
binária do arquivo QlikView que contém o script oculto.
188
QlikView Developer | 20 SEGURANÇA DO QLIKVIEW
20.6 Incluindo a Seção de Acesso
Vamos agora incluir no script as linhas necessárias para verificar os direitos 
de acesso de vários usuários. Em geral, é uma prática recomendável colocar 
o código do script referente à seção de acesso na área do “script oculto”.
Antes de começar a trabalhar com a segurança no QlikView, certifique-se de 
salvar um backup do seu documento sem segurança. Essa é uma medida de 
segurança para que você possa começar novamente desde o início, caso a 
seção de segurança não funcione.
Exercício Configuração da Segurança de Acesso em um arquivo QlikView
1 Abra o arquivo Security.qvw que está na pasta da Lição 20.
2 Abra o Editor de Scripts.
3 No menu Arquivo, selecione Criar Script Oculto...
4 Digite a senha hidden e confirme a senha.
5 No menu Inserir, clique em Seção de Acesso. Depois, clique em Inline. 
6 Selecione Tabela de Acesso Básico do Usuário de forma que 
ACCESS, USERID e PASSWORD estejam marcados.
Aviso! É ALTAMENTE RECOMENDÁVEL SALVAR UM DOCU-
MENTO COM SEÇÃO DE ACESSO COM UM NOVO NOME DE 
ARQUIVO APÓS A RECARGA, MAS ANTES DE TENTAR FECHAR 
E ABRIR O DOCUMENTO QlikView NOVAMENTE. SE HOUVER 
ERROS LÓGICOS NA SEÇÃO DE ACESSO, TALVEZ NÃO SEJA 
MAIS POSSÍVEL ABRIR O DOCUMENTO DEPOIS QUE ELE FOR 
RECARREGADO.
189
QlikView Developer | 20 SEGURANÇA DO QLIKVIEW
7 Clique em OK e inclua as linhas a seguir na tabela.
8 Clique em OK. O assistente deve ter criado o comando de script a seguir.
Section Access;
LOAD * INLINE [
ACCESS, USERID, PASSWORD
ADMIN, ADMIN, ADMIN 
USER, USER, USER
];
Section Application; 
9 Denomine essa tabela como Access01.
10 Salve e recarregue o script.
Esta simples verificação de acesso exigirá que os usuários se identifiquem ao 
abrir um documento.
UserId, User e Password User evitarão que o usuário acesse o script de carga 
se essa segurança estiver definida nas Propriedades do Documento. Um 
usuário pertencente ao grupo User também tem o acesso negado à aba Segu-
rança nas caixas de diálogo Propriedades do Documento e Propriedades 
da Pasta.
UserID Admin junto com Password Admin darão ao usuário direitos para 
fazer todas as alterações ao documento no QlikView Desktop.
Figura 1. Usando o Assistente para Dados Inline para a Segurança.
OBSERVAÇÃO: INCLUA O COMANDO Section Application 
DEPOIS DE ACCESS LOAD PARA PRODUZIR UM DOCUMENTO 
UTILIZÁVEL.
190
QlikView Developer | 20 SEGURANÇA DO QLIKVIEW
Exercício
1 Saia do QlikView e abra seu documento recém-nomeado novamente. 
Agora, você verá a seguinte caixa de diálogo, na qual é possível inserir 
o UserID e a Password.
20.7 Controle de acesso para determinados comandos
As configurações nas abas Segurança da caixa de diálogo Propriedades do 
Documento e da caixa de diálogo Propriedades da Pasta, no menu Configu-
ração, podem impedir que os usuários utilizem determinados comandos de 
menu e alterem o layout. Contudo, para usar essas configurações como 
medidas de segurança, é importante que os usuários tenham apenas direitos 
User. Todos os usuários que têm direitos Admin podem alterar as configura-
ções de segurança a qualquer momento.
Exercício
1 Verifique se você efetuou login no documento QlikView como Admin. É 
necessário ter direitos de administrador para a operação a seguir.
2 No menu Configurações, clique em Propriedades do Documento.
3 Vá para a aba Segurança e selecione o quê os Usuários estão autorizados 
ou não a fazer. Certifique-se de que um Usuário não possa recarregar o 
script ou salvar o documento.
4 Marque a caixa de verificação Admin Sobrepõe Regras de Segurança, 
de modo que o ADMIN sempre tenha permissões para fazer qualquer 
coisa.
Figura 2. Caixa de diálogo Identificação de Usuário.
Observação: Não é possível fazer este exercício com o QlikView Personal 
Edition.
191
QlikView Developer | 20 SEGURANÇA DO QLIKVIEW
5 Clique em OK e salve o documento. 
6 Feche o documento, abra-o novamente e efetue logon como User. Note 
que você não poderá salvar o documento, nem recarregar o script. 
20.8 Mais controle de acesso
É fácil aumentar o controle de segurança para os usuários que acreditamos 
que precisarão acessar um determinado documento. Ao incluir um campo à 
tabela INLINE criada anteriormente, podemos conectá-lo a uma nova tabela 
com duas colunas, na qual especificamos os números de série que têm acesso 
ao documento. Dessa forma, podemos restringir ainda mais o acesso a um 
documento específico.
A nova tabela com duas colunas será criada no Bloco de Notas ou em um 
editor de texto semelhante e será chamada Access. Salvaremos esse novo 
arquivo de texto delimitado por tabulações no diretório DataSources.
Figura 3. Propriedades do Documento - Segurança
Dica: Também há uma aba Segurança na caixa de diálogo Propriedades 
da Pasta, onde você pode definir a segurança da pasta atual e aplicá-la a 
todas as pastas.
192
QlikView Developer | 20 SEGURANÇA DO QLIKVIEW
Exercício
1 Adicione outro campo chamado COMPUTER à tabela INLINE 
Access01 existente. Inclua um ou dois identificadores para os computa-
dores do curso (eles atuarão como campos conectados) como mostrado 
a seguir.
Section Access;
LOAD * INLINE [
 ACCESS, USERID, PASSWORD, COMPUTER
 ADMIN, ADMIN, ADMIN, COURSE1 
 USER, USER, USER, COURSE2
];
Section Application; 
2 Abra o Bloco de Notas ou um editor de texto semelhante
3 Crie uma tabela com duas colunas, com os campos COMPUTER e 
SERIAL. Inclua seu próprio número de série como valor do campo. 
Você encontrará esse número no menu Sobre o QlikView, no QlikView. 
Um exemplo é mostrado a seguir.
COMPUTER SERIAL
Course1 2300 2394 7111 8000
Course2 2300 2394 7111 8001
4 Salve esse arquivo como Access02.txt.
É possível ver que apenas dois números de licença têm acesso ao docu-
mento que criamos, um com direitos USER e outro com direitos 
ADMIN. Além disso, observe que estamos incluindo restrições em Use-
rIDs (User) existentes e não substituindo restrições atuais.
5 Abra o script de carga e clique no botão Arquivos de Tabela. Carreguea 
tabela recém-criada Access02.txt depois da tabela inline e antes do 
comando SECTION APPLICATION como mostrado a seguir. 
Access02:
Load
COMPUTER,
SERIAL
FROM Datasources\Access02.txt 
(ansi, txt, delimiter is '\t', embedded 
labels); 
Section Application;
6 Salve e recarregue o documento.
7 Feche o documento e abra-o novamente como User.
193
QlikView Developer | 20 SEGURANÇA DO QLIKVIEW
Presumindo que você não tenha digitado seu número de série nos dois regis-
tros do arquivo Access02.txt, você poderá efetuar login somente como User 
ou Admin. Seria fácil incluir uma terceira linha nas tabelas de controle de 
acesso para sempre dar a todos os números de série direitos de User, presu-
mindo um ID de usuário e senha válidos. Para isso, podemos incluir um ter-
ceiro computador (por exemplo, Course3) e digitar * como o valor no 
campo Serial.
20.9 Considerações sobre Recarga da Linha de Comando sem 
Supervisão
Para criar acesso de segurança para um processo de recarga da linha de 
comando sem intervenção, você digitaria o Serial registrado para o usuário 
atribuído ao processo de recarga no computador da recarga. Em seguida, 
conecte isso a UserID e Password com * como valores (aqui, * significa todos 
os valores possíveis, o que evitaria as solicitações de UserID e Password). 
Você também deve definir o campo Access como Admin para esse usuário.
Se você incluir o registro a seguir ao comando Access01 LOAD INLINE, 
o computador Course2 poderá ser usado para recargas sem supervisão.
*,*,ADMIN,COURSE2]
20.10 Restrições de acesso em valores de campo selecionados
O acesso seguro do QlikView oferece um recurso para evitar que os usuários 
vejam partes dos dados em um documento. Esse recurso foi desenvolvido ini-
cialmente para o QlikView Server, mas também pode ser usado no QlikView, 
observando algumas considerações.
A seleção de valores a serem mostrados ou ocultos é controlada pela existência 
de um ou mais campos com os mesmos nomes em SECTION ACCESS e 
SECTION APPLICATION. Quando o usuário tiver efetuado login, o QlikView 
copiará os valores selecionados (letras maiúsculas) em SECTION ACCESS 
para campos com os mesmos nomes em SECTION APPLICATION. O Qli-
kView ocultará permanentemente do usuário todos os dados excluídos por 
esse processo.
Todos os nomes e valores de campo usados para conectar SECTION 
ACCESS e SECTION APPLICATION devem estar em letras maiúsculas, pois 
todos os nomes e valores de campo são convertidos por padrão em maiúscu-
las em SECTION ACCESS.
Para usar esse recurso, é necessário marcar a opção Redução Inicial de 
Dados Baseada na Seção de Acesso, na página Abrindo, na caixa de diá-
logo Propriedades do Documento. Se esse recurso for usado nos documen-
tos que serão distribuídos por outros meios e não pelo QlikView Server, a 
194
QlikView Developer | 20 SEGURANÇA DO QLIKVIEW
opção Carga Binária Proibida da mesma página deverá ser selecionada para 
manter a integridade da proteção dos dados.
20.11 Limitação de valores de campo na Seção de Acesso
Mostraremos agora como limitar o valor dos dados mostrados no docu-
mento QlikView. Queremos distribuir o arquivo para os funcionários envol-
vidos em vendas. Entretanto, cada vendedor não terá os dados referentes a 
seus colegas. Portanto, incluiremos uma limitação no script para assegurar 
que as pessoas tenham acesso apenas a seus próprios dados.
Para isso, usaremos dois arquivos de texto. O primeiro arquivo estabelecerá 
os campos SECTION ACCESS para cada usuário permitido. O segundo 
arquivo de texto será carregado em SECTION APPLICATION e limitará os 
dados do aplicativo que cada usuário permitido poderá exibir ao abrir o 
documento QlikView. Os dois arquivos de texto estão localizados no diretó-
rio Datasources.
Também devemos ter em mente que precisamos de um administrador para 
gerenciar o documento. Um dos vendedores também é Gerente de Vendas da 
empresa e, naturalmente, ele deve ter acesso a todo o documento para poder 
avaliar o desempenho de cada vendedor. Também temos um Coordenador de 
Vendas em Lund, que deve ter acesso aos dados de todos os vendedores. Esse 
acesso pode ser implementado com o uso de um valor de campo nulo especifi-
cado no campo de conexão quando carregado na seção SECTION ACCESS. 
Você poderia usar o valor * para esse campo, como usado anteriormente para 
os campos UserID e Password, mas em geral é preferível usar nulo para os 
campos de conexão, pois isso permitirá o acesso a TODOS os dados, indepen-
dentemente de haver uma conexão lógica com o campo de conexão.
Exercício
1 Abra o script de carga e Arquivo - Editar Script Oculto (você deve ter 
privilégios Admin para editar o script oculto). Verifique se o cursor está 
posicionado sobre a aba Script Oculto. 
2 Agora, comente as tabelas INLINE carregadas anteriormente de forma 
que elas não afetem nossas novas tabelas SECTION ACCESS.
DICA: Há um problema conhecido na Redução Dinâmica de Dados de 
documentos QlikView, em que uma recarga totalmente executada substi-
tuirá as configurações de redução dinâmica de dados, permitindo que os 
usuários vejam “todos” os dados. Para atenuar esse risco de segurança, o 
QlikView proíbe recargas de dados em documentos com a redução dinâ-
mica de dados em vigor.
195
QlikView Developer | 20 SEGURANÇA DO QLIKVIEW
3 O primeiro arquivo de texto a ser carregado é SalesSecurity.txt, locali-
zado no diretório Datasources. Rotule essa tabela lógica como Access01.
4 Em seguida, inclua o comando SECTION APPLICATION.
5 Crio um comando load para o arquivo SalesInitials.txt, localizado no 
diretório Datasources. É uma prática recomendada usar a função Upper 
no campo de conexão (SP), pois o valor deve estar em letras maiúsculas 
para corresponder ao valor de SECTION ACCESS. Os novos comandos 
devem ter uma aparência semelhante à seguinte.
Section Access;
Access01:
Load
[USERID],
[ACCESS],
SP /* Connecting field for data reduction 
*/
FROM Datasources\SalesSecurity.txt 
(ansi, txt, delimiter is '\t', embedded labels);

Section Application;

Access_Application:
Load
upper(SP) as SP, /* Connecting field for 
data reduction */
[SalesPerson]
FROM Datasources\SalesInitials.txt 
(ansi, txt, delimiter is '\t', embedded labels);
6 Salve e recarregue o documento.
7 Vá para o menu Configuração e para Propriedades do Documento.
8 Selecione a aba Abertura e marque Redução Inicial de Dados Baseada 
na Seção de Acesso. Desmarque Exclusão Total. Além disso, marque 
Carga Binária Proibida.
9 Continue na aba Segurança e confirme se o Usuário não pode editar ou 
recarregar o script. Também não deve ser permitido salvar (desmarque 
as caixas de verificação Editar Script, Recarregar, Recarga Parcial, Sal-
var Documento e Permitir que o Usuário Execute o Script).
10 Salve novamente e saia do documento.
11 Abra o documento novamente e efetue logon com o UserID Luis. Você 
pode exibir os dados desse usuário, além dos Vendedores Tomás Lima e 
Francisco Russo.
12 Feche o documento e abra-o novamente, dessa vez usando Jaime. Agora 
você poderá ver todos os dados novamente.
Parabéns por ter concluído a Lição 20 e o curso.
196
QlikView Developer | 20 SEGURANÇA DO QLIKVIEW
20.12 Dê a sua opinião sobre como nos saímos...
Parabéns por ter concluído o curso de Desenvolvedor. Mande um feedback 
para nós. 
197
	1 INTRODUÇÃO
	1.1 Sobre este curso
	1.2 Definição de um Desenvolvedor e de um Administrador do Sistema QlikView
	1.3 Sobre a QlikTech
	1.4 Business Discovery
	1.5 QlikView
	1.6 Componentes da Plataforma de Business Discovery QlikView
	1.6.1 QlikView Personal Edition
	1.6.2 QlikView Desktop
	1.6.3 QlikView Server
	1.6.4 QlikView Publisher
	1.7 Opções de treinamento do QlikView
	2 A METODOLOGIA DE DESENVOLVIMENTO DO QLIKVIEW
	2.1 Importar/Exportar Layouts de Pasta e Documento como XML
	2.1.1 Por que isso é importante?
	2.2 Plano de projeto
	2.3 Revisão do Plano de Projeto
	2.4 Metodologia de Projetos do QlikView (QPM)
	3 IMPLANTAÇÃO
	3.1 QlikView Desktop, Server e Publisher
	3.1.1QlikView Desktop
	3.1.2 QlikView Server (QVS)
	3.1.3 QlikView Publisher
	3.2 Exemplos de implantações
	3.2.1 QlikView Standalone
	3.2.2 QlikView Server
	3.2.3 QlikView Server Publisher
	4 INTRODUÇÃO AOS DADOS E SCRIPTS
	4.1 Sistema de gerenciamento de base de dados relacional (RDBMS)
	4.2 Estruturas de Dados
	4.3 Assistente para Arquivos de Tabelas
	4.4 Arquivos QVD do QlikView
	4.5 O formato de arquivo QVD
	4.6 Qual é a utilidade dos arquivos QVD?
	4.7 Comparação de Estruturas de Bases de Dados com Estruturas de Dados do QlikView
	4.8 Estruturas de Dados no QlikView
	4.9 Arquivos de Fonte de Dados
	4.10 Fonte de Dados Principal do QWT
	4.11 Arquivos de Dados Secundários do QWT
	Arquivos Excel
	Arquivos XML
	4.12 Introdução aos Scripts
	4.13 Caixa de Diálogo Editar Script
	1 Abra o QlikView.
	2 No menu Arquivo, selecione Novo.
	3 Clique em Cancelar. Assim, o assistente de Inicialização é suprimido.
	4 Salve seu arquivo. Dê ao arquivo um nome fácil de lembrar, como QVDeveloper_Exercises.qvw. Observe que o arquivo QVDeveloper_Solution.qvw, com todos os exercícios feitos, está no material do curso.
	5 No menu Arquivo, selecione Editar Script ou clique no ícone
	4.13.1 Barra de Ferramentas Editar Script
	4.13.2 Comandos do Menu Editar Script
	4.13.3 Painel de Ferramentas da caixa Editar Script
	4.13.4 Aba Dados
	Agrupamento de base de dados
	Agrupamento Dados de Arquivos
	4.13.5 Dados Personalizados
	4.13.6 Aba Funções
	4.13.7 Aba Variáveis
	4.13.8 Aba Configuração
	Agrupamento Privilégios do Script
	Agrupamento Configuração
	5 SINTAXE BÁSICA DO SCRIPT
	5.1 Sintaxe
	5.1.1 Comando Connect
	1 No menu Configurações, selecione Propriedades do Documento.
	2 Na aba Geral, selecione Encriptar as Credenciais de Conexão do Usuário.
	3 Clique no botão OK.
	5.1.2 Comando Select
	Limitações de ODBC:
	Vantagem da Junção por Union
	5.1.3 Comando Load
	Exercício: Criar uma Conexão com a Base de Dados
	1 Crie um novo Qvw e salve-o.
	2 No menu Configurações, clique em Propriedades do Documento.
	3 Na aba Geral, clique em Gerar Arquivo de Log. Assim, será gerado um arquivo de log de execução do script cada vez que o script de carga for executado.
	4 Clique no botão OK. A janela Propriedades do Documento é fechada.
	5 No menu Configurações, clique em Propriedades do Documento.
	6 Na aba Salvar, verifique se Salvar Antes de Recarregar está marcado. Assim, o QlikView sempre salvará todos os seus documentos antes de recarregar o documento, de forma que você não perderá nenhuma alteração feita no script.
	7 Clique no botão OK. A janela Preferências do Usuário é fechada.
	8 No menu Arquivo, selecione Salvar.
	9 No menu Arquivo, selecione Editar Script. O script mostra algumas informações. São as variáveis de formato, que são geradas automaticamente pelo QlikView. As variáveis se baseiam nas configurações regionais do seu sistema operacional em rel...
	10 Na aba Dados, selecione OLE DB na lista suspensa.
	11 Na aba Dados, selecione a caixa de seleção Forçar 32 Bits, se você estiver trabalhando em um sistema 64 bits como o Windows 7.
	12 Clique em Conectar. A caixa de diálogo Propriedades de Vínculos de Dados. Essa janela permite que você escolha dentre vários provedores OLE DB que estão instalados no seu computador. Como estamos trabalhando com uma base de dados do Access, ...
	13 Selecione o Provedor OLE DB Microsoft Jet 4.0. Ele se conectará à base de dados do Access.
	14 Clique em Avançar para ir à tela de seleção da base de dados à qual nos conectaremos.
	15 Clique no ícone Pesquisar e navegue até o caminho da base de dados QWT. A base de dados QWT não tem um nome de usuário e uma senha, de forma que podemos utilizar o padrão.
	16 Clique em Conexão de Teste.
	17 Clique no botão OK.
	6 CARREGAMENTO DE DADOS A PARTIR DA BASE DE DADOS
	6.1 Geração do Script
	6.2 Comentários no Script
	Exercício: Carregar Dados
	1 Começaremos incluindo a tabela Customers no script.
	2 No menu Arquivo, selecione Editar Script.
	3 Na caixa de diálogo Editar Script, clique no botão Selecionar.
	4 Nas Tabelas de Bases de Dados, selecione a tabela Customers.
	5 Selecione Carga Anterior. Essa opção possibilita o uso das funções internas do QlikView dentro do comando LOAD.
	6 Clique no botão OK. O script deve ter a seguinte aparência:
	7 Coloque o cursor acima da linha LOAD e digite Customers, seguido por um dois-pontos. O script deve ter a seguinte aparência:
	8 Clique antes da palavra LOAD, e pressione Enter. Cria uma linha vazia acima do comando LOAD.
	9 Clique na linha recém-criada.
	10 Tipo:
	11 Clique em Salvar. O documento QlikView inteiro será salvo, incluindo o script de carga.
	12 Clique no ícone Recarregar para recarregar o script. Usar a sequência de teclas CTRL+R é outra forma de iniciar uma recarga. É exibida a caixa de diálogo Propriedades da Pasta após a execução do script
	13 Clique no botão OK.
	14 No menu Arquivo, selecione Editar Script ou clique no ícone Editar Script. A sequência de teclas CTRL+E é outra forma de entrar no editor de script. Continuaremos a ler tabelas no QlikView, começando pela tabela Shippers.
	15 Posicione seu cursor em uma linha após o comando LOAD da tabela Customers (FROM Customers;).
	16 Pressione Enter duas vezes. Linhas adicionais são incluídas.
	17 Clique no botão Selecionar.
	18 Selecione a tabela Shippers e clique no botão OK.
	19 Digite um comentário para a tabela Shippers e atribua a ela o Rótulo Shippers.
	20 Coloque o cursor imediatamente após CompanyName na tabela Shippers.
	21 Digite AS Shippers. O script deve ter a aparência a seguir:
	22 Coloque o cursor acima da linha LOAD e digite Shippers:
	23 Clique em Salvar.
	24 Clique em Recarregar. A janela Propriedades da Pasta é exibida.
	25 Clique no botão OK.
	Exercício: Carregar Dados Adicionais
	1 Carregue os campos da tabela Products no script.
	2 Digite um comentário para a tabela Products e atribua a ela o rótulo Products.
	3 Carregue os campos da tabela Categories no script. Faça um comentário sobre a tabela e a rotule como Categories.
	4 Carregue os campos da tabela Divisions no script.
	5 Faça um comentário na tabela Divisions e a rotule como Divisions.
	6.3 Depuração de Scripts
	Exercício: Usar o Depurador de Script
	1 No menu Arquivo, selecione Editar Script.
	2 Clique em Depurar.
	3 Para inserir pontos de interrupção, clique no número da linha ao lado de SQL SELECT nas tabelas Customers e Shippers, e ao lado de LOAD na tabela Products. Os pontos de interrupção serão vistos como pontos vermelhos.
	4 Clique em Animar.
	5 Clique em Fechar.
	6 Abra o depurador novamente e execute o script com uma Carga Limitada de 10 registros.
	6.3.1 Arquivo de Log de Execução do Script
	Exercício: Visualização do arquivo de log
	1 No Bloco de Notas, abra seu arquivo de log. O arquivo estará localizado no mesmo diretório que o documento QlikView que está sendo recarregado.
	7 ESTRUTURAÇÃO DO SCRIPT
	7.1 Criar Abas no Script
	Exercício: Estruturação do Script
	1 Abra seu documento QlikView.
	2 Clique no ícone Editar Script ou pressione Ctrl+e.
	3 Clique no botão da ferramenta Adicionar nova aba.
	4 A caixa de diálogo Renomear Aba é exibida. Digite: Dimension para nomear a aba.
	5 Clique no botão OK.
	6 Vá para a aba Principal e selecione todas as tabelas carregadas até o momento. Deixe os comandos Set e o comando Connect de lado por enquanto.
	7 Recorte as tabelas e clique na aba Dimensões. .
	8 Cole as tabelas na aba Dimensões.
	9 Clique em Salvar.
	7.2 Chaves Sintéticas
	Exercício: Pedidos e Detalhes do Pedido
	1 Abra o Editor de Scripts.
	2 Crie uma nova aba e a nomeie Orders.
	3 Clique no botão Selecionar.
	4 Carregue a tabela Orders.
	5 Digite o seguinte após OrderDate, no comando Load,
	6 Abra o Editor de Scripts.
	7 Clique no script depois do script de carga da tabela LOAD. Você está incluindo a tabela Orders Details depois da tabela Orders.
	8 Clique no botão Selecionar.
	9 Carregue a tabela Orders Details.
	10 Depois de UnitPrice, digite,
	11 Clique em Salvar.
	12 Clique em Recarregar.
	13 Abra o Visualizador de Tabelas(Ctrl+t) para compreender melhor como as tabelas são conectadas. Essa caixa de diálogo é usada para mostrar a estrutura da tabela de dados do documento QlikView atual. As tabelas são mostradas como caixas, com um...
	14 No Editor de Scripts, vá a tabela Products, na aba Dimensions.
	15 Renomeie UnitPrice para CataloguePrice
	16 Recarregue e abra o Visualizador de Tabelas.
	8 MODELO DE DADOS BÁSICO E VISUALIZADOR DE TABELAS
	8.1 O Visualizador de Tabelas
	Visão das Tabelas Internas
	Visão das Tabelas Fonte
	Abrir o Visualizador de Tabelas
	Exercício: Compreendendo o Visualizador de Tabelas
	1 Abra seu documento QlikView. No menu Arquivo, selecione o Visualizador de Tabelas ou pressione CTRL + T.
	2 Reorganize manualmente as tabelas ou clique no botão Ferramentas, de forma a poder ver as conexões entre elas.
	3 Coloque o cursor sobre o cabeçalho da tabela Orders.
	4 Coloque o cursor sobre ShipperID na tabela Shippers. Ao passar o cursor sobre um dos campos da tabela, é exibida uma dica de ferramenta com informações sobre o conteúdo deste campo:
	5 Clique com o botão direito do mouse na tabela Divisions e escolha Visualizar.
	6 Clique em Fechar. A janela Visualizar é fechada.
	7 Clique no botão OK. A janela do Visualizador de Tabelas é fechada.
	Campos do sistema
	Exercício: A Aba Sistema
	1 Feche o Editor de Scripts e clique no botão Incluir Pasta na janela principal.
	2 Clique com o botão direito do mouse na nova pasta e selecione Propriedades.
	3 Digite o Título da pasta como Sistema na aba Geral.
	4 Na aba Campos, marque a caixa Mostrar Campos do Sistema e selecione todos os campos com o sinal de cifrão, $, na frente.
	5 Clique no botão Incluir e em OK.
	6 Organize os campos na pasta e clique com o botão direito do mouse na lista $Field.
	7 Clique em Propriedades, Geral, Mostrar Frequência para ver como muitas vezes vários campos se repetem na estrutura de dados interna.
	8 Na aba Classificar, você pode classificá-los de acordo com a frequência decrescente para colocar os campos que ocorrem com mais frequência na parte superior da lista.
	9 Repita esses passos para a lista $Table.
	8.1.1 Usando Campos do Sistema
	8.2 Tabela do Sistema
	Exercício: Compreendendo a Tabela do Sistema
	1 Clique na pasta Sistema.
	2 Clique com o botão direito do mouse na pasta e selecione novo objeto de pasta, Tabela do Sistema. Será criada uma tabela dinâmica com as dimensões $Field e $Table. A expressão no gráfico será Only($Field). As duas dimensões são classificad...
	8.3 Propriedades do Documento: página Tabelas
	9 TRANSFORMAÇÃO DE DADOS BÁSICA
	9.1 Comando Load
	9.2 Renomear um Campo
	9.2.1 Comando AS
	9.2.2 Comando Alias
	9.2.3 Comando Rename Field
	9.3 Expressões de Script
	9.4 Carregar um Arquivo XML
	Exercício: Carregar um Arquivo de Texto em Formato XML
	1 Abra seu documento QlikView.
	2 No menu Arquivo, selecione Editar Script.
	3 Posicione o cursor na parte inferior da aba Dimensions.
	4 Inclua o comentário: Suppliers.
	5 Clique no botão Arquivos de Tabela para abrir a caixa de diálogo Abrir Arquivos Locais.
	6 Localize o arquivo suppliers.xml na pasta DataSources e clique em Abrir.
	7 Verifique se a tabela Suppliers/_empty_ está selecionada. Ao examinar a janela dos campos, a tabela deverá conter 29 linhas.
	8 Clique em Terminar.
	9 Edite o script removendo o comando Directory; e substitua-o com Suppliers: para nomear a tabela.
	10 Verifique no seu trabalho se o script da tabela Suppliers tem a aparência a seguir.
	9.5 Comando Qualify
	9.5.1 Como renomear campos usando o comando Qualify
	Exercício: Comando Qualify
	1 Digite as seguintes linhas de código antes do comando Load da tabela Suppliers.
	2 Depois que a tabela Suppliers tiver sido carregada, deveremos incluir o comando a seguir de forma que todos os campos carregados depois desse não tenham o qualificador de tabela.
	3 Salve e Recarregue o documento.
	4 Abra o Visualizador de Tabelas. Agora, você verá os resultados da inclusão do nome da tabela ao nome do campo.
	9.6 Campos-chave
	Carregar um Campo Várias Vezes em uma Tabela
	9.7 Usar um Contador de Registros em Campos-chave
	9.8 Isto Está Certo?
	Exercício: Transformação de Dados Básica
	1 Crie um novo contador, ProductIDRecordCounter. O novo campo será usado para produzir a Medida Principal necessária Total Products Sold, conforme especificado no plano de projeto. Pense com cuidado na tabela na qual o campo ProductIDRecordCounter ...
	2 Crie um novo contador OrderIDCounter. O novo campo será usado para calcular o número total de Orders. Crie o campo do contador de registros na tabela correta.
	3 Recarregue.
	4 Crie uma tabela dinâmica.
	5 Use CompanyName, ProductName e Month como dimensões.
	6 A expressão deve calcular o número distinto de produtos vendidos e deve ser rotulada como [Total Products Sold]. Habilite Mostrar Subtotais por CompanyName e Month. Essa opção se encontra na aba Apresentação.
	7 Inclua uma nova expressão para o número de Pedidos realizados. Use o campo OrderIDCounter para esse cálculo. Rotule essa expressão como [Number of Orders].
	8 Classifique as dimensões CompanyName e ProductName pela mesma expressão que [Number of Orders], na ordem Decrescente.
	10 ADICIONAR DADOS DE TEXTO
	10.1 Assistente de Arquivo
	10.2 Arquivos do Excel
	10.2.1 Funcionários
	10.2.2 Escritórios
	10.3 Geração de scripts usando o Assistente de Arquivo
	Exercício: Carregamento de arquivos do Microsoft Excel
	1 Abra seu arquivo.
	2 No menu Arquivo, selecione Editar Script.
	3 Crie uma nova aba e a nomeie File Data.
	4 No grupo Dados dos arquivos, verifique se a caixa Caminhos Relativos está marcada.
	5 Clique em Arquivo de Tabela.
	6 Localize o arquivo EmpOff.xls na pasta DataSources e clique em Abrir.
	7 Verifique se as configurações padrão do Assistente de Arquivo estão corretas. Elas devem ser as seguintes:
	8 Clique no nome do campo EmpID e altere o nome para EmployeeID.
	9 Pressione Enter para aplicar a alteração.
	10 Clique em Terminar para voltar para a caixa de diálogo Editar Script.
	11 Veja o novo comando LOAD gerado para os dados da tabela Employee.
	12 Crie um comentário: Employees table
	13 Exclua o comando DIRECTORY; gerado devido à especificação de Caminhos Relativos. Esses comandos não serão necessários no nosso script.
	14 Inclua um campo Employee Hire Year usando a função Year, no campo [Hire Date]. Chame o novo campo de HireYear.
	15 Os comandos de script deverão ter a seguinte aparência:
	1 No menu Arquivo, selecione Editar Script.
	2 Crie uma nova aba e a nomeie File Data.
	3 No grupo Dados dos arquivos, verifique se a caixa Caminhos Relativos está marcada.
	4 Clique em Arquivo de Tabela.
	5 Localize o arquivo EmpOff.xls na pasta DataSources e clique em Abrir.
	6 Ao abrir o Assistente de Arquivo, certifique-se de selecionar a planilha do Excel Office$, na caixa rotulada como Tabela, na primeira página do assistente.
	7 Adicione um comentário de tabela: Offices table. O script deve ter a aparência a seguir:
	8 Salve e Recarregue o documento.
	9 Abra o Visualizador de Tabelas e observe os vínculos nos campos Office e EmployeeID.
	10 Na aba Principal do layout, inclua Listas para OrderID, EmployeeID e Office. Faça as seleções e observe que as tabelas são vinculadas.
	11 GERAR DADOS NO SCRIPT DO QLIKVIEW
	11.1 Resident Load
	Exercício
	1 Abra seu documento.
	2 No menu Arquivo, selecione Editar Script.
	3 Localize a tabela Employees na aba Dados do Arquivo e substitua os campos First Name e Last Name pela seguinte linha:
	4 Adicione uma nova aba ao script e a nomeie como Sales Person. Agora, vamos incluir outra tabela carregada no script mas, em vez de usar um assistente para criar o código, copiaremos o código existente e o modificaremos.
	5 Localize a tabela Employees carregada na aba do script File Data.
	6 Copie todas as linhas deste comando, vá para a aba e para a aba Sales Person e cole.
	7 Altere o nome da tabela para SalesPersons.
	8 Apague ou remova o comentário de EmpID para mostrar apenas o campo EmployeeID (não vamos mais ler os dados de origem, masos dados já carregados e o campo renomeado na tabela Employees).
	9 Remova a operação de concatenação de First Name e Last Name do campo Name e use o campo SalesPerson.
	10 Remova os campos [Hire Date], HireYear, Office, Extension, [Reports To] e [Year Salary] do comando LOAD.
	11 Remova a vírgula do campo Title (agora ele é o último campo nesta carga) e o renomeie como SalesTitle.
	12 Remova a especificação FROM, pois esta carga não será lida de um arquivo em disco.
	13 Inclua uma especificação RESIDENT que aponte para a tabela residente da qual desejamos carregar, no mesmo local que o FROM anterior.
	14 Remova o ponto-e-vírgula (;) localizado após Resident Employee.
	15 Inclua a condição WHERE após a linha Resident, da seguinte forma:
	16 Salve e Recarregue o documento.
	17 Inclua listas para Name, Title e SalesTitle na pasta Principal.
	18 Selecione tudo no campo SalesTitle. Observe que apenas alguns dos valores de Name e Title são mostrados como valores possíveis (em branco). Para que um valor da tabela Employees original seja incluído na nova tabela lógica SalesPersons, ele de...
	19 Salve o documento.
	11.2 Uso da tabela Orders para determinar o valor de Sales Person
	11.3 A Cláusula Where Exists
	Exercício: Como usar a cláusula WHERE exists
	1 Inclua a linha do script a seguir no comando LOAD da tabela Orders, imediatamente após o carregamento do campo EmployeeID.
	2 Comente a condição WHERE no comando LOAD da tabela SalesPerson.
	3 Crie uma nova condição WHERE para usar a função exists do QlikView.
	4 Salve e Recarregue.
	5 Para verificar a funcionalidade do script, inclua uma lista OrderID, clique com o botão direito do mouse e escolha Selecionar Todos. Os valores associados das outras listas devem ficar evidentes com relação ao que sabemos sobre esses dados.
	11.4 Incluir Arquivos
	Exercício: Como adicionar um comando INCLUDE
	1 Abra seu arquivo.
	2 No menu Arquivo, selecione Editar Script.
	3 Posicione o cursor na parte inferior da aba Principal.
	4 Selecione o comando Include no comando de menu Inserir.
	5 Pesquise o arquivo email.txt localizado no diretório Datasources e clique em Abrir. A linha a seguir será incluída no script.
	6 Salve e Recarregue o script.
	7 Inclua uma nova pasta ao layout e nomeie-a como Employees. Inclua o novo campo e-mail como uma lista.
	11.5 Criar um Calendário
	11.6 Obtendo a Maior e a Menor Data da Tabela Orders
	Exercício: Classificando Dados
	1 Abra a caixa de diálogo Editar Script e vá para a aba Orders.
	2 Exceto pelo campo OrderDate, remova todos os campos Date da tabela Orders utilizando comentários. O motivo para manter OrderDate é que esse será o campo de conexão com a tabela Calendar.
	3 Classifique a tabela Orders digitando o seguinte no final do comando SELECT, antes do ponto-e-vírgula.
	11.7 Tabelas autogenerate
	11.8 Criando Variáveis no Script
	Exercício: Criar Variáveis
	1 Crie uma nova aba no script e a denomine Calendar.
	2 Crie uma nova variável para a primeira data digitando o comando de script a seguir.
	3 Crie uma segunda variável para a última data digitando o comando a seguir.
	4 Crie uma terceira variável para today digitando o comando a seguir.
	5 Crie uma nova tabela digitando o script a seguir no Editor de Scripts.
	6 Salve e Recarregue o script.
	11.9 O Calendário Mestre
	Exercício: Criação do Calendário Mestre
	1 Abra o editor de scripts.
	2 Na aba Calendar.
	3 Crie uma tabela MasterCalendar que faz referência ao script mostrado a seguir.
	4 Inclua o comando DROP TABLE no final do script na aba Calendar.
	12 CONSIDERAÇÕES SOBRE SCRIPTS
	12.1 Mais informações sobre Chaves Sintéticas
	As soluções típicas incluem:
	Exercício: Leitura da Tabela Shipments
	1 No menu Arquivo, selecione Editor de Script.
	2 Vá para a parte inferior da aba Dimensions.
	3 Clique no botão Selecionar. A caixa de diálogo Criar Comando Select é exibida.
	4 Selecione a tabela Shipments e leia todos os campos do documento QlikView com preceding load.
	5 Salve e Recarregue o documento.
	6 Abra o Visualizador de Tabelas e estruture as tabelas de forma que seja fácil acompanhar as conexões.
	12.1.1 Tabelas de Chaves Sintéticas
	Exercício: Chaves Sintéticas
	1 No menu Arquivo, selecione Editor de Script.
	2 Localize a tabela Shipments.
	3 Comente o campo ProductID.
	4 Crie um campo composto de OrderID e LineNo usando “&” para concatenar os campos. Também coloque um separador entre os campos. Nomeie o campo chave como OrderLineKey.
	5 Use a função autonumber para obter um número em vez de texto para o campo chave. Isso é especialmente útil ao trabalhar com tabelas grandes, pois os valores numéricos ocupam menos memória que os valores de texto.
	6 Comente os campos OrderID e LineNo. Isso é necessário para evitar a chave sintética e ter apenas um campo de conexão (OrderLineKey) entre as tabelas Shipments e OrderDetails.
	7 Crie a mesma OrderLineKey na tabela OrderDetails.
	8 Salve e Recarregue o script. O QlikView avisa que foram encontradas referências circulares ou loops na estrutura de tabelas.
	9 Clique em OK.
	12.2 Referências Circulares
	12.3 Verificar os Números
	Exercício: Verificar os números
	1 Abra seu documento QlikView.
	2 Abra o arquivo SummaryReport.xls (um arquivo Excel que se encontra no diretório Datasources)
	3 Clique na pasta Main.
	4 Adicione listas para DivisionName, Year e CategoryName.
	5 Inclua uma caixa de estatísticas com a soma dos números de vendas. (Dica: use o campo LineSalesAmount.)
	6 Faça as Seleções de Year, Division e CategoryName, e compare os resultados de vendas com o Relatório Resumido do Excel.
	7 Clique em um mês e em uma região, e compare os resultados do QlikView com os resultados no Relatório Resumido do Excel. Verifique duas vezes se os números são coerentes em um nível superior.
	8 Crie uma tabela dinâmica (objeto gráfico) usando as mesmas dimensões das listas acima (Divisions, Year and CategoryName) e a expressão para vendas usada na Caixa de Estatísticas (Sum(LineSalesAmount).. Também será necessário definir a caixa...
	13 ARQUIVOS QVD (ARQUIVOS DE DADOS QLIKVIEW)
	13.1 Sobre os arquivos QVD
	13.2 Formato de Arquivo QVD
	13.3 Utilização de Arquivos QVD
	13.4 Criação de Arquivos QVD
	13.5 Comando Store
	13.6 Criação Manual de um Arquivo QVD no Script
	Exercício: Criação Manual do QVD
	1 Abra seu documento.
	2 No menu Arquivo, selecione Editar Script.
	3 Localize o comando LOAD da tabela Customers na aba Dimensions.
	4 Após o comando LOAD da tabela Customers, inclua o comando STORE da seguinte forma:
	5 Clique em OK.
	6 Salve seu arquivo.
	7 Recarregue o script.
	8 Abra novamente a caixa de diálogo Editar Script.
	9 Comente o comando SELECT de Customers e o comando STORE que acabamos de incluir.
	10 Adicione um novo comando LOAD de arquivos de tabela usando o Assistente de Arquivos de Tabela. Localize o arquivo customers.qvd na pasta Datasources e abra-o
	11 Observe se o Tipo está indicado corretamente como QVD.
	12 Clique em Terminar.
	13 Remova o comando Directory.
	14 Adicione o rótulo de tabela Customers ao novo comando LOAD. O script deve ter a seguinte aparência:
	15 Clique em OK.
	16 Salve seu arquivo.
	17 Recarregue o script.
	13.7 Funções de Script do Arquivo QVD
	14 TABELAS DE MAPEAMENTO
	14.1 Tabelas de Mapeamento
	14.2 Limpeza da estrutura da tabela
	Exercício com Tabelas de Mapeamento
	1 Retorne ao arquivo com o qual você está trabalhando nesta lição.
	2 Abra o Visualizador de Tabelas.
	3 Abra o Editor de Scripts e crie uma aba depois da aba Main. Nomeie-a como MappingTables
	4 Mude a tabela que se refere ao script para a tabela Shippers, como a seguir.
	5 Inclua a linha a seguir na parte inferior da tabela Orders.
	6 Verifique se o script da tabela Orders se parece com este:
	7 Salve o documento e Recarregue o script.
	8 Examine o Visualizador de Tabelas para ver se agora, de fato, o campo Shipper faz parte da tabela Orders
	Exercício:
	1 Abra a caixa de diálogo Editar Script.
	2 Mapeie a tabela Divisions para a tabela Customers. Remova a tabela Divisions (ou exclua os comentários)da aba Dimensions e crie uma tabela de mapeamento na aba MappingTables.
	15 CARREGAMENTO DE DADOS DE ORÇAMENTO
	15.1 Tabelas Cruzadas
	15.2 Leitura de Tabelas Cruzadas
	Exercício sobre carregamento de dados de orçamento
	1 Abra a caixa de diálogo Editar Script.
	2 Crie uma nova aba após a aba Sales Person e a denomine Budget.
	3 Clique no botão Arquivos de Tabela e abra o arquivo Budget.xls que está na pasta para esta lição.
	4 No Assistente de Arquivo, selecione o Tamanho do Cabeçalho como Linhas e defina o valor como 1.
	5 Clique no botão Próximo e clique em Ativar Passo de Transformação para transformar a tabela.
	6 Clique na aba Preencher.
	7 Clique no botão Preencher….
	8 Clique em Condição da célula. Se a célula estiver vazia, queremos que ela seja preenchida.
	9 Clique em OK.
	10 Clique em OK.
	11 Clique em Avançar.
	12 Clique em Tabela Cruzada… para alterar a tabela cruzada em uma tabela normal.
	13 Clique nos Campos do Qualificador e digite 2 para expandi-los de forma a incluir os campos Office e EmployeeID em roxo. Um campo qualificador em uma tabela cruzada não deve ser alterado durante o carregamento da Tabela cruzada. 2006 não é um ca...
	14 Denomine o Atributo BudgetYear.
	15 Denomine os dados como BudgetAmount.
	16 Clique em OK.
	17 Clique em Terminar. Você deve ter a tabela a seguir no script.
	18 Nomeie esta tabela como BudgetTemp.
	19 Salve e Recarregue o documento.
	20 Abra o Visualizador de Tabelas. Como você pode ver, há uma chave sintética entre as tabelas BudgetTemp e Employees. Queremos remover essa chave sintética. Ajuste o script para obter os dados que você precisa da tabela BudgetTemp. Depois, remo...
	21 Vá para o Editor de Scripts.
	22 Altere a tabela BudgetTemp para o script abaixo substituindo cada nome de campo por um asterisco. Isso fará com que o script seja executado mesmo quando os rótulos dos dados mudarem.
	23 Para consertar a primeira parte do problema da chave sintética, vá para a aba Dados do Arquivo e inclua a seguinte linha à parte superior da tabela Employees.
	24 Salve e Recarregue o script.
	25 Vá para o Editor de Scripts e coloque o cursor logo após os comandos SET na aba Main.
	26 Na aba Budget, crie uma tabela Budget:
	27 Posicione o cursor perto da parte superior, após o comando CONNECT da aba Main.
	28 Salve e Recarregue o script.
	29 Crie uma nova Tabela intitulada Sales Budget, que consiste nos seguintes campos: SalesPerson, BudgetYear, BudgetAmount e BudgetPrognosis.
	30 Mova o cursor do mouse sobre a coluna BudgetPrognosis na tabela. Será exibido um ícone de seta de entrada.
	31 Clique no ícone de entrada em qualquer linha e digite qualquer número.
	32 Clique com o botão direito do mouse na coluna BudgetPrognosis. Observe as opções relacionadas para Restaurar Valor Único, Restaurar Valores Possíveis e Restaurar Todos os Valores.
	16 OTIMIZAÇÃO DO MODELO DE DADOS
	16.1 Condição em um campo em uma tabela
	16.2 Agregando Dados
	16.3 Unindo Tabelas
	16.4 Concatenação
	16.4.1 Concatenação Automática
	16.4.2 Concatenação Forçada
	16.4.3 Evitar a Concatenação
	16.5 Load Anterior em Load Anterior
	Exercício: Condição em um Campo em uma Tabela
	1 Abra a caixa de diálogo Editar Script e vá para a aba Dimensions.
	2 Localize a tabela Categories e coloque o cursor depois do último campo da tabela.
	3 Digite uma vírgula e pressione enter para obter uma nova linha. Digite o seguinte para criar o CategoryType.
	4 Salve o script e Recarregue.
	5 Examine os campos. Agora você pode ver que temos um novo campo denominado CategoryType.
	Exercício: Agregação
	1 Abra o arquivo QlikView com o qual você está trabalhando nesta lição.
	2 Abra o Editor de Scripts e coloque o cursor depois da tabela OrderDetails na aba Orders.
	3 Inclua o seguinte comando no script:
	Exercício: Unindo Tabelas
	1 Vá para o Script novamente e coloque o cursor imediatamente antes de LOAD na tabela recém-criada.
	2 Digite LEFT JOIN (Orders) antes do comando LOAD. O resultado deve ser semelhante ao seguinte.
	3 Salve e Recarregue o script.
	Exercício: Concatenação
	1 Abra a caixa de diálogo Editar Script no arquivo QlikView com o qual você está trabalhando nesta lição.
	2 Posicione cursor sobre a aba Dados do Arquivo logo depois que a tabela Employees tiver sido carregada. Precisamos duplicar os campos atuais em Employees, então, nesse caso, não usaremos o Assistente de Arquivo. Copie o comando LOAD de Employee e ...
	3 Revise a cláusula From no novo comando load para que ela tenha as seguinte aparência:
	4 Clique em OK e salve o documento QlikView.
	5 Execute o script.
	6 Inclua o prefixo concatenate ao novo comando Employee LOAD e especifique a tabela Employees.
	7 Faça as alterações acima e comente o segundo comando LOAD da tabela Employee. O script deverá ter a seguinte aparência:
	8 Salve o script revisado e o documento QlikView. Em seguida, recarregue e verifique se os dados de Employee não mudaram.
	Exercício: Load Anterior em Load Anterior
	1 No arquivo QlikView com o qual você está trabalhando nesta lição, vá para o Editor de Scripts e coloque o cursor na parte inferior da aba MappingTables.
	2 Crie a tabela a seguir, digitando-a a partir do início ou usando o botão Selecionar.
	3 Vá para a aba Orders e inclua a linha de script a seguir na parte inferior da tabela OrderDetails, logo acima da linha SQL SELECT *. Lembre-se de remover o ponto-e-vírgula da linha acima e substituí-lo por uma vírgula.
	4 Coloque o cursor depois do rótulo OrderDetails.
	5 Crie um load anterior incluindo o script a seguir.
	6 Salve e recarregue o script.
	Exercício:
	1 Para limpar um pouco mais o script, Una as tabelas Categories e Products. Certifique-se de não obter Categories que não existem na tabela Products.
	2 Crie uma tabela dinâmica com CategoryType e CategoryName como dimensões.
	3 Crie as quatro expressões a seguir:
	4 Formate a tabela da maneira desejada.
	17 CÁLCULOS AVANÇADOS EM OBJETOS DE PASTA
	17.1 Limites de Dimensão
	17.1.1 Totais de Expressão Comparados com os Totais de Dimensão
	Exercício de Limites de Dimensão
	1 Crie uma nova pasta com o nome de Limites de Dimensão
	2 Clique com o botão direito do mouse na pasta Limites de Dimensão.
	3 Clique em Novo Objeto de Pasta. Depois, clique em Gráfico.
	4 Selecione Tabela Simples.
	5 Clique em Avançar. É exibida a caixa de diálogo Dimensões.
	6 Em Grupos/Campos Disponíveis, selecione SalesPerson e CategoryName.
	7 Renomeie a dimensão CategoryName como Product Family.
	8 Clique em Incluir.
	9 Clique em Avançar. É exibida a caixa de diálogo Expressão.
	10 Crie uma expressão que calcule a soma de vendas: Na caixa de diálogo Expressão, digite Sum(LineSalesAmount)
	11 Clique em OK.
	12 Clone o gráfico: Pressionando CTRL, clique na barra de título da tabela e arraste-a para uma nova posição na pasta. Coloque as duas tabelas uma ao lado da outra.
	13 Clique com o botão direito do mouse em um dos gráficos que você acabou de criar.
	14 Clique na aba Limites de Dimensão.
	15 Clique em Restringir valores exibidos usando a primeira expressão.
	16 Selecione Mostrar somente e Primeiro e digite 3;
	17 Clique em OK e veja como essa configuração afeta os gráficos.
	18 Volte para a etapa 13 e explore as configurações de limites Maior e Menor.
	17.2 Análise de conjunto.
	17.2.1 Identificadores de conjunto
	17.2.2 Operadores de conjunto
	1 Unário menos (complemento)
	2 Interseção e Diferença simétrica
	3 União e Exclusão.
	17.2.3 Modificadores de conjunto
	17.2.4 Exemplo de análise de conjuntos
	17.3 Expansão de sinal de cifrão.
	17.3.1 Expansão de Cifrão Usando uma Variável
	17.3.2 Expansão do Cifrão com Parâmetros
	17.3.3 Expansão do Cifrão com uma Expressão
	Exercício de Análise de Conjunto
	1 Navegue para o diretório C:\`likViewTraining\Developer\Lesson17 e abra o arquivo Set_Analysis.qvw.
	2 Salve uma cópia do arquivo para preservar o original caso, posteriormente, seja preciso começar novamente desde o início.
	3 Confira se há mesmo uma lista na pasta para o campo Year. Se não houver, inclua uma.
	4 Clique com o botão direito do mouseem uma área em branco da pasta e clique em Novo Objeto de Pasta | Gráfico do menu de contexto.
	5 Clique no ícone Tabela Simples (no canto inferior direito dos Tipos de Gráfico) e digite Annual Comparison no Título da Janela. Clique em Próximo.
	6 Inclua Customer às Dimensões Usadas e clique em Próximo.
	7 Crie as três Expressões abaixo usando os Rótulos:
	8 Clique em Terminar
	9 Salve seu arquivo QlikView e continue editando a tabela simples Annual Comparison.
	10 Defina a Ordem de Classificação para corresponder à descrição a seguir, lembrando que Customer deve ser definido como Texto.
	11 Na aba Efeitos Visuais , torne os valores negativos da comparação anual vermelhos e os valores positivos verdes.
	12 Retorne à aba Geral e inclua uma Condição de Cálculo para garantir que o usuário selecione um ano (Year) para começar a comparação digitando o seguinte na caixa Condição de Cálculo
	13 Clique no botão Mensagens de Erro, na aba Geral e, em seguida, em Condição de Cálculo Não Satisfeita na lista Mensagens Padrão.
	14 Tipo: Selecione um ano para ser comparado com o ano anterior na caixa Mensagem Personalizada e clique em OK.
	15 Clique em OK novamente para fechar a caixa de diálogo de propriedades do gráfico.
	16 Com 2009 selecionado na lista Ano que você incluiu no início do Exercício, sua tabela simples deve ter uma aparência semelhante à seguinte:
	17 Salve seu trabalho.
	Exercício de Análise de Conjunto Avançada
	1 Continue trabalhando com o arquivo que você está usando neste exercício.
	2 Crie um gráfico que compare as vendas de produtos da categoria Babywear com produtos da categoria Children's Wear ao longo do tempo para o escritório de vendas de Nice.
	3 Para isso, será necessário criar uma expressão usando a Análise de conjunto e a Expansão de $ em vez dos comandos if() tradicionais.
	4 Defina o nome da categoria para localizar Babywear e que o escritório seja 4.
	5 Atenção aos sinais <> e {}.
	17.4 Análises Comparativas usando Estados Alternativos
	17.4.1 Identificadores de Estado
	17.4.2 Comportamento lógico ao usar Estados Alternativos
	17.4.3 Recursos em Estados Alternativos
	Exercício 1: Estados Alternativos:
	1 Navegue para o diretório C:\QlikViewTraining\Developer\Lesson17 e abra o arquivo AltState_Exercise1.qvw
	2 Copie a pasta Exercise 1 e renomeie-a para Exercise 1 StateA.
	3 Rebaixe a pasta até a segunda pasta.
	4 Clique com o botão direito do mouse na pasta e selecione Propriedades. É exibida a caixa de diálogo Propriedades da Pasta. Observe que você não tem a opção de selecionar um estado se não criar primeiro um estado nas propriedades do document...
	5 Clique em OK.
	6 No menu Configurações, clique em Propriedades do Documento.
	7 Clique no botão Estados Alternativos. É exibida a caixa de diálogo Estados Alternativos.
	8 Clique no botão Incluir.
	9 Digite StateA na caixa de diálogo Nome do Novo Estado.
	10 Clique em OK. A caixa de diálogo Nome do Novo Estado é fechada.
	11 Clique em OK. A caixa de diálogo Estados Alternativos é fechada.
	12 Clique em OK. A caixa de diálogo Propriedades do Documento é fechada.
	13 Clique com o botão direito do mouse na pasta Exercise 1 StateA, e selecione Propriedades. Observe que agora você tem a opção de selecionar um Estado Alternativo.
	14 Selecione StateA como seu Estado Alternativo.
	15 Clique em OK.
	16 Vá para a pasta Exercise 1 e selecione Year 2008.
	17 Navegue para a pasta Exercise 1 StateA. Observe que a seleção feita na outra pasta não afeta esta.
	Exercício 2: Estados Alternativos:
	1 Clique na pasta Exercise 2.
	2 Clone o Gráfico Padrão Hot Stock. Faça várias seleções para conferir o que você acabou de fazer.
	3 Clique com o botão direito do mouse na pasta e selecione Propriedades.
	4 Abra a lista suspensa Estados Alternativos e clique em Novo Estado. Como você criou um estado no exercício 1 através das propriedades do documento, agora é possível criar outros estados na aba Geral nas propriedades do objeto.
	5 Digite RegionA na caixa de diálogo Nome do Novo Estado.
	6 Clique em OK. A caixa de diálogo Nome do Novo Estado é fechada.
	7 Clique em OK. A caixa de diálogo Propriedades do Gráfico é fechada.
	8 Com o botão direito, clique na lista Region e selecione Copiar Objeto.
	9 Clique com o botão direito do mouse na Pasta e selecione Colar Objeto de Pasta. Não selecione a opção Colar objeto de pasta como vínculo.
	10 Mova a cópia da lista Region para a direita do Gráfico Hot Stock [RegionA].
	11 Clique com o botão direito do mouse na cópia da lista Region e selecione Propriedades.
	12 No Estado Alternativo, selecione RegionA.
	13 Clique em OK.
	14 Faça uma cópia da caixa Seleções Atuais Padrão e atribua a ela o Estado Alternativo RegionA.
	15 Teste o que você fez fazendo seleções.
	17.5 Função AGGR
	Exemplos:
	Exercício com a função AGGR
	1 Navegue para o diretório C:\QlikViewTraining\Developer\Lesson17 e abra o arquivo AltState_Exercise1.qvw.
	2 Neste exemplo, vamos descobrir a contagem média do campo Orders pelos campos Country, Company, Year e Month usando a função AGGR().
	3 A média de LineSalesAmount por Country, Company, Year e Quarter com a expressão a seguir:
	4 E, por fim, o Total de Vendas
	5 Crie o gráfico mostrado a seguir usando as expressões acima.
	18 DESAFIOS DE SCRIPTS E DA MODELAGEM DE DADOS
	18.1 Tabelas Vinculadas e Tabelas Concatenadas
	18.1.1 Concatenação
	18.2 Calculando a variação líquida em um campo
	18.3 Funções InDate, Data e DateIslands
	18.4 Class()
	18.5 Agregação Dinâmica
	18.6 Correspondência de Intervalo
	Exercício de tabelas de vínculos
	1 Abra o arquivo LinkTable.qvw na pasta LinkTables.
	2 Abra o arquivo Excel LinkTable.xls e examine os campos Sales e Budget. Você verá que quatro clientes têm um Budget e quatro clientes compram mercadorias a cada mês, mas esses não são os mesmos clientes que têm um Budget.
	3 Agora, recarregue sua cópia do arquivo LinkTable.qvw. Todas as informações parecem corretas.
	4 Vá para o Visualizador de Tabelas e examine a estrutura do Modelo de Dados. Foram criadas uma Chave Sintética e uma Tabela Sintética. Isso pode aumentar a sobrecarga de processamento do aplicativo e, em alguns casos raros, retornar resultados in...
	5 Desfaça o comentário na aba SynKey.
	6 Desfaça o comentário no script na aba Usando uma Chave e recarregue o aplicativo. Observe que estamos tentando eliminar a Chave Sintética concatenando os campos que estão causando a Tabela sintética.
	7 Verifique o resultado no QVW e o compare com a planilha do Excel. Você pode ver que são retornadas informações incorretas devido à não correspondência do campo-chave. Existem clientes ausentes em cada tabela.
	8 Comente o script na aba Usando uma Chave
	9 Desfaça os comentários do script na aba Tabela Vinculada e recarregue o documento.
	10 Crie uma Tabela que inclua todas as colunas.
	11 Comente o script do passo 3 (na aba Tabela Vinculada)
	12 Desfaça o comentário na aba Concatenar.
	13 Recarregue o documento. Observe a utilização de um campo RecSource para diferenciar registros concatenados. Note também o uso de referências explícitas a CONCATENATE e à tabela na qual a concatenação ocorrerá. Por fim, observe o LEFT JOIN...
	14 Examine o resultado. Você verá os mesmos resultados que no Passo 1 e no Passo 3.
	Exercício: Join
	1 Abra o arquivo LeftJoin.QVW localizado na pasta LeftJoin.
	2 Salve uma cópia de trabalho e execute o script na aba Previous.
	3 Crie duas Listas e use os campos Units e Dept.
	4 Selecione a Unit numerada como 54543.
	5 Crie uma Tabela usando todos os campos e examine as contagens. Ainda não temos uma contagem completa das unidades no Dept A2. É necessário recarregar a tabela novamente.
	6 Comente as informações na aba Previous.
	7 Desfaça os comentários do script na aba Left Join e recarregue o documento. Com essa abordagem, agora você pode descobrir o número total de vezes que uma Unit é utilizada em todos os Depts em qualquer Week. Isso foi feito com um comando RESIDE...
	Exercício com DateIsland
	1 Abra o arquivo DateIsland.qvw na pasta Date_Island.
	2 Salve uma cópiade trabalho do arquivo e inclua o código a seguir na aba Calendar abaixo da linha MasterCalendar: no script.
	3 Recarregue o script.
	4 Crie uma Lista e uma Tabela Dinâmica.
	5 Na Tabela Dinâmica, use Country e qualquer CategoryType.
	6 Para a Lista mostrar DateMonthYear.
	7 Use duas das três expressões a seguir (dica: uma delas viola uma prática recomendada):
	8 Selecione uma única DateMonthYear. O resultado deve ter a seguinte aparência:
	9 Por fim, é necessário definir uma propriedade da Lista para sempre ter apenas um valor selecionado. Isso não é possível, a menos que você tenha selecionado um único valor no passo acima.
	10 Agora, selecione diversos valores de DateMonthYear e você verá Sales mudar em uma coluna, mas não na outra.
	Exercício de Class ()
	1 Abra o arquivo Class.QVW na pasta Class e salve uma cópia de trabalho do arquivo.
	2 Crie variáveis chamadas vDate (defina vDate para uma data atual e formate vDate como uma data e não um número) e vWidth (usar um prefixo v ou var para indicar variáveis é uma prática recomendada) na aba Variáveis no menu Configuração | Pro...
	3 Crie um Objeto Calendário, clique no botão de opção das Variáveis e escolha vDate como a variável atribuída ao Objeto Calendário.
	4 Crie uma Caixa de Entrada e escolha vWidth como a única Variável Mostrada.
	5 Em seguida, crie uma Tabela Dinâmica com a dimensão CompanyName e a expressão sum(LineSalesAmount)
	6 Por fim, criaremos uma dimensão calculada na Tabela Dinâmica.
	Exercício de Agregação Dinâmica
	1 Abra o arquivo DynamicAggregation.qvw que está em Lesson18/DynamicAggregation.
	1 Salve uma cópia de trabalho e recarregue o arquivo.
	1 Crie um gráfico de tabela dinâmica com as seguinte aparência
	2 Quando tiver terminado o gráfico, edite o script criando a seguinte tabela INLINE e recarregue. Isso também poderia ser feito criando e carregando um arquivo externo do Excel ou de texto, o que seria uma prática recomendada.
	3 Em seguida, crie uma variável vMyAgg com o valor =Formula, como mostrado a seguir. Lembre-se do sinal de igual:
	4 Crie uma cópia do primeiro Gráfico e substitua a expressão sum(LineSalesAmount) por
	5 Inclua duas Listas com as colunas Desc e Formula, além de uma Caixa de Texto com =vMyAgg na área do texto. Como resultado, você poderá alterar seus KPIs dinamicamente. O resultado deverá ter a seguinte aparência:
	Exercício: Correspondência de Intervalo
	1 Abra o arquivo IntervalMatch.QVW, salve uma cópia de trabalho.
	2 Crie uma tabela mostrando a soma de horas que uma pessoa trabalha e uma tabela com a contagem de horas trabalhadas por cada Funcionário (Emp).
	3 Examine o resultado no Visualizador de Tabelas. Você verá que esse script criou uma tabela $Syn. Como vimos anteriormente, o custo de uma tabela $Syn pode ser alto.
	4 Desfaça o comentário do comando antes de IntervalMatch() e recarregue o documento.
	19 OTIMIZAÇÃO DE DESEMPENHO
	19.1 Ajuste de Desempenho
	19.1.1 O que determina o tamanho de um documento QlikView?
	Número de linhas
	Número de Colunas
	Número de Colunas/Valores Distintos
	Estrutura de Dados
	Número de pastas/objetos de pasta
	19.1.2 Design do documento
	19.1.3 Impactos de Segurança - Fazendo as Escolhas Corretas.
	Segurança do Publisher
	Seção de Acesso
	19.2 Práticas Recomendadas para a Otimização do Arquivo QlikView
	19.2.1 Dimensões e Expressões Complexas
	19.2.2 Expressões que Exigem Muitos Recursos
	Count ( Distinct 'FieldName')
	If ( Condition(Text),…..)
	Sum ( If (Condition, 'FieldName'…))
	If ( Condition, Sum('FieldName')..)
	If ( Condition1, Sum('FieldName'), If (Condition2, Sum('FieldName')
	Classificar o texto
	Títulos dinâmicos e objetos de texto
	19.2.3 Incluir Colunas que Podem Ser Agregadas no Seu Script
	19.3 Criar Cargas Incrementais
	Exercício
	1 Abra o arquivo BaseLineDataExtraction.qvw que está na pasta da Lição 19.
	2 Recarregue o arquivo e salve-o como BaseLineDataModel.qvw na pasta QVDs. Observe que agora você tem um QVW que contém seu Modelo de Dados, mas com dados apenas até 2006 para Orders, OrderDetails e Shipments. Note também que nenhum Master Calend...
	Carga Binária
	1 Feche todos os QVWs abertos.
	2 Crie um novo QVW e salve-o como CreateQVDfromBinary.QVW na pasta QVDs.
	3 Edite o script ou clique no botão Arquivo QlikView, no Editor de Scripts, para incluir a carga BINARY do arquivo BaseLineDataModel.QVW que você acabou de salvar na mesma pasta.
	4 Inclua o código a seguir na parte inferior do script.
	5 Recarregue e salve o arquivo, e examine a pasta Datasources\QVDs.
	6 Feche todos os QVWs abertos.
	7 Crie um novo QVW e salve-o como MyIncrementalQVDApplication.QVW na pasta QVDs.
	8 Abra o Editor de Scripts. Na aba Principal, crie uma conexão com a base de dados QWT.MDB.
	9 Em seguida, edite o script para carregar todos os arquivos QVD gerados anteriormente, exceto Orders e Shipments.
	10 Crie uma nova aba do script chamada Load QVDs e carregue os QVDs clicando no botão Arquivos de Tabela, navegando até a pasta Datasources\QVDs e escolhendo o primeiro arquivo QVD.
	11 Repita o processo até que todos os arquivos QVD, exceto Orders e Shipments tenham sido incluídos no script. Não esqueça de formatar o script de acordo com as práticas recomendadas e lembre-se de nomear cada tabela explicitamente.
	12 Salve seu trabalho com frequência.
	13 Crie uma nova aba do script chamada New Orders e inclua o código a seguir no script:
	14 Crie outra nova aba chamada New Order Details e inclua o código a seguir no script:
	15 Crie outra nova aba chamada New Shipments e inclua o código a seguir no script:
	16 Inclua outra nova aba chamada Load Baseline QVDs (QVDs de linha de base) e carregue as informações do arquivo Orders. QVD que criamos clicando no botão Arquivos de Tabela e escolhendo o arquivo Orders. QVD. Inclua a palavra-chave CONCATENATE no...
	17 Faça o mesmo para OrderDetails e Shipments Elas podem ser colocadas na aba Load Baseline QVDs juntamente com Orders.
	18 Inclua o código a seguir depois de Shipments na aba Load Baseline QVDs. Este código calcula um OrderSalesAmount e faz sua junção na tabela Orders.
	19 Por fim, crie uma aba Calendar (observe que Calendar vem depois da nossa aba QVD) e inclua o código a seguir no script:
	20 Recarregue o documento e crie uma Lista Year. Todas as informações estão no documento, com informações de Order, OrderDetails e Shipment anteriores a 2007, vindas do nosso QVDs de linha de base e todos os novos dados a partir daí, vindos de ...
	Observações
	20 SEGURANÇA DO QLIKVIEW
	20.1 Controle de acesso
	20.2 Níveis de acesso
	20.3 Base de dados de controle de acesso
	20.4 Restrições de acesso herdadas
	20.5 Script oculto
	20.6 Incluindo a Seção de Acesso
	Exercício Configuração da Segurança de Acesso em um arquivo QlikView
	1 Abra o arquivo Security.qvw que está na pasta da Lição 20.
	2 Abra o Editor de Scripts.
	3 No menu Arquivo, selecione Criar Script Oculto...
	4 Digite a senha hidden e confirme a senha.
	5 No menu Inserir, clique em Seção de Acesso. Depois, clique em Inline.
	6 Selecione Tabela de Acesso Básico do Usuário de forma que ACCESS, USERID e PASSWORD estejam marcados.
	7 Clique em OK e inclua as linhas a seguir na tabela.
	8 Clique em OK. O assistente deve ter criado o comando de script a seguir.
	9 Denomine essa tabela como Access01.
	10 Salve e recarregue o script.
	Exercício
	1 Saia do QlikView e abra seu documento recém-nomeado novamente. Agora, você verá a seguinte caixa de diálogo, na qual é possível inserir o UserID e a Password.
	20.7 Controle de acesso para determinados comandos
	Exercício
	1 Verifique se você efetuou login no documento QlikView como Admin. É necessário ter direitos de administrador para a operação a seguir.
	2 No menu Configurações, clique em Propriedades do Documento.
	3 Vá para a aba Segurança e selecione o quê os Usuários estão autorizados ou não a fazer. Certifique-se de que um Usuário não possa recarregar o script ou salvar o documento.
	4 Marque a caixa de verificação Admin Sobrepõe Regras de Segurança, de modo que o ADMIN sempre tenha permissõespara fazer qualquer coisa.
	5 Clique em OK e salve o documento.
	6 Feche o documento, abra-o novamente e efetue logon como User. Note que você não poderá salvar o documento, nem recarregar o script.
	20.8 Mais controle de acesso
	Exercício
	1 Adicione outro campo chamado COMPUTER à tabela INLINE Access01 existente. Inclua um ou dois identificadores para os computadores do curso (eles atuarão como campos conectados) como mostrado a seguir.
	2 Abra o Bloco de Notas ou um editor de texto semelhante
	3 Crie uma tabela com duas colunas, com os campos COMPUTER e SERIAL. Inclua seu próprio número de série como valor do campo. Você encontrará esse número no menu Sobre o QlikView, no QlikView. Um exemplo é mostrado a seguir.
	4 Salve esse arquivo como Access02.txt.
	5 Abra o script de carga e clique no botão Arquivos de Tabela. Carregue a tabela recém-criada Access02.txt depois da tabela inline e antes do comando SECTION APPLICATION como mostrado a seguir.
	6 Salve e recarregue o documento.
	7 Feche o documento e abra-o novamente como User.
	20.9 Considerações sobre Recarga da Linha de Comando sem Supervisão
	20.10 Restrições de acesso em valores de campo selecionados
	20.11 Limitação de valores de campo na Seção de Acesso
	Exercício
	1 Abra o script de carga e Arquivo - Editar Script Oculto (você deve ter privilégios Admin para editar o script oculto). Verifique se o cursor está posicionado sobre a aba Script Oculto.
	2 Agora, comente as tabelas INLINE carregadas anteriormente de forma que elas não afetem nossas novas tabelas SECTION ACCESS.
	3 O primeiro arquivo de texto a ser carregado é SalesSecurity.txt, localizado no diretório Datasources. Rotule essa tabela lógica como Access01.
	4 Em seguida, inclua o comando SECTION APPLICATION.
	5 Crio um comando load para o arquivo SalesInitials.txt, localizado no diretório Datasources. É uma prática recomendada usar a função Upper no campo de conexão (SP), pois o valor deve estar em letras maiúsculas para corresponder ao valor de SE...
	6 Salve e recarregue o documento.
	7 Vá para o menu Configuração e para Propriedades do Documento.
	8 Selecione a aba Abertura e marque Redução Inicial de Dados Baseada na Seção de Acesso. Desmarque Exclusão Total. Além disso, marque Carga Binária Proibida.
	9 Continue na aba Segurança e confirme se o Usuário não pode editar ou recarregar o script. Também não deve ser permitido salvar (desmarque as caixas de verificação Editar Script, Recarregar, Recarga Parcial, Salvar Documento e Permitir que o ...
	10 Salve novamente e saia do documento.
	11 Abra o documento novamente e efetue logon com o UserID Luis. Você pode exibir os dados desse usuário, além dos Vendedores Tomás Lima e Francisco Russo.
	12 Feche o documento e abra-o novamente, dessa vez usando Jaime. Agora você poderá ver todos os dados novamente.
	20.12 Dê a sua opinião sobre como nos saímos...

Mais conteúdos dessa disciplina