Conexão Direta (Online)

De Qknow
Ir para: navegação, pesquisa


This post is available in English. Click on flag at side.

EnglishFlag.jpg


Introdução

Por padrão, sempre que o QlikView faz a carga dos registros e tabelas lidas de um banco de dados ou arquivo persistido em disco, armazena os dados em memória onde os processamentos das requisições do usuário são calculados e respondidos. O modelo In-Memory do QlikView permite compactar e carregar uma grande quantidade de registros para atender as demandas por diferentes visões de maneira rápida e associativa. Porém, em algumas circunstâncias os requisitos de negócio podem exigir que a visualização se dê sempre aos dados mais recentemente atualizados no database.

Realizar inúmeros processos de recarga pode ser uma opção para ter os painéis atualizados o mais próximo possível das tabelas carregadas nos databases em uso. Porém, o tempo de processamento e o volume de dados podem impactar severamente nesta opção. Por isso, o QlikView dispõe do recurso chamado de Direct Discovery, onde parte dos dados são carregados em memória e associados aos dados que continuarão nas tabelas de origem.

Este artigo apresenta as instruções necessárias em nível de script de carga para que seja possível utilizar sempre os valores mais recentes dos registros existentes nas tabelas utilizadas para construção de um dashboard. Com este recurso os usuários de negócio podem combinar grandes fontes de dados com o modelo associativo do QlikView, sem grandes impactos sobre a escalabilidade do ambiente.

O Direct Discovery é, portanto, a habilidade de combinar o modelo associativo do QlikView com dados em memória e consultas SQL dinâmicas onde nem todos os dados são lidos para a memória do Qlik, passando as interações dos usuários diretamente para as fontes de dados. As capacidades de seleção e análise do QlikView são mantidas enquanto se obtém sempre os dados mais recentes das tabelas utilizadas. O Direct Discovery é implementado em nível de script por meio da instrução DIRECT QUERY que substitui o comando SELECT tradicional. A sintaxe da instrução é:

DIRECT QUERY
   DIMENSION
      lista_de_campos_de_dimensões
   MEASURE
      lista_de_campos_para_expressoes
   DETAIL
      lista_de_campos
   FROM
      tabela_origem

Instrução Direct Query

O processo de conexão com fontes de dados relacionais tradicionais se dá pelo mesmo procedimento costumeiramente realizado. A título de exemplo, a conexão apresentada a seguir faz uso de um arquivo .MDB da plataforma Microsoft Access, contendo algumas tabelas de dados comerciais. É possível notar que não há qualquer diferença no processo de conexão padrão.

ODBC CONNECT32 TO [QWT;DBQ=Q:\Dados\QWT.mdb];

Após a conexão ter sido realizada com sucesso, as instruções a seguir serão utilizadas para informar ao QlikView que parte dos dados deve ser carregado em memória enquanto o restante deve ser lido da tabela de origem sempre que o usuário realizar uma operação de filtro ou seleção sobre os dados. Para isso, o comando DIRECT QUERY é inserido como no exemplo a seguir.

DIRECT QUERY 
     DIMENSION
      Categoria		As CategoriaID,
      FornecedorID,
      ProdutoID     
    MEASURE 
      PrecoUnitario,
      CustoUnitario,
      QuantidadePorUnidade,
      UnidadesEmEstoque,
      UnidadesPorPedidos
   DETAIL
      NomeProduto
   FROM Produtos;
DirectQuery1.png

Com o comando acima o QlikView carregará todos os campos considerados dimensões para a memória, como faria no modelo tradicional. Já os campos considerados medidas mencionados no argumetno MEASURE serão mantidos na tabela de origem. Ou seja, não serão carregados em memória e serão obtidos sempre que o usuário interagir com o painel. No visualizador de tabelas acessado pelo atalho CTRL + T os campos são exibidos com o texto Mensure ao lado, indicando que são aqueles que serão obtidos diretamente da fonte de dados.

Quando o comando DIRECT QUERY é utilizado, o atalho Visualizar fica desabilitado quando um clique com o botão da direita é realizado sobre a tabela. Ou seja, como os dados não foram carregados para o modelo em memória do QlikView, não é possível fazer uma pre-visualização dos dados no visualizador de tabelas.

Outra perceptível diferença ocorre quando da criação de objetos gráficos uma vez que os campos de medida que foram deixados nas fontes de origem não são exibidos na lista de campos disponíveis. Porém, mesmo não presentes em memória, estes campos podem ser referenciados pelas funções de agregação. Por isso, é possível criar um novo gráfico somando as unidades em estoque por uma das dimensões, por exemplo, CategoriaID.


Dimension 1.PNG


DirectQuery2.png

Ainda que os campos de medida não tenham sido carregados em memória, estes são vistos e referenciados quando as expressões são construídas para um gráfico. Por isso, é possível entrar com uma fórmula que referencia os campos que permanecem nas tabelas do banco dentro do editor, como referenciado na figura ao lado. Com as dimensões carregadas em memória e as expressões calculadas nos respectivos bancos o QlikView permite que elementos gráficos reflitam os valores mais atuais das tabelas consultadas, enquanto correlaciona os registros obtidos em cada interação do usuário com aqueles já carregados em memória. Essa combinação reduz abruptamente os impactos sobre as bases consultadas, pois somente os valores necessários são obtidos.

Na prática, cada vez que o usuário interage com campos que são medidas calculadas pelo Direct Discovery, o QlikView monta uma instrução SQL automaticamente e recupera os registros que são necessários a operação, mas obviamente, somente aqueles que correspondem as medidas, uma vez que as dimensões estão em memória. Com o modelo In-Memory outras tabelas podem ser carregadas e o QlikView fará a associação como se faz em qualquer outro processo de carga.

Categorias:
LOAD CategoriaID, 
     Descricao, 
     NomeCategoria
FROM [Categorias.xls] (biff, embedded labels, table is Categorias$);
DirectQuery3.png

Com a instrução LOAD acima a tabela Categoria é lida a partir de um arquivo Excel e carregada integralmente para a memória do QlikView. Nenhuma operação Discovery está envolvida neste processo. Porém, o modelo associativo continua a funcionar ligando as tabelas pelo campo CategoriaID. No visualizador de tabelas ambas são apresentadas e ligadas pelo campo em comum.

Como o modelo associativo continua funcionando normalmente pelos campos em comum, basta adicionar a dimensão que se deseja a um gráfico (ex. barras) com uma instrução (medida) a partir dos campos listados no parâmetro MEASURE. Na prática, o QlikView irá gerar a instrução SELECT para o banco de dados utilizando a medida informada na expressão do gráfico e o comando GROUP BY correspondente a dimensão utilizada. Claro que esta operação é transparente ao usuário.


Algumas considerações são importantes para utilizar os campos listados no parâmetro DIMENSION:

  • Os campos podem ser utilizados em dimensões de gráficos.
  • Como demonstrado, podem fazer a ligação entre tabelas In-Memory e diretas.
  • Podem ser utilizadas como filtros em objetos do tipo Lista.
Nota: Lembre-se de que os campos de dimensão são carregados para a memória. Portanto, só receberão novos valores se a aplicação
      for recarregada (RELOAD).

Elaborando Gráficos com Direct Discovery

DirectQuery4.png

Com exceção dos campos de medidas que são carregados apenas nas expressões e fórmulas, as dimensões das tabelas utilizando Direct Discovery aparecem normalmente para seleção quando um novo elemento gráfico é criado. Em cada interação o QlikView reage criando a consulta SQL correspondente e executando o comando na fonte de dados externa. O resultado é apresentado no objeto que faz uso dos campos definidos pela instrução DIRECT QUERY segundo as seguintes instruções:

  • Objetos do tipo lista podem utilizar campos definidos no parâmetro DETAILS do DIRECT QUERY.
  • Sempre que uma lista for selecionada uma instrução é emitida para a tabela de origem.
  • Campos listados no parâmetro DIMENSION podem ser utilizados em listas e elementos gráficos.
  • Nem todas as funções QlikView são suportadas pelo Direct Query.
  • Configure a variável DirectIdentifierQuoteChar para conexões com MS Access ou MySQL.

O gráfico ao lado exibe soma da quantidade de produtos em estoque pela categoria de produtos. O campo incluído na expressão faz parte do DIRECT QUERY enquanto o campo de dimensão faz parte da segunda carga que incluiu todos os dados em memória via comando LOAD a partir de um arquivo Excel. Devido as variações de instruções SQL existentes em diferentes plataformas, algumas características não são suportadas no DIRECT DISCOVERY, embora algumas possam ser implementadas no decorrer da evolução do produto. Este artigo foi redigido considerando a versão 11 SR8 do QlikView, onde as seguintes restrições estão presentes:

  • SetAnalysis não operam sobre campos com Direct Discovery.
  • Dimensões calculadas não são suportadas.
  • Somente o conteúdo dos campos do parâmetro DIMENSION são exibidos no objecto de pesquisa.
  • Redução de dados é limitada e não impede a visualização dos dados do Direct Discovery.
  • O sistema de nomeação de tabelas do QlikView não se aplica a este cenário.

Embora o Microsoft Access utilizado no exemplo possa ser utilizado com o Direct Discovery, é importante destacar que devido as características de tratamento de alguns caracteres, se faz necessário incluir a seguinte instrução no início do script de carga:

 SET DirectIdentifierQuoteChar='``';

Resumo Técnico do Direct Discovery

Alguns aspectos técnicos são importantes conhecer quando o Direct Discovery é utilizado. No exemplo de script apresentado nas seções anteriores, o QlikView não executará um SELECT tradicional com todos os campos no banco de dados. Ao invés, executará instruções menores obtendo cada campo de dimensão por meio de um SELECT individual e muito mais leve.

SELECT DISTINCT Categoria FROM Produtos
SELECT DISTINCT FornecedorID FROM Produtos
SELECT DISTINCT ProdutoID FROM Produtos

No caso dos campos listados em MEASURE há uma função que transforma a chamada do campo em uma instrução nativa da base em uso. Ou seja, se for necessário utilizar um comando específico de um certo database, a função NATIVE pode ser utilizada, gerando um comando semelhante ao descrito abaixo. Em ambos os casos as funções Year e Month correspondem àquelas disponíveis na plataforma acessada e não as mesmas funções do QlikView.

NATIVE('Year([OrderDate])')  As OrderYear
NATIVE('month([OrderDate])') As OrderMonth

Múltiplas operações DIRECT QUERY podem ser realizadas no mesmo projeto, mas um gráfico só poderá contar com medidas obtidas de uma única instrução. Como alternativa, operações de JOIN em Tabelas e Views são admitidas, reunindo os campos necessários em um único comando.

Os recursos apresentados neste artigo não são comercializados separadamente do QlikView e são suportados a partir da versão 11.2. Nenhum produto adicional é necessário, apenas o comando utilizado de maneira adequada. Em gráficos utilizando este recurso as agregações ocorrem em nível de banco de dados.

No ambiente servidor, o cache de dados calculados é mantido para todas as operações realizadas pelo usuário em um determinado painel. Mesmo quando não há nenhum novo usuário conectado, os cálculos previamente calculados são mantidos em cache para fins de atendimento a novas consultas que possam ocorrer no futuro. Porém, com o Direct Discovery é possível informar ao QlikView Server que mantenha os valores calculados por algum tempo no cache. Este procedimento é realizado atribuindo o tempo em segundos a variável DirectCacheSeconds, como no exemplo abaixo.

SET DirectCacheSeconds= 15; 

Para maiores informações do funcionamento do cache do QlikView, leia o artigo sobre uso dos recursos computacionais no QlikView. Os tipos de conexão aceitos com o Direct Discovery são:

  • Conectores personalizados como o SAP SQL Connector.
  • ODBC/OLEDB, incluindo SQL Server, Teradata e Oracle.
  • SAP HANA, Cloudera/MapR/Horton Works Hadoop, HP Vertica e ParStream via ODBC.
  • Tanto conexões 32 quanto 64 bits são suportadas, dependendo da disponibilidade do driver de conexão.
  • Todos os usuários utilizarão a mesma conexão do painel para a base de dados, de forma que redução não é suportada.

Como a utilização do Direct Discovery suporta múltiplas instruções diretas, é necessário configurar a variável DirectConnectionMax para o número máximo de execuções paralelas que podem ocorrer no database. O valor padrão é 1.

SET DirectConnectionMax=10;

Outros variáveis controlam os aspectos de interpretação dos dados retornados, incluindo, mas não limitando a:

  • DirectDateFormat controla o formato de datas enviadas ao banco de dados como critério.
  • DirectTimestampFormat controla o formato da data/hora enviada ao banco de dados.
  • DirectTimeFormat controla o formato da hora enviada ao banco de dados.
  • DirectDistinctSupport controla se insere ou não a palavra DISTINCT durante as operações de SELECT.


Assuntos Relacionados


Outros Assuntos


Envelope01.jpg
Procurando Algo? Fale Conosco!

Voltar | Página Principal