Rotina de Gravação de Arquivos de Dados (QVD)

De Qknow
Ir para: navegação, pesquisa

Introdução

No QlikView 11 é possível definir rotinas que são executadas a partir de outros pontos do script. Estes fragmentos de código são especialmente úteis para tarefas repetitivas que necessitam ser inseridas inúmeras vezes no decorrer do processo. Uma das mais comuns atividades de criação de painéis decorre da geração de arquivos de dados em formato .QVD. Embora a execução da instrução STORE seja fácil e rápida, uma rotina de gravação dos arquivos .QVD pode auxiliar na definição do caminho a ser utilizado na gravação além de recursos adicionais, como remover ou não as tabelas da memória após a geração dos arquivos. Esta seção descreve como utilizar uma rotina de gravação de arquivos .QVD com incremento de inteligência para as seguintes tarefas:

  • Definir automaticamente o local de gravação por meio de variável.
  • Escolher se haverá ou não a gravação do arquivo em formato .QVD.
  • Escolher se arquivos adicionais em formato .TXT devem ser gerados.
  • Escolher se apagará ou não as tabelas da memória.


Criação da Rotina de Gravação

Uma rotina é definida em nível de script por meio da instrução Sub seguido do nome da rotina que não deve conter espaços em branco. Alternativamente, rotinas podem receber valores que serão utilizados dentro do procedimento através do que denomina-se parâmetros. Parâmetros são variáveis que não precisam de definição prévia e são informadas entre parênteses ao lado do nome da rotina. No exemplo a seguir, os parâmetros pTabela e pArquivo são esperados pela rotina GravaQVD.

Sub GravaQVD (pTabela, pArquivo)

	If vGravaQVD = 1 Then
		STORE $(pTabela) INTO $(vCaminhoDestino)\$(pArquivo).QVD (QVD);
	Endif;

	If vGravaTXT = 1 Then
		STORE $(pTabela) INTO $(vCaminhoDestino)\$(pArquivo).TXT (txt);
	Endif;
 
	If vLimpaMemoria = 1 Then
		Drop Table $(pTabela); 
	Endif;

EndSub;

A definição da rotina é encerrada por meio da instrução EndSub que delimita o fragmento de instruções que será ignorado pela execução do script. Ou seja, durante a recarga CTRL + R qualquer instrução entre os limites de Sub e EndSub serão ignorados em um primeiro momento. Na realidade, o QlikView faz a leitura dos comandos mas os mantém como uma rotina reutilizável. Ou seja, apesar de passar pelas instruções, nenhum comando dentro do limite da rotina é executado de imediato.

A execução da rotina ocorre por meio da utilização da função CALL seguido do nome da rotina e dos eventuais parâmetros que existirem. No exemplo de gravação de arquivos QVD (acima) a chamada da rotina se dá como no exemplo a seguir, assumindo que na memória haja uma tabela com o nome de Normas_Irregularidades. A rotina espera receber dois parâmetros, sendo o primeiro para o nome da tabela que existe em memória e o segundo o nome do arquivo que será gravado em disco com o formato .QVD (ou .TXT). No exemplo da chamada abaixo tanto o nome da tabela em memória (1º parâmetro) quanto o nome do arquivo a ser gravado (2º parâmetro) são iguais.

Call GravaQVD ('Normas_Irregularidade', 'Normas_Irregularidade');

Note que o comando CALL é seguido do nome da rotina que foi definido em algum momento anterior no script. Logo, a chamada só pode ser executada depois que o editor de scripts passou pela instrução Sub ... EndSub. Uma tentativa de execução da instrução CALL antes da definição da rotina resultará em uma mensagem de erro.

  Nota: O script do QlikView é sequencial e por isso a definição das rotinas deve ocorrer antes da chamada pela instrução CALL.

Dentro da rotina variáveis definidas em nível de script são testadas para determinar qual parte do código será executado. Portanto, antes da chamada da rotina <codeGravaQVD</code> as variáveis utilizadas pelas instruções internas devem ter sido nomeadas e atribuídas.

SET vGravaQVD     = 1;
SET vGravaTXT     = 1;
SET vLimpaMemoria = 1;

Uma última variável define para onde os arquivos devem ser gravados. Por isso a instrução SET deve ser posicionada antes da definição e chamada da rotina. A variável a seguir instrui o QlikView a salvar os arquivos em uma pasta localizada no caminho C:\ArquivosQVD.

SET vCaminhoDestino = 'C:\ArquivosQVD';


Executando a Rotina de Gravação de Arquivos

Como visto, para executar a rotina de gravação basta nomear a rotina a partir da instrução CALL seguido dos parâmetros que são esperados pela mesma. Assuma, por exemplo, que diversas tabelas em memória precisem de gravação em formato .QVD para serem utilizadas por um ou mais painéis no futuro. A relação das tabelas a serem gravadas pode ser inserida na última guia de scripts.

Call GravaQVD ('Procedimento_Fiscalizacao', 'Procedimento_Fiscalizacao');

Call GravaQVD ('Objeto_Fiscalizado', 'Objeto_Fiscalizado');

Call GravaQVD ('Irregularidade_Encontrada', 'Irregularidade_Encontrada');

Call GravaQVD ('Normas_Irregularidade', 'Normas_Irregularidade');

Call GravaQVD ('Decisão_Penalidade', 'Decisão_Penalidade');

Call GravaQVD ('Empresa', 'Empresa');

Call GravaQVD ('Termos_Ajuste_Conduta', 'Termos_Ajuste_Conduta');

Call GravaQVD ('TAC_Compromisso','TAC_Compromisso');

Call GravaQVD ('TAC_Compromisso_Historico','TAC_Compromisso_Historico');

Call GravaQVD ('Historico_Fiscalizacao','Historico_Fiscalizacao');


Ajustando o Caminho de Destino

Em qualquer momento que for necessário alterar o local onde os arquivos serão gravados, basta modificar a variável vCaminhoDestino no local definição, ou mesmo pela janela de variáveis na interface de usuário do QlikView Desktop.

SET vCaminhoDestino = 'D:\DadosFinais';

A rotina GravaQVD utiliza a variável vCaminhoDestino em dois pontos específicos, sendo o primeiro para gravar os arquivos em formato .QVD na pasta indicada e o segundo para a mesma operação em formato .TXT. O fragmento de código abaixo apresenta o local onde a variável é utilizada dentro da rotina GravaQVD.

...
STORE $(pTabela) INTO $(vCaminhoDestino)\$(pArquivo).QVD (QVD);
...

A instrução STORE é responsável por armazenar a tabela indicada em um local designado. Ao invés de simplesmente fixar o valor do caminho de destino dentro da rotina, a variável vCaminhoDestino é incluída no fragmento $(vCaminhoDestino), que instrui o QlikView a utilizar o conteúdo da variável para apontar para o destino em disco onde os arquivos devem ser gravados. Na prática, o QlikView estará executando a instrução abaixo (a título de explicação).

STORE $(pTabela) INTO D:\DadosFinais\$(pArquivo).QVD (QVD);

Assuma, por exemplo, que a tabela Fiscalizações_Planejadas esteja residente em memória e será gravada em disco por meio da rotina GravaQVD. A instrução CALL é definida dentro do script como uma das últimas operações a serem realizadas.

Call GravaQVD ('Fiscalizações_Planejadas', 'Fiscalizações_Planejadas');

Na prática, o QlikView executará a rotina substituindo os parâmetros pTabela e pArquivo pelo conteúdo Fiscalizações_Planejadas. Já a variável vCaminhoDestino será utlizada para definição do caminho de destino. Assim, a instrução a ser realizada será algo semelhante ao comando abaixo.

STORE Fiscalizações_Planejadas INTO D:\DadosFinais\Fiscalizações_Planejadas.QVD (QVD);


Configurando Opções de Execução

A rotina construída utiliza o comando IF para determinar se toda ou parte das instruções serão executadas. As variáveis de ambiente definidas pela instrução SET controlam a parte do código que será realizado. Quando vGravaQVD possui o valor 1 (um) atribuído, a rotina GravaQVD salva a tabela em memória por meio do comando STORE. Em algum momento do desenvolvimento de um dashboard, pode ser necessário avaliar o conteúdo das tabelas em memória sem perder tempo com a gravação em disco. Por isso, para não salvar o arquivo em formato .QVD basta ajustar a variável para um valor diferente de 1 (um), por exemplo, 0 (zero).

SET vGravaQVD = 0;

Esta configuração instrui o script a não gravar os arquivos .QVD em disco. O teste é realizado por meio da instrução IF.

If vGravaQVD = 1 Then
  Nota: A instrução IF possui a seguinte sintaxe básica: IF <condição> THEN <ação> ENDIF.

Da mesma forma, muitos clientes necessitam dos dados transformados a partir do QlikView para carga em outros sistemas legados ou mesmo bases de dados. No entanto, não há conectores nativos nas plataformas diversas para ler arquivos no formato .QVD. Uma boa alternativa é gerar os dados em um formato universal, como textual, que poderá ser lido pela enorme maioria das ferramentas de banco de dados e afins. A rotina GravaQVD está preparada para salvar os arquivos em formato .TXT na mesma pasta e com o mesmo nome dos arquivos .QVD. A variável vGravaTXT controla se a gravação deve ocorrer neste formato.

SET vGravaTXT = 0;

Quando configurado para o valor 0 (zero) a rotina não irá gravar arquivos em formato .TXT. Assim, é possível controlar quando a rotina deve gravar ou não arquivos neste formato. A instrução IF avalia o valor da variável para executar ou não o comando STORE.

If vGravaTXT = 1 Then

Por último, quando arquivos são gravados em disco para uso de outras aplicações QlikView, geralmente não são mais necessárias em memória, reduzindo o tamanho do arquivo .QVW que contém os scripts a serem executados. Por isso, a variável vLimpaMemoria é utilizada para determinar se haverá a execução do comando DROP Table, destinado a remover da memória as tabelas carregadas pelo comando LOAD ou SELECT. Quando configurado para 1 (um), a variável será testada pela instrução IF como verdadeira e, por isso, executará o comando de exclusão da tabela da memória. De outra forma, a tabela é persistida no próprio arquivo .QVW e em memória.

SET vLimpaMemoria = 0;

O teste sobre a variável define se o fragmento da rotina é ou não executado.

If vLimpaMemoria = 1 Then


Incrementando a Rotina GravaQVD

Com base na rotina elementar muitas outras opções podem ser criada e ajustadas. No exemplo original não há como instruir a rotina para remover uma única tabela da memória senão pela alteração da variável vLimpaMemoria entre as chamadas do comando CALL. Por exemplo, digamos que apenas uma das três tabelas abaixo deve ser removida da memória, mantendo as demais inalteradas. Na rotina original será necessário inserir o comando SET para alterar o valor da variável antes da execução.

Call GravaQVD ('Fiscalizações_Planejadas', 'Fiscalizações_Planejadas');
SET vLimpaMemoria = 0;
Call GravaQVD ('Situacao_Fiscalizações', 'Situacao_Fiscalizações');
SET vLimpaMemoria = 1;
Call GravaQVD ('Terminais', 'Terminais');

Embora eficaz, uma maneira inteligente de tornar a rotina auto suficiente se dá pela inclusão de um parâmetro que possa controlar quando uma tabela deve ou não ser eliminada da memória. Assim, a rotina pode ser ajustada para conter um parâmetro adicional, como no fragmento a seguir.

Sub GravaQVD (pTabela, pArquivo, pLimpaMemoria)

Para completar o ajuste da rotina, o fragmento de instrução dentro da GravaQVD que limpa a memória deve testar o conteúdo do parâmetro pLimpaMemoria e não mais a variável de ambiente vLimpaMemoria. Por isso, o script é ajustado.

De:

If vLimpaMemoria = 1 Then      // Note que o nome da variável original inicia-se com a letra v. 

Para

If pLimpaMemoria = 1 Then      // Observe que o parâmetro possui a letra inicial p. 

Com este ajuste, o comando CALL pode agora ser acionado informando se a tabela específica será ou não removida da memória. Utilizando o mesmo exemplo acima, a instrução é acionada no formato abaixo.

Call GravaQVD ('Fiscalizações_Planejadas', 'Fiscalizações_Planejadas', 0);

Call GravaQVD ('Situacao_Fiscalizações', 'Situacao_Fiscalizações', 1);

Call GravaQVD ('Terminais', 'Terminais', 0);

Da mesma forma, outros parâmetros podem ser criados para definir se a tabela em questão é gravada ou não e se o formato .TXT será um dos formatos de destino.



Funções e Instruções Utilizadas

  • SUB ... ENDSUB
  • IF ... ENDIF
  • CALL
  • STORE
  • SET
  • DROP TABLE


Envelope01.jpg
Procurando Algo? Fale Conosco!

Voltar | Índice de Artigos | Página Principal