Trabalhando com o QlikView



Baixar 11.43 Mb.
Pdf preview
Página20/117
Encontro09.04.2020
Tamanho11.43 Mb.
1   ...   16   17   18   19   20   21   22   23   ...   117

Exemplo:

Os dados são carregados a partir de três tabelas que incluem o seguinte:

l

Nomes de algumas seleções de futebol nacionais



l

Clubes de futebol de algumas cidades

l

Cidades de alguns países europeus



Trabalhando com o QlikView - QlikView 12, November 2017

215


8   Introdução ao carregamento de dados

Visualização das tabelas de dados de fonte

Essa estrutura de dados não é muito boa, pois o nome do campo



Team é usado com duas finalidades

diferentes: equipes nacionais e locais. Os dados nas tabelas cria uma situação lógica impossível.

Ao carregar as tabelas no QlikView, o QlikView determina quais conexões de dados são menos importantes

e desconecta essa tabela.

Abra o

Visualizador de tabelas para ver como o QlikView interpreta a relevância das conexões de dados:

A tabela com cidades e os países a que pertencem agora está parcialmente conectada à tabela com

seleções nacionais de países diferentes e à tabela com clubes locais de cidades diferentes.

Resolvendo referências circulares

Quando ocorrem referências circulares, você precisa editar o script de carregamento atribuindo um nome

exclusivo a um dos campos com nomes idênticos.

Faça o seguinte:

1. Abra o editor de script.

2. Edite o comando LOAD de um dos nomes de campo duplicados.

Trabalhando com o QlikView - QlikView 12, November 2017

216


8   Introdução ao carregamento de dados

Nesse exemplo, o comando



LOAD da tabela que armazena as equipes locais e suas cidades incluiria

um nome para



Team — por exemplo LocalClub. O comando LOAD atualizado é lido:

LOAD City, Team as LocalClub

3. Recarregue o script.

Agora você tem uma lógica que funciona em todas as tabelas. Nesse exemplo, quando



Italy é selecionado, a

seleção de futebol, as cidades alemãs e os clubes locais de cada cidade são associados:

Ao abir o

Visualizador de Tabela, você percebe que as conexões parcialmente desconectadas são

substituídas por conexões regulares:

Tabelas parcialmente desconectadas

Quando os dados que incluem referências circulares são carregados no QlikView, as tabelas parcialmente

desconectadas são criadas automaticamente. Isso impede que as referências circulares criem um loop na

lógica interna. As tabelas parcialmente desconectadas precisam ser tratadas para que se possam visualizar

dados da maneira esperada e compreensível.

Criando Tabelas Parcialmente Desconectadas Intencionalmente

Em algumas situações especiais, convém desconectar alguns dados da lógica normal do QlikView. É

possível usar tabelas parcialmente desconectadas para restringir seleções em um campo a serem

propagadas para os outros campos na tabela.

Para definir uma tabela parcialmente desconectada, abra a caixa de diálogo



Propriedades do Documento

e selecione a aba



Tabelas.

Trabalhando com o QlikView - QlikView 12, November 2017

217


8   Introdução ao carregamento de dados

Este capítulo inclui alguns exemplos de como as tabelas parcialmente desconectadas alteram a lógica do

QlikView.

Cada uma das três caixas de tabela a seguir representa uma tabela lida no QlikView:

Se o valor 2 for selecionado no campo B, acontecerá o seguinte:

A seleção passa por todas as tabelas e exclui valores não associados.

Agora vamos manter essa seleção, mas tornar a Table2 parcialmente desconectada. Isso significa que a

lógica será interrompida entre os campos A e C na Table2. O resultado será semelhante a este:

Note que a Table2 mostrada aqui é uma caixa de tabela e não a tabela em si. A caixa de tabela mostrará

todas as combinações possíveis entre os campos de suas colunas. Como não existe lógica entre os campos

A e C, todas as combinações de seus respectivos valores possíveis serão mostradas.

Exemplo:

As três tabelas abaixo são encontradas em uma estrutura bastante típica: uma tabela de transações e duas

tabelas de dimensões, associadas através de um campo cada.

É possível visualizar as vendas por ano e o grupo de produtos usando uma tabela dinâmica. Próximo à

tabela dinâmica, duas caixas de listagem mostram os campos de dimensão:

Trabalhando com o QlikView - QlikView 12, November 2017

218


8   Introdução ao carregamento de dados

Embora essa seja uma tabela dinâmica correta, os efeitos da lógica do QlikView agora poderiam levar a

resultados indesejados. Se o ano 2012 for selecionado, você terá o seguinte resultado:

O grupo de produtos Z não está mais visível na tabela dinâmica. Isso é natural, pois o valor Z no campo

ProdGrp foi excluído pela seleção do valor 2012 no campo Year. No entanto, ao analisar as vendas do ano

de 2012, você provavelmente gostaria de ver Z no gráfico com um 0 na coluna sum(Amount), de forma que

fique claro para todos que o grupo de produtos Z existe e que nada foi vendido em 2012.

De alguma forma, os dois campos Year e ProdGrp na realidade não têm relação alguma entre si e, portanto,

não deveriam interagir simplesmente devido ao fato de estarem associados pela tabela Trans. Isso pode ser

tratado declarando a tabela Trans como parcialmente desconectada, o que altera o layout da tabela

dinâmica:

Note que a seleção na lista Year não interpreta mais nenhum valor da lista ProdGrp.



Verifique se Suprimir Valores Iguais a Zero não está selecionado para dimensões na guia

Apresentação da caixa de diálogo Propriedades de Gráfico.

8.6


Renomeando campos

Algumas vezes, é necessário renomear campos para obter as associações desejadas. Os três principais

motivos para renomear campos são:

1. Dois campos são nomeados de maneira diferente, ainda que denotem a mesma coisa:

l

O campo


ID na tabela Customers

l

O campo



CustomerID na tabela Orders

Os dois campos denotam um código de identificação do cliente e devem ter o mesmo nome, como



CustomerID.

2. Dois campos são nomeados da mesma forma, mas denotam efetivamente coisas diferentes:

Trabalhando com o QlikView - QlikView 12, November 2017

219


8   Introdução ao carregamento de dados

l

O campo



Date na tabela Invoices

l

O campo



Date na tabela Orders

Os dois campos devem ser preferencialmente renomeados para, por exemplo,



InvoiceDate e

OrderDate.

3. Talvez haja erros, como erros ortográficos, na base de dados ou convenções diferentes com base em

letras maiúsculas e minúsculas.

Como os campos podem ser renomeados no script, não há necessidade de alterar os dados originais.

Existem duas formas diferentes de renomear campos, como demonstrado nos exemplos.

Exemplo 1: Usando o comando alias

O comando



LOAD ou SELECT pode ser precedido de um comando alias.

Alias ID as CustomerID;

LOAD * from Customer.csv;

Exemplo 2: Usando o especificador as

O comando



LOAD ou SELECT pode conter o especificador as.

LOAD ID as CustomerID, Name, Address, Zip, City, State from Customer.csv;

8.7

Concatenando tabelas



Concatenação automática

Se os nomes de campo e o número de campos de duas ou mais tabelas carregadas forem exatamente os

mesmos, o QlikView concatenará automaticamente o conteúdo dos comandos diferentes em uma tabela.

Exemplo:

LOAD a, b, c from table1.csv;

LOAD a, c, b from table2.csv;

A tabela interna 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.

A quantidade e os nomes dos campos devem ser exatamente os mesmos. A ordem dos dois

comandos é arbitrária.

Concatenação forçada

Mesmo se duas ou mais tabelas não tenham exatamente o mesmo conjunto de campos, 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 a outra tabela nomeada ou à última tabela lógica criada anteriormente.

Trabalhando com o QlikView - QlikView 12, November 2017

220


8   Introdução ao carregamento de dados

Exemplo:

LOAD a, b, c from table1.csv;

concatenate LOAD a, c from table2,csv;

A tabela interna resultante tem os campos a, b e c. O número de registros na tabela resultante é a soma do

número de registros na tabela 1 e na tabela 2. O valor do campo b nos registros vindos da tabela 2 é NULL.

A quantidade e os nomes dos campos devem ser exatamente os mesmos. A menos que o

nome de uma tabela carregada anteriormente seja especificado no comando concatenate o

prefixo concatenate utilizará a última tabela criada anteriormente. Dessa forma, a ordem dos

dois comandos não é arbitrária.

Evitando a concatenação

Se os nomes de campo e o número de campos de duas ou mais tabelas carregadas forem exatamente os

mesmos, o QlikView concatenará automaticamente o conteúdo dos comandos diferentes em uma tabela.

Isso pode ser evitado com um comando

noconcatenate. Assim, a tabela carregada com o comando LOAD

ou

SELECT associado não será concatenada com a tabela existente.



Exemplo:

LOAD a, b, c from table1.csv;

noconcatenate LOAD a, b, c from table2.csv;

8.8


Carregando dados de uma tabela carregada

anteriormente

Você pode usar o predicado

Resident em um comando LOAD para carregar dados de uma tabela

anteriormente carregada. Isso será útil quando você quiser fazer cálculos nos dados carregados com um

comando

SELECT que não oferece a opção de utilizar as funções do QlikView, como manipulação do valor

de data ou numérico.



Exemplo:

Nesse exemplo, a interpretação dos dados é realizada no carregamento



Resident, uma vez que não pode

ser feito no



Crosstable LOAD inicial.

PreBudget:

Crosstable (Month, Amount, 1)

LOAD Account,

Jan,

Feb,


Mar,

From Budget;



Trabalhando com o QlikView - QlikView 12, November 2017

221


8   Introdução ao carregamento de dados

Budget:


Noconcatenate

LOAD


Account,

Month(Date#(Month,’MMM’)) as Month,

Amount

Resident PreBudget;



Drop Table PreBudget;

Um caso comum para o uso de Resident é quando você deseja usar uma tabela temporária

para cálculos ou filtragem. Depois de atingir o objetivo da tabela temporária, ela deve ser

descartada usando a declaração Drop table.

Resident ou LOAD precedente?

Na maioria dos casos, o mesmo resultado pode ser obtido usando o

LOAD precedente, isto é, um comando

LOAD que carrega a partir do comando LOAD ou SELECT abaixo, sem especificar um qualificador de

fonte como



From ou Resident, como você faria normalmente. Um LOAD precedente é geralmente a opção

mais rápida, mas há alguns casos em que você precisa usar o



Resident LOAD:

l

Se você quiser usar a cláusula



Order_by para classificar os registros antes de processar a declaração

LOAD.

l

Se você quiser usar qualquer um dos seguintes prefixos, casos em que o



LOAD precedente não é

suportado:

l

Crosstable

l

Join

l

Intervalmatch

LOAD precedente

O recurso

LOAD precedente permite carregar uma tabela em um único passo, mas ainda define várias

transformações sucessivas. Basicamente, é um comando



LOAD que carrega do comando LOAD ou

SELECT abaixo, sem especificar um qualificador de fonte como From ou Resident como faria

normalmente. Você pode empilhar qualquer número de comandos



LOAD dessa forma. A declaração no

final será avaliada primeiro, seguida da declaração acima e assim por diante até que a declaração superior

seja avaliada.

Você pode conseguir o mesmo resultado usando



Resident, mas na maioria dos casos, um LOAD

precedente será mais rápido.

Outra vantagem do load precedente é que você pode manter um cálculo em um lugar e reutilizá-lo em

comandos


LOAD colocados acima.

Trabalhando com o QlikView - QlikView 12, November 2017

222


8   Introdução ao carregamento de dados

Os seguintes prefixos não podem ser usados em combinação com o LOAD precedente: Join,

Crosstable Intervalmatch.

Exemplo 1: Transformando os dados carregados por uma cálculo SELECT

Se você carregar dados de um banco de dados usando um comando



SELECT, não será possível usar as

funções do QlikView para interpretar os dados no comando



SELECT. A solução é adicionar um comando

LOAD, no qual você executará a transformação de dados, acima da declaração SELECT.

Neste exemplo, interpretamos uma data armazenada como um caractere usando a função do QlikView



Date# em um comando LOAD, usando o comando SELECT precedente como fonte.

LOAD Date#(OrderDate,’YYYYMMDD’) as OrderDate;

SQL SELECT OrderDate FROM … ;

Exemplo 2: Simplificando o seu script reutilizando cálculos

Neste exemplo, usamos um cálculo mais de uma vez no script:

LOAD

...,


Age( FromDate + IterNo() – 1, BirthDate ) as Age,

Date( FromDate + IterNo() – 1 ) as ReferenceDate

Resident Policies

While IterNo() <= ToDate - FromDate + 1 ;

Ao introduzir o cálculo em uma primeira passagem, podemos reutilizá-lo na função Age em um

LOAD

precedente:

LOAD ..., ReferenceDate,

Age( ReferenceDate, BirthDate ) as Age;

LOAD *,

Date( FromDate + IterNo() – 1 ) as ReferenceDate



Resident Policies

While IterNo() <= ToDate - FromDate + 1 ;

8.9

Recarga Parcial



Este comando executa somente os comandos

Load Select precedidos por um prefixo Replace ou Add.

Outras tabelas de dados não são afetadas pelo comando.

8.10 Expansões de sinal de dólar

As expansões do sinal de dólar são definições de substituições do texto usado no script ou em expressões.

Esse processo é conhecido como expansã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 ela é uma

expansão de macro.

Trabalhando com o QlikView - QlikView 12, November 2017

223


8   Introdução ao carregamento de dados

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 de script, de agora em

diante as expansões de macro serão chamadas de expansões de sinal de dólar.

As expansões de sinal de dólar podem ser usadas com:

l

variáveis



l

parâmetros

l

expressões



Uma expansão de sinal de dólar é limitada na quantidade de expansões que ela pode calcular.

Nenhuma expansão acima de 1000 será calculada.

Expansão de sinal de dólar usando uma variável

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

sintaxe:


$(variablename)

$(variablename) expande para o valor na variável. Se variablename não existir, a expansão resultará em

uma string vazia.

Para expansões variáveis numéricas, use a seguinte sintaxe:

$(#variablename)

Ela sempre gera uma representação de ponto decimal válido do valor numérico da variável, possivelmente

com notação exponencial (para números muito grandes/pequenos). Se



variablename não existir ou não

contiver um valor numérico, expandirá para



0.

Exemplo:

SET DecimalSep=',';

LET X = 7/2;

A expansão de sinal de dólar



$(X) expande para 3,5 $(#X) expande para 3.5.

Exemplo:

Set Mypath=C:\MyDocs\Files\;

...

LOAD * from $(MyPath)abc.csv;



Os dados serão carregados de

C:\MyDocs\Files\abc.csv.

Exemplo:

Set CurrentYear=1992;

...

SQL SELECT * FROM table1 WHERE Year=$(CurrentYear);



As linhas com Year=1992 serão selecionadas.

Trabalhando com o QlikView - QlikView 12, November 2017

224


8   Introdução ao carregamento de dados

Exemplo:

Set vConcatenate = ;

For each vFile in FileList('.\*.txt')

Data:


$(vConcatenate)

LOAD * FROM [$(vFile)];

Set vConcatenate = Concatenate ;

Next vFile

Neste exemplo, todos os arquivos .txt no diretório são carregados usando o prefixo

Concatenate. Isso pode

ser necessário se os campos forem ligeiramente diferentes e, nesse caso, a concatenação automática não

funciona. A variável vConcatenate é inicialmente configurada como uma string vazia, pois o prefixo

Concatenate não pode ser usado no primeiro carregamento. Se o diretório contiver três arquivos chamados

file1.txtfile2.txt file3.txt, a declaração LOAD durante as três iterações será expandida para:

LOAD * FROM[.\file1.txt];

Concatenate LOAD * FROM[.\file2.txt];

Concatenate LOAD * FROM[.\file3.txt];

Expansão de sinal de dólar usando parâmetros

Os parâmetros podem ser usados em expansões de sinal de dólar. 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.



Exemplo:

Set MUL=’$1*$2’;

Set X=$(MUL(3,7)); //

retorna '3*7' em X

Let X=$(MUL(3,7)); //

retorna 21 em X

Se o número de parâmetros formais exceder o número de parâmetros reais, apenas os formais

correspondentes aos reais serão expandidos. Se o número de parâmetros reais exceder o número de

parâmetros formais, os parâmetros reais excedentes serão ignorados.

Exemplo:

Set MUL=’$1*$2’;

Set X=$(MUL); //

retorna '$1*$2' em X

Set X=$(MUL(10)); //

retorna '10*$2' em X

Let X=$(MUL(5,7,8)); //

retorna 35 em X

O parâmetro $0 retorna o número de parâmetros realmente passados por uma chamada.

Exemplo:

set MUL='$1*$2 $0 par'; 

set X=$(MUL(3,7)); //

retorna '3*7 2 par' em X

Trabalhando com o QlikView - QlikView 12, November 2017

225


8   Introdução ao carregamento de dados

Expansão de sinal de dólar usando uma expressão

Expressões podem ser usadas em expansões de sinal de dólar. O conteúdo entre parênteses deve começar

com um sinal de igual:

$(=expression )

A expressão será avaliada e o valor será usado na expansão.



Exemplo:

$(=Year(Today())); //

retorna uma string com o ano atual.

$(=Only(Year)-1); //

retorna o ano anterior ao selecionado.

Inclusão de arquivo

Inclusões de arquivo são feitas usando as expansões do sinal de dólar. A sintaxe é:

$(include=filename )

O texto acima será substituído pelo conteúdo do arquivo especificado após o sinal de igual. Esse recurso é

bastante útil ao armazenar scripts ou partes de scripts em arquivos de texto.



Exemplo:

$(include=C:\Documents\MyScript.qvs);

8.11 Usando aspas no script

Você pode usar aspas em comandos de script de várias maneiras diferentes.

Dentro dos comandos LOAD

Em um comando



LOAD, os seguintes símbolos devem ser usados como aspas:

Descrição

Símbolo

Ponto de código

Exemplo

Nomes de campos

aspas duplas

" "

34

"string"



colchetes

[ ]


91, 93

[string]


acentos graves

` `


96

`string`


Literais de string

aspas simples

' '

39

'string'



Em comandos SELECT

Para um comando



SELECT interpretado pelo driver ODBC, pode ser um pouco diferente. Normalmente,

você deve utilizar aspas duplas retas (Alt + 0034) para nomes e aspas simples retas (Alt + 0039) para literais,

mas nunca acentos graves. No entanto, alguns drivers ODBC não somente aceitam acentos graves, como

também os preferem. Nesse caso, os comandos



SELECT gerados contêm acentos graves.

Trabalhando com o QlikView - QlikView 12, November 2017

226


8   Introdução ao carregamento de dados

Exemplos de aspas no Microsoft Access

O Microsoft Access ODBC Driver 3.4 (incluído no Microsoft Access 7.0) aceita as seguintes aspas ao analisar

a declaração



SELECT:

Nomes de campos e de tabelas:

[ ]

" "


` `

Literais de cadeias de caracteres:

' '


Outros bancos de dados podem ter diferentes convenções.

Fora dos comandos LOAD

Fora de um comando LOAD, nos lugares em que o QlikView espera uma expressão, as aspas duplas

denotam uma referência de variável e não uma referência de campo. Se você usar aspas duplas, a string

incluída entre elas será interpretada como uma variável e, em seguida, o valor da variável será usado.

Referências de campo e referências de tabela fora de contexto

Algumas funções de script referem-se a campos que já foram criados ou que estão na saída de um

comando LOAD, como por exemplo Exists() Peek(). Essas referências de campo são chamadas

referências de campo fora de contexto, ao contrário das referências de campo de fonte, que se referem

aos campos que estão no contexto, ou seja, na tabela de entrada do comando LOAD.

Referências de campo e referências de tabela fora de contexto devem ser consideradas como literais e,

portanto, precisam de aspas simples.

Diferença entre nomes e literais

A diferença entre nomes e literais torna-se mais clara na comparação dos seguintes exemplos:



Baixar 11.43 Mb.

Compartilhe com seus amigos:
1   ...   16   17   18   19   20   21   22   23   ...   117




©bemvin.org 2020
enviar mensagem

    Página principal
Prefeitura municipal
santa catarina
Universidade federal
prefeitura municipal
pregão presencial
universidade federal
outras providências
processo seletivo
catarina prefeitura
minas gerais
secretaria municipal
CÂmara municipal
ensino fundamental
ensino médio
concurso público
catarina município
reunião ordinária
Dispõe sobre
Serviço público
câmara municipal
público federal
Processo seletivo
processo licitatório
educaçÃo universidade
seletivo simplificado
Secretaria municipal
sessão ordinária
ensino superior
Relatório técnico
Universidade estadual
Conselho municipal
técnico científico
direitos humanos
científico período
Curriculum vitae
pregão eletrônico
espírito santo
Sequência didática
Quarta feira
conselho municipal
distrito federal
prefeito municipal
língua portuguesa
nossa senhora
segunda feira
educaçÃo secretaria
Pregão presencial
recursos humanos
Terça feira
agricultura familiar
educaçÃO ciência