Fala pessoal, beleza?
Essa semana vou passar um dica sobre como controlar sua aplicação de extração através de uma planilha em excel.
Lembra do ETL? Extração, Transformação e Leitura? Extração é a primeira etapa do processo e é responsável por consumir as informações e grava-las em QVDs.
Quero explicar certinho o que iremos propor aqui, pois esta é uma etapa que pode gerar confusão ao seu usuário!
O objetivo principal é criar uma planilha (ou tabela) em que você possa indicar quais serão os QVDs gerados na etapa de Extração. Na planilha poderemos indicar as tabelas, os campos, as regras de restrição, se é uma carga temporal, etc.
O que precisamos deixar MUITO claro é que adicionar uma nova tabela nesta planilha não fará com que uma nova informação apareça na aplicação final, ou seja, a nova tabela apenas vai gerar um novo QVD.
Quero deixar isso bem claro, pois já desenvolvi esse tipo de planilha em alguns clientes que queriam ter mais "autonomia" com determinadas regras de extração, porém essa autonomia é bastante limitada, pois novas tabelas não significam que teremos novas informações nos painéis - Não é porque adicionei a tabela de funcionários na planilha que, automaticamente, teremos um indicador de turnOver na aplicação final.
Parece bobeira, mas sempre que deixamos o usuário com algumas autonomias, precisamos EXPLICAR MUITO BEM até onde essa autonomia chega.
Existem muitas formas de como essa planilha pode ficar, o que quero deixar aqui é a minha forma de se fazer, mas pode ser que você tenha criado uma diferente que seja muito melhor (não deixe de compartilhar ou comentar comigo sobre as formas que vocês fazem, isso é muito importante!!).
A planilha vai fazer o controle das tabelas extraídas, porém não vai controlar qual DATABASE pertence e nem o diretório em que o QVD será gerado. Vamos imaginar que essa é uma dica inicial de como você poderá melhora-la ao adaptar ao seu ambiente.
A planilha que trabalharemos será composta pelas seguintes colunas:
Abaixo exemplos de preenchimento da tabela (para não restar dúvidas):
Na primeira linha temos a leitura de todos os campos da tabela cliente que será exportada para o qvd chamado Cliente.qvd;
Na segunda linha temos a leitura de quatro campos da tabela produto que sofre a redução de algumas categorias de produto e será exportado para o qvd chamado Produto.qvd;
Na terceira linha temos a leitura de todos os campos da tabela categoria_produto que será exportada para o qvd chamado Categoria_Produto.qvd, porém não será gerada devido ao preenchimento da coluna "Carregar" com o Não.
Na quarta linha temos uma query de faturamento que é composta por duas tabelas, item_nota_fiscal e nota_fiscal, da tabela nota_fiscal serão carregados todos os campos, porém da tabela item_nota_fiscal serão carregados apenas os campos valor e cod_produto. Essa query possui diversas regras condicionais e também sofrerá carga incremental através do campo dt_emissao. No fim, o QVD gerado será Faturamento_YYYYMM.qvd.
Em nosso exemplo poderemos escolher se a carga será ou não temporal, e na definição da aplicação a carga temporal será mensal ou seja, sempre trabalhará com informações pertencentes ao mesmo mês.
Em nossa aplicação a carga temporal sempre irá recarregar os dados do mês atual e do mês anterior.
Posso alterar isso? Pode, mas terá que alterar a programação.
Reforçando: Nosso extrator vai se conectar apenas a uma base de dados (banco de dados) para extrair as tabelas e querys descritas na planilha.Posso incluir uma planilha? Não, para isso você terá que alterar a programação.
Bom, entendemos como funciona cada coluna de nossa planilha e agora vamos entender como a nossa aplicação vai interpreta-la.Basicamente o preenchimento da planilha será dividido em quatro regras, são elas:
Como interpretamos cada uma das regras de acordo com o preenchimento das colunas?
Em primeiro lugar iremos carregar toda a planilha de configuração:
Feito isso, iremos criar uma rotina para percorrer todas as linhas dessa planilha e identificar cada campo da planilha através de uma variável:
As variáveis criadas serão:
Essa regra contempla as tabelas que: Não possuem condição e não são temporais.
A identificação da regra é realizada no IF, ou seja, a tabela precisa estar preenchida da seguinte forma:
O trecho de Select vai receber as variáveis que captaram os valores das planilhas, se olharmos a execução, ficaria mais ou menos assim:
A geração do QVD:
Essa regra contempla as tabelas que: Possuem condição e não são temporais.
A identificação da regra é realizada no IF, ou seja, a tabela precisa estar preenchida da seguinte forma:
O trecho de Select vai receber as variáveis que captaram os valores das planilhas, se olharmos a execução, ficaria mais ou menos assim:
Essa regra contempla as tabelas que: Possuem condição e são temporais.
A identificação da regra é realizada no IF, ou seja, a tabela precisa estar preenchida da seguinte forma:
O trecho de Select vai receber as variáveis que captaram os valores das planilhas, se olharmos a execução, ficaria mais ou menos assim:
Lembre-se que neste caso existe um FOR interno que vai gerar os dados do mês atual e do mês anterior em QVDs separados, conforme imagem abaixo:
Essa regra contempla as tabelas que: Possuem Carregar preenchido com Não.
Essa regra só existe parar gerar uma linha de informação no LOG através do Trace. Essa linha de LOG é importante na verificação de quais tabelas geraram ou não em determinada carga.
No exemplo ficou da seguinte forma:
Faça o download da planilha e da aplicação.
Essa é uma forma muito prática de passar o controle das extrações das tabelas para o nosso cliente. Caso ele precise regerar alguma tabela e outras não ele mesmo conseguirá configurar isso na planilha.
Eu gosto de utilizar essa planilha devido a praticidade que temos para incluir novas tabelas em nossa carga, mas sempre deixe bem claro que incluir uma tabela na planilha não quer dizer que essa informação aparecerá no painel final (como uma mágica rsrs)!
É possível complementar essa planilha indicando qual o banco de dados cada tabela pertence e até incluir leitura de planilhas em excel, basta alterar um pouco o código! Depois posso fazer um post para complementar isso!
Um grande abraço pessoal e até a próxima semana (é sério!! rsrs! Vai chegando o final do ano e parece que o tempo fica mais curto, mas estou me policiando para não deixar de postar!!)
Muito legal a explicação, parabéns!!
Bom demais.
Grande mestre Yuri, qual a a base original?
Não teria aí um access com as estruturas?
Você fala a base de dados que utilizei?
No meu caso eu tenho um SQL local instalado em que fiz os testes
Isso. Se estivesse num mdb daria pra rodar.
Vou criar um aqui similar.
Vlw
No MDB vai funcionar da mesma forma, talvez o que mude é a forma de chamar a variável do Qlik na condicional WHERE.
Depois que criar comente aqui para vermos seu exemplo
Criei aqui mas acontece algo interessante:
Grava os qvds, mas mesmo eu tendo retirados os drops do script só gera a base de clientes. O peek não está funcionando mas ainda não entendi a razão.
Já quebrei a cabeça mas ainda não resolvi.
Você que publicar com a base?
Sensacional o conteúdo, parabéns e muito obrigado!
Já achei o erro!
A tabela que estou chamando no Peek é a TmpTabelas, porém essa tabela não existe, o nome correto é Tabelas.
Depois vou corrigir o post!
Obrigado Luciano!!
Show.
Arrumei aqui tb. Funcionando com perfeição.