Trabalhando com o QlikView



Baixar 11.43 Mb.
Pdf preview
Página24/117
Encontro09.04.2020
Tamanho11.43 Mb.
1   ...   20   21   22   23   24   25   26   27   ...   117

CustomerID

Country

Trabalhando com o QlikView - QlikView 12, November 2017

262


8   Introdução ao carregamento de dados

1

Spain



2

Italy


3

Germany


4

France


A tabela de mapeamento, que nomeamos para MapCustomerIDtoCountry, é definida no script da seguinte

forma:


MapCustomerIDtoCountry:

Mapping LOAD CustomerID, Country From Customers ;

O próximo passo é aplicar o mapeamento, utilizando a função

ApplyMap ao carregar a tabela de pedidos:

Orders:


S *,

ApplyMap('MapCustomerIDtoCountry', CustomerID, null()) as Country

From Orders ;

O terceiro parâmetro da função



ApplyMap é usado para definir o que deve ser retornado quando o valor não

for encontrado na tabela de mapeamento, neste caso



Null().

A tabela resultante teria a seguinte aparência:



OrderID

OrderDate

ShipperID

Freight

CustomerID

Country

12987


2007-12-01

1

27



3

Germany


12988

2007-12-01

1

65

4



France

12989


2007-12-02

2

32



2

Italy


12990

2007-12-03

1

76

3



Germany

Trabalhando com 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 poderia ter a aparência da tabela a seguir.



Exemplo 1:

Year


Jan

Feb


Mar

Apr


May

Jun


2008

45

65



78

12

78



22

2009


11

23

22



22

45

85



2010

65

56



22

79

12



56

2011


45

24

32



78

55

15



2012

45

56



35

78

68



82

Trabalhando com o QlikView - QlikView 12, November 2017

263


8   Introdução ao carregamento de dados

Se essa tabela for simplesmente carregada no QlikView, o resultado será um campo para



Year e um campo

para cada um dos meses. Geralmente, esse resultado não é o desejado. Seria melhor você gerar três

campos: um para cada categoria de cabeçalho (

Year Month) e um para os valores de dados dentro da

matriz.


Para isso, é preciso incluir o prefixo

crosstable na declaração LOAD ou SELECT.

crosstable (Month, Sales) LOAD * from ex1.xlsx;

Isso cria o seguinte resultado no QlikView:

A tabela cruzada é frequentemente precedida de várias colunas de qualificação que devem ser lidas de

modo direto. Nesse caso, há uma coluna de qualificação, Year:

Exemplo 2:

Salesman


Year

Jan


Feb

Mar


Apr

May


Jun

A

2008



45

65

78



12

78

22



A

2009


11

23

22



22

45

85



A

2010


65

56

22



79

12

56



A

2011


45

24

32



78

55

15



A

2012


45

56

35



78

68

82



B

2008


57

77

90



24

90

34



B

2009


23

35

34



34

57

97



B

2010


77

68

34



91

24

68



B

2011


57

36

44



90

67

27



B

2012


57

68

47



90

80

94



Nesse caso, há duas colunas de qualificação à esquerda, seguidas pelas colunas da matriz. O número de

colunas de qualificação pode ser indicado como um terceiro parâmetro para o prefixo



crosstable, da

seguinte maneira:

crosstable (Month, Sales, 2) LOAD * from ex2.xlsx;

Trabalhando com o QlikView - QlikView 12, November 2017

264


8   Introdução ao carregamento de dados

Isso cria o seguinte resultado no QlikView:

Bancos de dados genéricos

Um banco de dados genérico é uma tabela na qual os nomes de campo são armazenados como valores de

campos em uma coluna e os valores de campos são armazenados em uma segunda. Geralmente, os bancos

de dados genéricos são usados para atributos de objetos diferentes.

Veja o exemplo abaixo, GenericTable. É um banco de dados genérico que contém dois objetos: uma bola e

uma caixa. Alguns dos atributos, como cor e peso, são comuns aos dois objetos, enquanto outros, como

diâmetro, altura, comprimento e largura, não são.

GenericTable

object

attribute

value

ball


color

red


ball

diameter


10 cm

ball


weight

100 g


box

color


black

box


height

16 cm


box

length


20 cm

box


weight

500 g


box

width


10 cm

Por um lado, seria inconveniente armazenar os dados de forma que cada atributo recebesse uma coluna

própria, pois muitos dos atributos não são relevantes para um objeto específico.

Por outro lado, seria confuso exibi-los de forma que misturasse comprimentos, cores e pesos.

Se esse banco de dados for carregado no QlikView usando o modo padrão, a exibição dos dados em uma

tabela teria esta aparência:

Trabalhando com o QlikView - QlikView 12, November 2017

265


8   Introdução ao carregamento de dados

No entanto, se a tabela for carregada como um banco de dados genérico, as colunas dois e três serão

divididas em tabelas diferentes, uma para cada valor exclusivo da segunda coluna:

A sintaxe desta operação é simples:



Exemplo:

Generic SELECT* from GenericTable;

Não importa se é um comando

LOAD ou SELECT que será usado para carregar o banco de dados genérico.

Correspondendo intervalos a dados discretos

O prefixo

intervalmatch de um comando LOAD ou SELECT é usado para vincular valores numéricos

discretos a um ou mais intervalos numéricos. Esse recurso é muito útil e pode ser usado, por exemplo, em

ambientes de produção, conforme demonstrado no exemplo a seguir.

Exemplo:

Examine as duas tabelas a seguir. A primeira tabela mostra o início e o final da produção de pedidos

diferentes. A segunda tabela mostra alguns eventos discretos. Como podemos associar os eventos discretos

aos pedidos, de forma que saibamos, por exemplo, que pedidos foram afetados pelas interferências e que

pedidos foram processados por quais turnos?

Table OrderLog

Table EventLog

Trabalhando com o QlikView - QlikView 12, November 2017

266


8   Introdução ao carregamento de dados

Primeiro, carregue as duas tabelas da forma habitual e, em seguida, vincule o campo



Time aos intervalos

definidos pelos campos



Start End:

SELECT * from OrderLog;

SELECT * from EventLog;

Intervalmatch (Time) SELECT Start,End from OrderLog;

Agora você pode criar uma tabela no QlikView, como mostrado abaixo:

Podemos observar, principalmente, que o pedido



foi afetado pela interrupção da linha, mas que a

velocidade reduzida da linha afetou também os pedidos



C. Somente os pedidos foram

parcialmente tratados pelo



Shift 2.

Observe o seguinte ao utilizar o comando



intervalmatch:

l

Antes do comando



intervalmatch o campo que contém os pontos de dados discretos (Time no

exemplo acima) já deve ter sido lido no QlikView. O próprio comando



intervalmatch não lê esse

campo da tabela do banco de dados.

l

A tabela lida no comando



intervalmatch LOAD ou SELECT deve sempre conter exatamente dois

campos (


Start End no exemplo apresentado). Para estabelecer um link com outros campos, é

necessário ler os campos de intervalo com campos adicionais em um campo



LOAD ou SELECT

separado (o primeiro comando



SELECT no exemplo apresentado).

l

Os intervalos estão sempre fechados, isto é, sempre contêm pontos de extremidade. Os limites não



numéricos fazem com que o intervalo seja desconsiderado (indefinido) e os limites NULL estendem o

intervalo indefinidamente (ilimitado).

l

Os intervalos podem estar sobrepostos e os valores discretos estarão vinculados a todos os intervalos



correspondentes.

Trabalhando com o QlikView - QlikView 12, November 2017

267


8   Introdução ao carregamento de dados

Usando a sintaxe intervalmatch estendida para resolver problemas de

lentidão durante a alteração de dimensões

A sintaxe



intervalmatch estendida pode ser utilizada para tratar o problema já conhecido de lentidão

durante a alteração de dimensões na fonte de dados.

Script de amostra:

SET NullInterpret='';

IntervalTable:

LOAD Key, ValidFrom, Team from IntervalTable.xls;

NullAsValue FirstDate,LastDate;

Key:


LOAD

Key,


ValidFrom as FirstDate,

date(if(Key=previous(Key),

previous(ValidFrom) - 1)) as LastDate,

Team


RESIDENT IntervalTable order by Key, ValidFrom desc;

drop table IntervalTable;

Transact:

LOAD Key, Name, Date, Sales from Transact.xls;

INNER JOIN intervalmatch (Date,Key) LOAD FirstDate, LastDate, Key RESIDENT Key;

O comando



nullinterpret é exigido apenas na leitura de dados de um arquivo de tabela, pois os valores

ausentes são definidos como caracteres vazios em vez de valores NULL.

O carregamento dos dados de

IntervalTable resultaria na seguinte tabela:

O comando



nullasvalue permite que os valores NULL sejam mapeados para os campos listados.

Crie


KeyFirstDateLastDate (campos de atributos) usando previous order by. Posteriormente,

IntervalTable é eliminada e substituída por essa tabela de chave.

O carregamento dos dados de



Transact resultaria na seguinte tabela:

Trabalhando com o QlikView - QlikView 12, November 2017

268


8   Introdução ao carregamento de dados

O comando



intervalmatch precedido por inner join substitui a chave por uma chave sintética que se

conecta à tabela



Transact, resultando na seguinte tabela:

Criando um intervalo de datas a partir de uma única data

Às vezes, os intervalos de tempo não são armazenados de forma explícita com um início e um término. Em

vez disso, eles estão implícitos por apenas um campo – o carimbo de hora da alteração.

Poderia ser exatamente como mostrado na tabela abaixo, na qual temos taxas de câmbio para várias

moedas. Cada alteração na taxa de câmbio está em sua própria linha; cada uma com uma nova taxa de

conversão. Além disso, a tabela contém linhas com datas vazias correspondentes à taxa de conversão

inicial, antes da primeira alteração feita.

Esta tabela define um conjunto de intervalos não sobrepostos, no qual a data de início é chamada “Change

Date” e a data de término é definida pelo início do próximo intervalo. Contudo, já que a data de término não

está explicitamente armazenada em uma coluna própria, precisamos criar essa coluna, para que a nova

tabela torne-se uma lista de intervalos.

Trabalhando com o QlikView - QlikView 12, November 2017

269


8   Introdução ao carregamento de dados

Faça o seguinte:

1. Crie um arquivo chamado Rates.xlsx que contenha a tabela mostrada acima e armazene-o pronto

para o carregamento.

Certifique-se de que as datas na coluna Change Date estejam no mesmo formato da data local.

2. Determine com qual intervalo de tempo você deseja trabalhar. O início do intervalo deve ser antes da

primeira data dos dados e o final do intervalo deve ser após a última.

3. Carregue os dados de origem, mas altere as datas vazias para o início do intervalo definido no ponto

anterior. A data de alteração deve ser carregada como “From Date”.

4. Classifique a tabela primeiro de acordo com Currency e, em seguida, de acordo com “From Date”, de

forma descendente para que as últimas datas sejam exibidas na parte superior.

5. Execute uma segunda passagem de dados onde será calculado “To Date”. Se o registro atual tiver

uma moeda diferente do registro anterior, ele será o primeiro registro de uma nova moeda (mas seu

último intervalo); portanto, você deve usar o final do intervalo definido na primeira etapa. Se ele tiver

a mesma Moeda, você deve retirar “From Date” do registro anterior, subtrair uma pequena

quantidade de tempo e usar esse valor como “To Date” no registro atual.

O script listado abaixo atualizará a tabela de origem da seguinte maneira:

O script do QlikView tem a seguinte aparência:

Let vBeginTime = Num('1/1/2013');

Let vEndTime = Num('1/3/2013');

Let vEpsilon = Pow(2,-27);

Tmp_Rates:

LOAD Currency, Rate,

Date(If(IsNum([Change Date]), [Change Date], $(#vBeginTime))) as FromDate

From 'C:\MyFiles\Rates.xlsx'

(ooxml, embedded labels, table is Sheet1);

Rates:

LOAD Currency, Rate, FromDate,



Date(If( Currency=Peek(Currency),

Peek(FromDate) - $(#vEpsilon),

$(#vEndTime)

)) as ToDate

Resident Tmp_Rates

Order By Currency, FromDate Desc;

Drop Table Tmp_Rates;

Trabalhando com o QlikView - QlikView 12, November 2017

270


8   Introdução ao carregamento de dados

Quando o script é executado, será exibida uma tabela que lista os intervalos corretamente.

Esta tabela pode ser posteriormente utilizada em uma comparação com uma data atual com os métodos

Intervalmatch.

Hierarquias

Hierarquias irregulares com

níveis são geralmente usadas para representar, entre outras coisas,

dimensões geográficas ou organizacionais em dados. Esses tipos de hierarquias são geralmente

armazenados em uma tabela de nós adjacentes, isto é, em uma tabela na qual cada registro corresponde a

um nó e possui um campo que contém uma referência ao nó pai.

Em uma tabela como essa, o nó é armazenado em apenas um registro, mas ainda pode ter um número

indefinido de filhos. A tabela pode conter campos adicionais que descrevem atributos para os nós.

Uma tabela de nós adjacentes é fácil de manter, mas difícil de usar em trabalhos do dia-a-dia. Em vez disso,

em consultas e análises, outras representações são usadas. A tabela de nós expandidos é uma

representação comum, na qual cada nível da hierarquia é armazenado em um campo separado. Os níveis de

uma tabela de nós expandidos podem ser facilmente utilizados, por exemplo, em uma estrutura de árvore. A

palavra-chave

hierarchy pode ser usada no script de carregamento para transformar uma tabela de nós

adjacentes em uma tabela de nós expandidos.



Exemplo:

Hierarchy (NodeID, ParentNodeID, Title, 'Manager') LOAD

NodeID,

ParentNodeID,



Title

FROM 'hierarchy.txt' (txt, codepage is 1252, embedded labels, delimiter is ',', msq);

Um dos problemas da tabela de nós expandidos é que não é fácil usar os campos de nível para realizar

pesquisas ou seleções, já que é necessário ter um conhecimento prévio sobre o nível que se deseja

pesquisar ou selecionar. A tabela de ancestrais é uma representação diferente que resolve esse problema.

Essa representação também é chamada de tabela de ponte.

Trabalhando com o QlikView - QlikView 12, November 2017

271


8   Introdução ao carregamento de dados

A tabela de ancestrais contém um registro para cada relação filho-ancestral encontrada nos dados. Ela

contém chaves e nomes para os filhos, bem como para os ancestrais, ou seja, cada registro descreve o nó ao

qual um nó específico pertence. A palavra-chave



hierarchybelongsto pode ser usada no script de

carregamento para transformar uma tabela de nós adjacentes em uma tabela de ancestrais.

Links semânticos

Normalmente, as seleções são feitas de forma explícita clicando nos valores de campo desejados. No

entanto, também existe uma forma de fazer indiretamente as seleções usando links semânticos. Esses são

semelhantes a valores de campo, mas descrevem as relações entre os objetos, em vez dos próprios objetos.

e aparecem como uma lista de botões.

Ao clicar em um link semântico, uma seleção é feita em outro campo.

Regras para tabelas semânticas

Tabelas semânticas não são exibidas no Visualizador de Tabelas.

Os links semânticos são criados ao carregar tabelas que contêm as relações entre os objetos.

l

A tabela deve conter exatamente três ou quatro colunas.



l

Uma tabela semântica deve conter relações entre valores de campos diferentes ou entre valores do

mesmo campo. Não é aceita uma combinação dos dois.

l

Os comandos



LOAD ou SELECT que carregam uma tabela semântica devem ser precedidos por um

qualificador



semantic para mostrar que não é uma tabela lógica.

Normalmente são usadas quatro colunas, a primeira contém os valores de campo que têm uma relação com

algum outro valor de campo e a terceira, que contém o valor de campo relacionado. A segunda coluna deve

conter os nomes das relações e, finalmente, a quarta coluna deve ter os nomes das relações inversas.

Se forem utilizadas três colunas, nenhum nome explícito poderá ser dado às relações inversas. Os nomes

fornecidos na segunda coluna são utilizados para a relação e a relação inversa. Os nomes são precedidos ou

seguidos por setas.

Se as relações forem entre valores do mesmo campo, a primeira e a terceira colunas devem ter o mesmo

nome. Além disso, o nome da segunda e quarta colunas, isto é, o tipo de relações, deve ser o mesmo. No

entanto, se as relações forem entre valores de campos diferentes, todas as colunas devem ter nomes

diferentes.

extraindo uma tabela semântica a partir dos dados

Nem sempre a tabela semântica precisa existir como uma tabela fora do QlikView. É mais flexível extrair

essa tabela da tabela de objetos existente usando um comando



LOAD separado.

No exemplo



presidents, no diretório de exemplos do QlikView, o script para gerar os links Predecessor e

Successor e poderia ser:

Directory presidents;

LOAD * from presdnts.csv (ansi, txt, delimiter

is ',', embedded labels);

Trabalhando com o QlikView - QlikView 12, November 2017

272


8   Introdução ao carregamento de dados

Semantic LOAD

No -1 as No,

'Successor' as Relation,

No,

'Predecessor' as Relation



from presdnts.csv (ansi, txt, delimiter is ',',

embedded labels) where No > 1;

O segundo comando

LOAD resulta em uma tabela que se assemelha à da direita, e essa tabela é carregada

como uma tabela semântica. A cláusula



where é utilizada para omitir o primeiro registro, pois isso poderia

vincular o primeiro presidente ao presidente 0 não existente.

Note também que esse comando

LOAD contém dois campos com rótulo No e dois campos com rótulo

Relation. Esse comando LOAD causaria um erro de execução do script se fosse utilizado para carregar uma

tabela interna, pois o procedimento de carregamento para uma única tabela interna exige que nenhum dos

campos tenha o mesmo nome. O comando

SELECT correspondente também não é possível, pois a maior

parte dos drivers ODBC também exige isso. Em vez disso, a seguinte estrutura deveria ser usada se a tabela

presidentes estivesse em uma base de dados:

Connect to DataBase;

SELECT * from presdnts;

Alias No2 as No, Relation2 as Relation;

Semantic SELECT

No -1 as No,

'Successor' as Relation,

No as No2,

'Predecessor' as Relation2

from presdnts where No > 1;

O exemplo dos presidentes é apenas uma simples amostra de como usar os links semânticos. Eles também

podem ser utilizados em genealogia, em que os links semânticos podem ser, por exemplo, primo, irmão,

avó, etc., ou para pessoas em empresas, em que os links semânticos podem ser, por exemplo,

superior,

reports tosecretary, etc.

utilizando os valores relacionados como nomes de relação

Às vezes, é mais descritivo usar o valor do campo relacionado como o nome da relação. No caso dos

presidentes, você poderia desejar todos os antecessores em uma coluna e todos os sucessores em outra:

Para criar esses links, o seguinte script é necessário:

LOAD


No as DuplicateOfNo,

FirstName & ' ' & LastName as Name,

*

from presdnts.csv;



Semantic LOAD

No -1 as No,

FirstName & ' ' & LastName as Successor,

No as DuplicateOfNo,

'Dummy1'

from presdnts.csv where No > 1;

Semantic LOAD

No +1 as No,

FirstName &' ' & LastName as Predecessor,

No as DuplicateOfNo,

'Dummy2'

from presdnts.csv;

Trabalhando com o QlikView - QlikView 12, November 2017

273


8   Introdução ao carregamento de dados

Quando um link semântico é clicado, é feita uma seleção no campo da terceira coluna,



DuplicateOfNo, que,

na tabela semântica, é sempre o número do presidente mostrado no link semântico.

A princípio pode não ser óbvio, mas as relações inversas na construção apresentada são quase inúteis. Elas

mostrariam o nome de um presidente e, quando clicadas, selecionariam o antecessor/sucessor do

presidente exibido. É por isso que são chamadas

Dummy1 Dummy2 e somente a primeira relação (coluna

dois) é utilizada.

Como não queremos que as relações fictícias apareçam nas listas, devemos tratar a segunda e a quarta

colunas como tipos diferentes de relações. Isso significa que a primeira e a terceira colunas devem ter nomes

de campo diferentes. Esse é o motivo pelo qual temos duas colunas que contêm o número do presidente,

No

e

DuplicateOfNo.

Dois comandos


Baixar 11.43 Mb.

Compartilhe com seus amigos:
1   ...   20   21   22   23   24   25   26   27   ...   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
espírito santo
Curriculum vitae
pregão eletrônico
Sequência didática
Quarta feira
distrito federal
prefeito municipal
conselho municipal
língua portuguesa
nossa senhora
segunda feira
Pregão presencial
educaçÃo secretaria
recursos humanos
Terça feira
educaçÃO ciência
agricultura familiar