terça-feira, 20 de maio de 2014

Qualify e Unqualify

Qualify
No Qlikview existe uma junção automática para os campos com o mesmo nome em tabelas diferentes, esta junção pode ser suspensa usando o comando qualify, que qualifica o nome do campo com seu nome de tabela. Se for(em) qualificado(s), o(s) nome(s) de campo será(ão) renomeado(s) quando encontrado(s) em uma tabela. O novo nome terá o formato nomedatabela.nomedocampo. Nomedatabela equivale ao rótulo da tabela atual ou, se não existir um rótulo, o 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. Após a utilização do comando qualify com aplicação de caracteres curinga ele será aplicado em todos os comandos loads subsequentes até a sua desativação utilizando o comando unqualify.

A sintaxe é:
qualify*listadecampos
*listadecampos é uma lista separada por vírgula dos campos para os quais a qualificação deve ser ativada. O uso de * como lista de campos indica todos os campos. Os caracteres curingas * e ? são permitidos nos nomes de campo. Poderá ser necessário colocar os nomes de campos entre aspas quando forem utilizados caracteres curinga.

Nota!
O comando qualify não deve ser usado em conjunto com uma recarga parcial!

Exemplos:
QUALIFY DESCRICAO;
:
LOAD * COD, DESCRICAO from PERGUNTA.xls;
LOAD * COD, DESCRICAO from CONTEXTO.xls;
Sem a utilização do comando qualify iriamos criar uma chave sintética de todos os campos entre as duas tabelas, mas ao aplicarmos o qualify as duas tabelas serão unidas apenas pelo campo COD. O resultado deste load serão três campos COD, PERGUNTA.DESCRICAO e CONTEXTO.DESCRICAO.
Em outro exemplo podemos utilizar os comandos qualify e unqualify de forma associada conforme exemplo:
QUALIFY *;
UNQUALIFY DESCRICAO;

LOAD * from TabelaA.xls;
LOAD * from TabelaB.xls;
LOAD * from TabelaC.xls;
LOAD * from TabelaD.xls;


Somente DESCRICAO será usado para associações entre as tabelas TabelaA, TabelaB, TabelaC e TabelaD.

segunda-feira, 19 de maio de 2014

Join e Keep

Join
O prefixo join une a tabela carregada a uma tabela nomeada existente ou à última tabela lógica. Esse procedimento consiste em uma junção natural executada com todos os Campos  . O comando join pode ser precedido dos prefixos:
Inner – Realiza a junção das tabelas pela interseção dos campos comuns;
Outer – Realiza a junção das tabelas pela união de todos os campos;
Left – Realiza a junção das tabelas com todos os campos existentes na tabela da esquerda mais os registros comuns encontrados na tabela da direita;
Right - Realiza a junção das tabelas com todos os campos existentes na tabela da direita mais os registros comuns encontrados na tabela da esquerda;
Sintaxe Geral:
[(inner|outer|left|right)] join [(nomedatabela)] (comandoload | comandoselect)

Exemplos:
CONTEXTO:
COD,CONTEXTO
1,Contexto1
2,Contexto2
3,Contexto3
4,Contexto4
5,Contexto5

PERGUNTA:
COD,PERGUNTA
1,Pergunta1
2,Pergunta2
3,Pergunta3
4,Pergunta4
5,Pergunta5
6,Pergunta6
7,Pergunta7
8,Pergunta8

LOAD * from CONTEXTO;

Inner Join (CONTEXTO)
LOAD * from RESPOSTA;


LOAD * from CONTEXTO;

Outer Join (CONTEXTO)
LOAD * from RESPOSTA;


LOAD * from CONTEXTO;

Left Join (CONTEXTO)
LOAD * from RESPOSTA;


LOAD * from CONTEXTO;

Right Join (CONTEXTO)
LOAD * from RESPOSTA;


Keep
O prefixo keep entre dois comandos Load ou Select (SQL) reduz uma ou as duas tabelas antes de seu armazenamento no QlikView, com base na interseção dos dados da tabela. A palavra-chave keep deve ser sempre precedida do prefixo Inner Left ou Right . A seleção de registros das tabelas é feita da mesma maneira que em uma junção correspondente. Entretanto, as duas tabelas não são unidas e serão armazenadas no QlikView como duas tabelas nomeadas separadas.

Nota!

A palavra-chave explícita Join na linguagem de script do QlikView executa uma junção completa das duas tabelas, que resulta em uma tabela. Em muitos casos, essas junções resultam tabelas muito grandes. Uma das principais características do QlikView a capacidade de fazer associações entre as tabelas, em vez de uni-las, reduzindo bastante o uso da memória, aumentando a velocidade de processamento e oferecendo grande flexibilidade. Portanto, geralmente as junções explícitas devem ser evitadas nos scripts do QlikView. A funcionalidade keep foi desenvolvida para diminuir o número de casos em que é necessário usar junções explícitas.

domingo, 18 de maio de 2014

Cláusula IntervalMatch

IntervalMatch
A cláusula IntervalMatch, aplicada a um comando Load ou Select (SQL) é utilizado para associar valores numéricos distintos a um ou mais intervalos numéricos
A sintaxe geral é:
Load|Select tabela1;
Load|Select tabela2;
intervalmatch (campo)(Load | Select)
Onde campo contém os valores numéricos distintos a serem associados aos intervalos.
load ou select retorna uma tabela de duas colunas, na qual o primeiro campo traz o limite inferior de cada intervalo e o segundo campo traz o limite superior de cada intervalo.
Os intervalos devem estar sempre fechados, isto é, sempre conter pontos de extremidade. Para os limites não-numéricos o intervalo será desconsiderado (indefinido), enquanto os limites com valor NULL fazem com que o intervalo seja infinito (ilimitado).
Quando o comando IntervalMatch for executado o campo que contém os pontos de dados distintos e os intervalos já devem ter sido lidos no Qlikview. Uma vez que o comando IntervalMatch, não lê esses campos a partir da tabela da base de dados por se tratar de uma cláusula .dos comandos Load | Select.
Caso os intervalos estejam sobrepostos os valores distintos serão associados a todos os intervalos correspondentes.
Exemplo:
Examine as duas tabelas abaixo. A primeira exibe as datas de início e término da aplicação de percentuais de participação diferentes. A segunda, lista vários percentuais distintos. Por meio da função IntervalMatch, associaremos as duas tabelas logicamente para saber, por exemplo, quais percentuais de participação foram aplicados em um determinado período de tempo.

Participacao
DataInicio          DataFim                           %Participacao
01/01/2010        31/12/2010                      0,35
01/01/2011        31/12/2011                      0,15
01/01/2012        31/12/2012                      0,20
01/01/2013        31/12/2013                      0,48
01/01/2014        31/12/2014                      0,53

Histórico
Data                    Descricao                       Valor
05/01/2010        Venda de Produtos        5.670,00
25/11/2010        Mão-de_obra                  6.213,00
07/10/2011        Venda de Produtos        5.885,00
25/11/2011        Mão-de_obra                  6.428,00
05/01/2012        Venda de Produtos        6.100,00
19/02/2012        Mão-de_obra                  6.643,00
23/06/2013        Venda de Produtos        6.315,00
29/08/2013        Mão-de_obra                  6.858,00
04/01/2014        Venda de Produtos        6.530,00
24/11/2014        Mão-de_obra                  7.073,00

Primeiro, carregue as duas tabelas da forma habitual e, em seguida, associe o campo Data aos intervalos definidos pelos campos DataInício DataTérmino:

Participacao:
LOAD DataInicio,DataFim,%Participacao Inline [
DataInicio|DataFim|%Participacao
01/01/2010|31/12/2010|0,35
01/01/2011|31/12/2011|0,15
01/01/2012|31/12/2012|0,20
01/01/2013|31/12/2013|0,48
01/01/2014|31/06/2014|0,53
](delimiter is '|') ;

Eventos:
Load * Inline [
Data,Descrição,Valor
05/01/2010,Venda de Produtos, 5.670,00
25/11/2010,Mão-de_obra, 6.213,00
07/10/2011,Venda de Produtos, 5.885,00
25/11/2011,Mão-de_obra, 6.428,00
05/01/2012,Venda de Produtos, 6.100,00
19/02/2012,Mão-de_obra, 6.643,00
23/06/2013,Venda de Produtos, 6.315,00
29/08/2013,Mão-de_obra, 6.858,00
04/01/2014,Venda de Produtos, 6.530,00
24/11/2014,Mão-de_obra, 7.073,00
];
IntervalMatchtab:
IntervalMatch(DataLOAD DataInicioDataFim Resident Participacao;

Agora, tabela a seguir pode ser criada no Qlikview:


terça-feira, 6 de maio de 2014

Criando Estados Alternativos

Descrição
O estado alternativo é uma separação lógica de parte dos dados armazenados no documento Qlikview para análise individual de forma que, a seleção realizada sobre um estado alternativo não interfere nos demais estados nem no restante do documento. Você pode criar vários estados dentro de um documento QlikView e aplicá-los a objetos específicos no documento. Estados Alternativos não é um recurso disponível no script de carga e sim na interface gráfica(UI).

1º Passo – Criar os estados alternativos: no menu Propriedades do Documento: Aba Geral.na caixa de diálogo Estados Alternativos a partir do botão Estados Alternativos... Voce 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, você também pode criar novos estados a partir dos objetos da tela.



1.     Criar um objeto de texto e aplicar as seguintes configurações a este objeto:
a.     Na guia “Geral” Alinhamento horizontal centro, alinhamento vertical superior transparência 100%
b.     Na guia “Titulo” Ocultar a barra de título;
c.     Efetuar as demais formações conforme achar necessário;



2.     Criar um objeto listbox para o campo ANO e aplicar as seguintes configurações a este objeto:
a.     Na guia “Geral” selecionar o estado alternativo 1


b.     Na guia “Apresentação” Desmarcar a opção “coluna única” e marcar “bordas da célula”

c.     Efetuar as demais formações conforme achar necessário;
d.     Criar um objeto listbox com as mesmas configurações para o campo MÊS.



3.     Criar um objeto de seleção múltipla e aplicar as seguintes configurações a este objeto:
a.     Na aba “Geral Inserir os campos DIA UTIL e DIA, selecionar o estado alternativo 1


b.     Na aba “Apresentação” marcar a opção “Estilo da Grade”


c.     Efetuar as demais formações conforme achar necessário

4.     Executar os passos 1 a 3 novamente para o estado alternativo 2
Neste ponto teremos uma imagem semelhante a esta, observe que fiz seleções diferenciadas para mostrar como o estado alternativo permite a seleção individual por estado.


5.     Agora vamos criar um gráfico combinado e aplicar as seguintes configurações a este objeto:
a.     Colocar o campo cidade como dimensão


b.     Criar duas expressões para cada estado alternativo com a seguinte formula:
Expressão 1:
sum({EstAlternativo1<Cliente = $::Cliente, Vendedor = $::Vendedor, Cidade = $::Cidade>}Vendas)
Expressão 2:
sum({EstAlternativo1<Cliente = $::Cliente, Vendedor = $::Vendedor, Cidade = $::Cidade>}Vendas)/
sum({EstAlternativo1<Cliente = $::Cliente, Vendedor = $::Vendedor, Cidade = $::Cidade>} Total Vendas)
Esta expressão realiza a soma do campo “vendas” para o Estado alternativo “EstAlternativo1” onde qualquer valor selecionado no campo Cliente do estado padrão também será selecionado no campo “Cliente” do estado alternativo; o mesmo ocorre para os campos “Vendedor” e “Cidade“
c.     Para o rotulo destas expressões funcionarem de modo dinâmico vamos aplicar a seguinte expressão
Expressão 1:
if(Count({EstAlternativo1} DISTINCT ANO) = 1 and Count({EstAlternativo1} DISTINCT MES) = 1, 'Vendas' &' ' & Only({EstAlternativo1} MES) & ' '& 'de' &' ' & Only({EstAlternativo1} ANO), if(count({EstAlternativo1} DISTINCT ANO) = 1 , 'Vendas' &' ' &   if(Count({EstAlternativo1} DISTINCT MES) <12, Concat({EstAlternativo1} DISTINCT MES,',',12) )
&' '& 'de' &' ' & Only({EstAlternativo1} ANO), 'Estado Alternativo1'))
Expressão 2:
=if(Count({EstAlternativo1} DISTINCT ANO) = 1 and Count({EstAlternativo1} DISTINCT MES) = 1, '% Part'&' ' & Only({EstAlternativo1} MES) & ' '& 'de' &' ' & Only({EstAlternativo1} ANO), if(count({EstAlternativo1} DISTINCT ANO) = 1 , '% Part' &' ' &   if(Count({EstAlternativo1} DISTINCT MES) <12, Concat({EstAlternativo1} DISTINCT MES,',',12) ) &' '& 'de' &' ' & Only({EstAlternativo1} ANO), 'Estado Alternativo1'))
d.     A primeira e a terceira expressões deverão ser configuradas como barra e com valores sobre dados marcado
e.     A segunda e quarta expressões deverão ser configuradas como linha e com símbolo pontos.


f.      Na aba “Eixos” configurar a primeira e terceira expressões na posição esquerda e a segunda e quarta na posição direita.


g.     Na aba “Número” configurar a primeira e terceira expressões como inteiro e a segunda e quarta como fixo com um decimal e mostrar em porcentagem.



Finalmente teremos esta aparência para a apresentação do estado alternativo.



Identificadores de Estado
Os nomes de estado criados por você são conhecidos 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 - Pasta - 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.

Recursos em Estados Alternativos
Os recursos a seguir estão incluídos em Estados Alternativos:
l Não há nenhuma indicação automática na tela para informar que objetos ou expressões estão em estados alternativos ou fazem referência a eles. O desenvolvedor do QlikView deve decidir se fornecerá essas informações para o usuário final usando a função StateName().
Estados Alternativos pode ser usado 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 estados não afetarão os valores de variável.

Nota:
O recurso Estados Alternativos é ativado por um desenvolvedor do QlikView e deve ser usado com cautela, pois pode gerar uma grande confusão com os usuários finais.


domingo, 4 de maio de 2014

Layout Menu Principal - Parte 02

13. Digite novamente CRTL+ SHIFT +S para ocultar os outros objetos;
14. Criar uma variável chamada vMenu;


15. No editor de Módulos criar a macro abaixo:
sub AtivaPasta
vMenu   = ActiveDocument.Variables("vMenu").GetContent. String
ActiveDocument.ActivateSheet vMenu          
end sub 


16. Configurar as propriedades de Módulo de segurança requerido com “Modo Seguro” e “Apenas modo seguro”;
17. No menu Configurações propriedades do documento selecionar a guia disparadores e em disparadores de campo selecionar o campo “Paineis” e adicionar os seguintes disparadores ao selecionar:
a. Bloquear campo  - %ID_Menu
b. Definir variável “Vmenu” para o valor “=%Sheet”;
c. Executar Macro – Ativa Pasta
d. Limpar Campo Paineis



18. Nas propriedades da pasta Menu Principal adicionar os seguintes disparadores:
a.  Ao sair destravar campo %ID_Menu.
b. Ao entrar Limpar Tudo
19. Finalmente alterar a  configuração em propriedades do documento para “ocultar pastas”.


Ao terminar todo o processo o seu menu principal deverá ter esta aparência:



sábado, 3 de maio de 2014

Layout Menu Principal - Parte 01

Para começar a implantação de um menu principal para navegação entre os diversos dahsboards e necessário carregar a estrutura do menu através de um arquivo ou load inline conforme exemplo abaixo:



Observe que alguns campos ossuem o prefixo “%” para evitar que eles apareçam na caixa de seleções atuais para o usuário. Utilizaremos a expressão abaixo no script de carga, para impedir que estes campos de mostrem ao usuário.
set Hideprefix = '%';

Em seguida vamos seguir alguns passos para criar diversos objetos que serão utilizados na construção do menu:
1. Criar um objeto de pesquisa e configurá-lo para pesquisar o campo Paineis; 



2. Criar uma tabela simples contendo os campos %Indice_Menu e Paineis como dimensão e a expressão abaixo:
if(GetSelectedCount(%ID_Menu) = 1,Paineis

3. Aplicar as seguintes configurações a esta tabela:
a. Na guia Expressoes marcar o modo total com “sem Totais”




b.  Na guia “Apresentação” Ocultar as colunas de dimensão, ocultar linha de cabeçalho, retorno do texto das células = 2;




c. Na guia “Titulo” Ocultar a barra de título;




d. Na guia Layout Ocultar as bordas e aplicar a expressão abaixo na condição de exibição
Count(DISTINCT %ID_Menu) = 1




e. Na Guia “Estilo” colocar 100% de transparência de Cor de Fundo de Célula e clicar no botão fundo e também aplicar 100% de transparência de cor de Fundo.




f. Efetuar as demais formações conforme achar necessário;

4. Duplicar a tabela acima e substituir a dimensão %Indice_Menu pela expressão abaixo:

='qmem://<bundled>/BuiltIn/question.png'

5. Aplicar as seguintes configurações a esta tabela:
a. Na guia “Dimensões” clique em avançado e  selecione “Imagem “ no campo Representação



b. Na guia “Apresentação” Ocultar a coluna de dimensão Paineis e a de expressão, ocultar linha de cabeçalho, retorno do texto das células = 2;
c. Na guia “Titulo” Ocultar a barra de título;
d. Na guia Layout Ocultar as bordas e aplicar a expressão abaixo na condição de exibição
Count(DISTINCT %ID_Menu) = 1
e. Reduzir a largura da coluna com imagem até que fique proporcional ao restante da tela
f. Efetuar as demais formações conforme achar necessário;

6. Criar um objeto de texto colocar o título do primeiro menu nela, formatar conforme achar melhor.
7. Criar outro objeto de texto e aplicar o ícone do primeiro menu nele;



8. Aplicar as seguintes configurações ao objeto
a. Na guia “Titulo” Ocultar a barra de título;
b. Na guia “Ações” escolher a ação “Selecionar Campo” e configurar o campo
%ID_Menu e valor =if(%ID_Menu <> 1,1,0) 




c. Na guia Layout Ocultar as bordas e aplicar a expressão abaixo na condição de exibição:
%ID_Menu =1 or Count(DISTINCT %ID_Menu) > 1 

9. Duplique este objeto e aplique a expressão abaixo na condição de exibição: 
%ID_Menu <> 1 and Count(DISTINCT %ID_Menu) = 1 
10. Na guia geral altere a transparência do objeto para o nível de 70% mais ou menos;



11. Repita as operações de 6 a 10 para os demais itens de %ID_Menu;
12. Digite CRTL+SHIFT+S para fazer aparecer todos os objetos ocultos alinhe os objetos de texto semelhantes um sobre o outro de forma que somente apareçam o numero de objetos igual ao numero de registros distintos do campo %ID_Menu. 
Continua no próximo post...