Unlock a world of possibilities! Login now and discover the exclusive benefits awaiting you.
Boa tarde!
Tenho um qvd que carrega arquivos de um diretório. O arquivo é acrescido dia após dia de informações. Preciso de um script que faça o carregamento apenas das informações do dia. Alguma ajuda? No aguardo, obrigado.
Acredito que deva servir
SET PATHCSV=D:\tmp; // Onde estao os arquivos
SET QVDIncremental=D:\tmp\QvdIncremental.qvd; // QVD
LET MesCorrente=Date(Today(),'YYYYMM');
For each file in FileList('$(PATHCSV)\Bilhete*.csv') // Verifica todos os arquivos texto
Let Arq = SubField(SubField(file,'\',-1),'.',1);
If file like '*$(MesCorrente)*' then // Mes corrente é sempre lido
Tab:load *,FileBaseName() as Arquivo FROM [$(file)](txt, utf8, embedded labels, delimiter is ',', msq);
If not isnull(QvdNoOfRecords('$(QVDIncremental)')) then // Existe o QVD?
concatenate(Tab) load * from [$(QVDIncremental)](qvd) where Arquivo <> '$(Arq)';
Endif
Store Tab into [$(QVDIncremental)](qvd);
else // Meses anteriores somente são lidos se não existirem
If isnull(QvdNoOfRecords('$(QVDIncremental)')) then // Não existe o QVD, então lê o arquivo
Tab:LOAD *,FileBaseName() as Arquivo FROM [$(file)](txt, utf8, embedded labels, delimiter is ',', msq);
else // Verificar se o mes processado esta no qvd
c: noconcatenate first 1 load * from [$(QVDIncremental)](qvd) where Arquivo = '$(Arq)';
If NoOfRows('c') = 0 Then // Não estava então precisa ler
Tab:noconcatenate load *,FileBaseName() as Arquivo FROM [$(file)](txt, utf8, embedded labels, delimiter is ',', msq);
concatenate(Tab) load * from [$(QVDIncremental)](qvd) where Arquivo <> FileBaseName('$(file)');
end if
drop table c;
end if
end if
If TableNumber('Tab') >= 0 then
If NoOfRows('Tab') > 0 then
Store Tab into [$(QVDIncremental)](qvd);
Drop Table Tab;
end if
End if
Next
Poderia dar mais detalhes? Como obter ajuda? Leia antes de postar
Sim. É o seguinte, tenho um diretório com os seguintes arquivos:
XPTO_201701, XPTO_201702 e XPTO_201703. Este último refere-se ao mês de Março e todo dia é incrementado. Preciso criar um script que faça a leitura de todos os arquivos e depois passe a fazer apenas do último ou seja, Março.
Incrementado você diz é um novo arquivo na pasta com a data no nome do arquivo ou novas linhas são adicionadas a um arquivo?
valerioms, boa tarde.
O seguinte trecho de código, retirei e alterei diretamente do site Help da Qlik...
Se o que você precisa é carregar apenas os dados de hoje da sua fonte de dados e depois anexar apenas os dados de hoje ao seu qvd, pode tentar mais ou menos o seguinte:
#Gerar uma variável que carregara a data de hoje:
LET vHoje = Today();
#Carregar os dados de hoje
SuaTabela:
LOAD * FROM SuaBase WHERE [SeuCampoData] = '$(vHoje)';
#Unir os dados carregados com os antigos:
Concatenate LOAD * FROM SeuArquivo.QVD;
#Gerar um novo QVD atualizado:
STORE 'SuaTabela' INTO SeuArquivo.QVD;
Basicamente é isso, o modelo mais simples de carga incremental.
Caso precise de mais modelos, pesquise por 'carga incremental qlikview' no goole e entre no link da Help Qlikview para ver outros modelos e exemplos.
Espero que lhe seja útil.
Att,
Novas linhas são adicionadas a um arquivo.
Valério pelo que percebi, você tem um arquivo para cada dia...
Pode aplicar o ScanFolder (função que varre um ou mais diretórios e carrega os arquivos de forma 'automática') no seu diretório e na sequência gerar um QVD incremental (usando basicamente o que eu mencionei acima), mas antes de tudo, segue o código default do ScanFolder - adapte ao que você precisa:
Corpo da função:
Set vConcatenate = ;
sub ScanFolder(Root)
for each FileExtension in 'csv'
for each FoundFile in filelist( Root & '\*.' & FileExtension)
FileList:
$(vConcatenate)
LOAD *, '$(FoundFile)' as SourceFile
FROM [$(FoundFile)] (txt, codepage is 1252, embedded labels, delimiter is ',', msq, header is 2 lines);
Set vConcatenate = Concatenate;
next FoundFile
next FileExtension
for each SubDirectory in dirlist( Root & '\*' )
call ScanFolder(SubDirectory)
next SubDirectory
end sub
Chamada da função no seu diretório:
Call ScanFolder('C:\Users\hic\Documents\2012\Work\QV Apps\DoDir') ;
Não Tiago. Eu tenho um arquivo que é acrescido de linhas diariamente. No exemplo dado eu tenho o arquivo XPTO_201703.xls que é do mês de Março.
Então se for assim, meu primeiro comentário te satisfaz?
Penso que sim. Vou executar e respondo. Por enquanto obrigado.