Unlock a world of possibilities! Login now and discover the exclusive benefits awaiting you.
Pessoal, boa tarde!
Estou trabalhando com as bases de compras, vendas e estoque na empresa em que trabalho. Já criei varias visoes, extratores, etc. No entanto, os dados vao continuar chegando, e como a quantidade de dados ja esta ultrapassando os 80 milhoes de registros, gostaria de saber como posso acrescentar apenas um mês nos arquivos QVD's que possuo. Uma vez que recebo todos os meses as bases tanto em excel como em .txt.
Resumindo, como acrescentar os meses (informaçoes) em arquivos QVDs que já existem, sem ter que recarregar desde o primeiro mês?
Abraço.
João,
Após ler a sua primeira pergunta, achei melhor escrever mais um post, talvez lhe ajude.
Vejamos, você recebe arquivos com frequencia, os quais são Excel e TXT, no exemplo que você postou, existe um arquivo com várias planilhas, que até já postei o uso do FOR EACH para lhe auxiliar, porém, se houver a posibilidade de fazer o que vou descrever abaixo, vai facilitar muito a chegada desses arquivos.
Crie uma pasta onde você colocará os arquivos que chegam no seguinte padrão: (caso seja possível já gere ou peças os arquivos sempre no mesmo padrão, com apenas uma planilha interna com nome de Plan1 mesmo, ou outro, desde que seja sempre o mesmo nome da planilha)
GRD - BD ESTOQUE LOJAS E CD OFICIAL - 2012JANEIRO.xlsx
GRD - BD ESTOQUE LOJAS E CD OFICIAL - 2012FEVEREIRO.xlsx
GRD - BD ESTOQUE LOJAS E CD OFICIAL - 2012MARÇO.xlsx
GRD - BD ESTOQUE LOJAS E CD OFICIAL - 2012ABRIL.xlsx
...
GRD - BD VENDA - 2012JANEIRO.txt
GRD - BD VENDA - 2012FEVEREIRO.txt
Com isso feito, no QlikView, seu scritp vai ficar:
Estoque:
LOAD ... FROM [(caminho dos arquivos)\GRD - DB ESTOQUE LOJAS E CD OFICIAL - *.xlsx]
Vendas:
LOAD ... FROM [(caminho dos arquivos)\GRD - DB VENDAS - *.txt]
STORE Estoque INTO (caminho de destino)\Estoque.qvd (qvd);
STORE Vendas INTO (caminho de destino)\Vendas.qvd (qvd);
Com isso, basta colocar o novo arquivo na mesma pasta, com o mesmo padrão e o QV vai fazer o LOAD de tudo e gerar o QVD.
Como o volume de dados pode ser gigantesco, entra então os passos para carga incremental, onde você deve primeiro carregar o QVD, caregar os arquivos onde um campo chave não esteja do QVD ainda e só então fazer o STORE dos dados outra vez.
Assim o processo fica bem automático.
Grande abraço, espero que eu tenha conseguido esclarecer bem a sua dúvida.
*** Se foi útil, não esqueça de marcar como resposta/ajudou para também colaborar com toda a comunidade a esclarecer as dúvidas. ***
Olá João,
Este controle é bem simples, você pode simplesmente carregar o arquivo QVD salvo anteriormente filtrando na cláusula WHERE somente os períodos anteriores (Ex: WHERE Mês <> $(vMês), supondo a variável vMês sendo 10 -> período em aberto) e concatenar com a carga atual que é exclusiva do período em aberto, aí você armazena novamente no mesmo QVD. Segue um código de exemplo:
DESPESA:
SQL SELECT * FROM ORC_DESPESA WHERE ANO = $(vCtrCarga_Incremental_Ano);
CONCATENATE(DESPESA)
LOAD DESPESA_ANO,
UNIDADE_PK,
CRESPONS_PK,
GRPCONTA_PK,
PERIODO_COD,
VLR_DESP_REAL,
VLR_DESP_META,
VLR_DESP_PROJ
FROM $(QVDPath)\ORC_DESPESA.qvd(qvd)
WHERE DESPESA_ANO <> $(vCtrCarga_Incremental_Ano) ;
STORE DESPESA INTO $(QVDPath)\ORC_DESPESA.qvd;
Cesar,
Tenho uma estrutura que importa o arquivo em excel, concatena todos os arquivos e depois eu gero um QVD. Seguindo o modelo/exemplo que voce criou. Eu teria que carregar esse qvd e concatenar com os meses que forem entrando. E isso?
Segue codigo:
LOAD PLATAFORMA,
PERÍODO,
TIPO_FILIAL,
FILIAL,
LINHA,
MIX,
FABRICANTE,
COD_PRODUTO,
PRODUTO,
QTD_ESTOQUE,
VALOR_ESTOQUE_UNITARIO,
VALOR_ESTOQUE
FROM
(
LOAD PLATAFORMA,
PERÍODO,
TIPO_FILIAL,
FILIAL,
LINHA,
MIX,
FABRICANTE,
COD_PRODUTO,
PRODUTO,
QTD_ESTOQUE,
VALOR_ESTOQUE_UNITARIO,
VALOR_ESTOQUE
FROM
(
LOAD PLATAFORMA,
PERÍODO,
TIPO_FILIAL,
FILIAL,
LINHA,
MIX,
FABRICANTE,
COD_PRODUTO,
PRODUTO,
QTD_ESTOQUE,
VALOR_ESTOQUE_UNITARIO,
VALOR_ESTOQUE
FROM
(
LOAD PLATAFORMA,
PERÍODO,
TIPO_FILIAL,
FILIAL,
LINHA,
MIX,
FABRICANTE,
COD_PRODUTO,
PRODUTO,
QTD_ESTOQUE,
VALOR_ESTOQUE_UNITARIO,
VALOR_ESTOQUE
FROM
(
LOAD PLATAFORMA,
PERÍODO,
TIPO_FILIAL,
FILIAL,
LINHA,
MIX,
FABRICANTE,
COD_PRODUTO,
PRODUTO,
QTD_ESTOQUE,
VALOR_ESTOQUE_UNITARIO,
VALOR_ESTOQUE
FROM
(
LOAD PLATAFORMA,
PERÍODO,
TIPO_FILIAL,
FILIAL,
LINHA,
MIX,
FABRICANTE,
COD_PRODUTO,
PRODUTO,
QTD_ESTOQUE,
VALOR_ESTOQUE_UNITARIO,
VALOR_ESTOQUE
FROM
(
LOAD PLATAFORMA,
PERÍODO,
TIPO_FILIAL,
FILIAL,
LINHA,
MIX,
FABRICANTE,
COD_PRODUTO,
PRODUTO,
QTD_ESTOQUE,
VALOR_ESTOQUE_UNITARIO,
VALOR_ESTOQUE
FROM
(
LOAD PLATAFORMA,
PERÍODO,
TIPO_FILIAL,
FILIAL,
LINHA,
MIX,
FABRICANTE,
COD_PRODUTO,
PRODUTO,
QTD_ESTOQUE,
VALOR_ESTOQUE_UNITARIO,
VALOR_ESTOQUE
FROM
(
STORE [BD EST GRD JANEIRO] INTO C:\Users\joao.silva.BRPH\Desktop\QLIK\Base Vendas_Estoque Qlik\GRD_ESTOQUE.qvd;
João,
Creio que é mais simples gerar um QVD para cada pasta da planilha, já que cada uma delas representa a posição do estoque no fim do mês e que não vai mudar mais. Desta forma terás no diretório varios QVDs como o exemplo a seguir:
GRD_ESTOQUE_2012_01.QVD
GRD_ESTOQUE_2012_02.QVD
GRD_ESTOQUE_2012_03.QVD
GRD_ESTOQUE_2012_04.QVD
GRD_ESTOQUE_2012_05.QVD
GRD_ESTOQUE_2012_06.QVD
GRD_ESTOQUE_2012_07.QVD
GRD_ESTOQUE_2012_08.QVD
Na hora de de ler os QVDS, use o comando Load * from GRD_ESTOQUE_*.QVD para ler todos os QVDs gerados de uma unica vez.
Abraço,
Pablo Labbe
Consultor Qlikview
www.visiongi.com.br
Olá João,
Complementando a dica do Pablo e a do Cesar, pelo que vi no seu código, sugiro que faça uso do FOR EACH.
FOR Each Planilha in '[BD EST GRD JANEIRO]','[BD EST GRD FEVEREIRO]','[BD ES...
Planilhas:
LOAD PLATAFORMA,
PERÍODO,
TIPO_FILIAL,
FILIAL,
LINHA,
MIX,
FABRICANTE,
COD_PRODUTO,
PRODUTO,
QTD_ESTOQUE,
VALOR_ESTOQUE_UNITARIO,
VALOR_ESTOQUE
FROM
(ooxml, embedded labels, table is $(Planilha));
NEXT;
João,
Após ler a sua primeira pergunta, achei melhor escrever mais um post, talvez lhe ajude.
Vejamos, você recebe arquivos com frequencia, os quais são Excel e TXT, no exemplo que você postou, existe um arquivo com várias planilhas, que até já postei o uso do FOR EACH para lhe auxiliar, porém, se houver a posibilidade de fazer o que vou descrever abaixo, vai facilitar muito a chegada desses arquivos.
Crie uma pasta onde você colocará os arquivos que chegam no seguinte padrão: (caso seja possível já gere ou peças os arquivos sempre no mesmo padrão, com apenas uma planilha interna com nome de Plan1 mesmo, ou outro, desde que seja sempre o mesmo nome da planilha)
GRD - BD ESTOQUE LOJAS E CD OFICIAL - 2012JANEIRO.xlsx
GRD - BD ESTOQUE LOJAS E CD OFICIAL - 2012FEVEREIRO.xlsx
GRD - BD ESTOQUE LOJAS E CD OFICIAL - 2012MARÇO.xlsx
GRD - BD ESTOQUE LOJAS E CD OFICIAL - 2012ABRIL.xlsx
...
GRD - BD VENDA - 2012JANEIRO.txt
GRD - BD VENDA - 2012FEVEREIRO.txt
Com isso feito, no QlikView, seu scritp vai ficar:
Estoque:
LOAD ... FROM [(caminho dos arquivos)\GRD - DB ESTOQUE LOJAS E CD OFICIAL - *.xlsx]
Vendas:
LOAD ... FROM [(caminho dos arquivos)\GRD - DB VENDAS - *.txt]
STORE Estoque INTO (caminho de destino)\Estoque.qvd (qvd);
STORE Vendas INTO (caminho de destino)\Vendas.qvd (qvd);
Com isso, basta colocar o novo arquivo na mesma pasta, com o mesmo padrão e o QV vai fazer o LOAD de tudo e gerar o QVD.
Como o volume de dados pode ser gigantesco, entra então os passos para carga incremental, onde você deve primeiro carregar o QVD, caregar os arquivos onde um campo chave não esteja do QVD ainda e só então fazer o STORE dos dados outra vez.
Assim o processo fica bem automático.
Grande abraço, espero que eu tenha conseguido esclarecer bem a sua dúvida.
*** Se foi útil, não esqueça de marcar como resposta/ajudou para também colaborar com toda a comunidade a esclarecer as dúvidas. ***
Cesar, funcionou legal.
Muito obrigado mesmo.
Pablo,
Nao tinha pensado nisso.
Velew pela dica.
Aderlan,
Consegui fazer como sugerido por voce.
Coloquei essa mesma estrutura para todos os arquivos que trabalho.
Obrigado.
Pessoal,
Consegui fazer rodar com as dicas dadas por todos. Cesar, Aderlan e Pablo.
Agora e so escolher a melhor estrutura que se enquadra para aquilo que preciso.
Muito obrigado a todos.