Skip to main content
Announcements
Have questions about Qlik Connect? Join us live on April 10th, at 11 AM ET: SIGN UP NOW
cancel
Showing results for 
Search instead for 
Did you mean: 
Not applicable

Ler varios arquivos de uma pasta

Bom dia!

Preciso ler vários arquivos XML e XLS de uma pasta.

Exemplo:

1.xml

2.xml

3.xml

Os arquivos possuem as mesmas colunas mas esta carregando apenas o primeiro arquivo fiz um teste excluindo o primeiro aí ele passa a carrega o primeiro encontrado.

Coloquei conforme exemplo abaixo e não funcionou

FROM [XML_arquivos\*.xml] (XmlSimple, Table is [mensagemTISS]);

10 Replies
nicolett_yuri

Carlos, a sintaxe é essa mesmo, utilizar o caractere asterisco para ler vários arquivos (ou então por FOR). O que você precisa levar em consideração são os campos que estão sendo carregados.

Para facilitar, consegue postar o script que esta utilizando e se possível os arquivos xml também?

Not applicable
Author

Bom dia!

Não consigo postar as informações não são informações de teste estou tratando arquivos de produção. Tenho informações confidenciais

nicolett_yuri

Ok, mas pelo menos o script será necessário para entender o erro que esta ocorrendo

Not applicable
Author

XMLSUL:
LOAD quantidadeExecutada,
valorProcessado,
[procedimento/codigo] as codigo,
[procedimento/tipoTabela] as tipoTabela,
[procedimento/descricao] as descricao,
%Key_dadosGuia_932648AE386CACC8   // Key to parent table: mensagemTISS/operadoraParaPrestador/demonstrativosRetorno/demonstrativoAnaliseConta/fatura/dadosFatura/lote/dadosLote/guia/dadosGuia
FROM [XML TESTE\*.xml] (XmlSimple, Table is [mensagemTISS/operadoraParaPrestador/demonstrativosRetorno/demonstrativoAnaliseConta/fatura/dadosFatura/lote/dadosLote/guia/dadosGuia/procedimentos/dadosProcedimento]);

Left Join(XMLSUL)
LOAD numeroGuiaPrestador,
dataRealizacao,
%Key_demonstrativoAnaliseConta_C282603095E315F3// Key to parent table: mensagemTISS/operadoraParaPrestador/demonstrativosRetorno/demonstrativoAnaliseConta
   %Key_dadosGuia_932648AE386CACC8   // Key for this table: mensagemTISS/operadoraParaPrestador/demonstrativosRetorno/demonstrativoAnaliseConta/fatura/dadosFatura/lote/dadosLote/guia/dadosGuia
FROM [XML TESTE\*.xml] (XmlSimple, Table is [mensagemTISS/operadoraParaPrestador/demonstrativosRetorno/demonstrativoAnaliseConta/fatura/dadosFatura/lote/dadosLote/guia/dadosGuia]);

Left Join(XMLSUL)
LOAD valorProcessadoGeral,
valorLiberadoGeral,
valorGlosaGeral,
[cabecalhoDemonstrativo/dataEmissao] as dataEmissao,
[identificacaoFontePagadora/operadoraRegulada/registroANS] as [operadoraRegulada/registroANS],
[identificacaoFontePagadora/operadoraRegulada/CNPJ] as CNPJ,
[identificacaoFontePagadora/operadoraRegulada/nomeOperadora] as nomeOperadora,
%Key_mensagemTISS_AE9B42D256CCB348// Key to parent table: mensagemTISS
   %Key_demonstrativoAnaliseConta_C282603095E315F3   // Key for this table: mensagemTISS/operadoraParaPrestador/demonstrativosRetorno/demonstrativoAnaliseConta
FROM [XML TESTE\*.xml] (XmlSimple, Table is [mensagemTISS/operadoraParaPrestador/demonstrativosRetorno/demonstrativoAnaliseConta]);

Left Join(XMLSUL)
LOAD [xmlns:ansTISS],
[cabecalho/identificacaoTransacao/sequencialTransacao] as sequencialTransacao,
[cabecalho/identificacaoTransacao/dataRegistroTransacao] as dataRegistroTransacao,
[cabecalho/identificacaoTransacao/horaRegistroTransacao] as horaRegistroTransacao,
%Key_mensagemTISS_AE9B42D256CCB348// Key for this table: mensagemTISS
   FileBaseName () AS Competencia
FROM [XML TESTE\*.xml] (XmlSimple, Table is [mensagemTISS]);

Anonymous
Not applicable
Author

Olá Carlos!

Posso estar errado, mas eu acredito que o Qlikview não está entendendo o que você quer fazer, devido aos Joins.

Eu acho que você vai ter que fazer um For para ler todos os arquivos, e ir concatenando-os. Depois então você usar este "tabelão" em um Join.

nicolett_yuri

Seu erro esta na utilização do JOIN na leitura de múltiplos arquivos.

Veja esse post que explico certinho o erro e como se resolve: Cuidado com a leitura de múltiplos arquivos em união de tabelas (JOIN) | Blog do Nicolett

nicolett_yuri

É isso mesmo

Not applicable
Author

Tem possibilidade de ler todos os arquivos mantendo essa o left join conforme abaixo:

XMLSUL:
LOAD quantidadeExecutada,
valorProcessado,
[procedimento/codigo] as codigo,
[procedimento/tipoTabela] as tipoTabela,
[procedimento/descricao] as descricao,
%Key_dadosGuia_932648AE386CACC8   // Key to parent table: mensagemTISS/operadoraParaPrestador/demonstrativosRetorno/demonstrativoAnaliseConta/fatura/dadosFatura/lote/dadosLote/guia/dadosGuia
FROM [XML TESTE\*.xml] (XmlSimple, Table is [mensagemTISS/operadoraParaPrestador/demonstrativosRetorno/demonstrativoAnaliseConta/fatura/dadosFatura/lote/dadosLote/guia/dadosGuia/procedimentos/dadosProcedimento]);

Left Join(XMLSUL)
LOAD numeroGuiaPrestador,
dataRealizacao,
%Key_demonstrativoAnaliseConta_C282603095E315F3// Key to parent table: mensagemTISS/operadoraParaPrestador/demonstrativosRetorno/demonstrativoAnaliseConta
   %Key_dadosGuia_932648AE386CACC8   // Key for this table: mensagemTISS/operadoraParaPrestador/demonstrativosRetorno/demonstrativoAnaliseConta/fatura/dadosFatura/lote/dadosLote/guia/dadosGuia
FROM [XML TESTE\*.xml] (XmlSimple, Table is [mensagemTISS/operadoraParaPrestador/demonstrativosRetorno/demonstrativoAnaliseConta/fatura/dadosFatura/lote/dadosLote/guia/dadosGuia]);

Left Join(XMLSUL)
LOAD valorProcessadoGeral,
valorLiberadoGeral,
valorGlosaGeral,
[cabecalhoDemonstrativo/dataEmissao] as dataEmissao,
[identificacaoFontePagadora/operadoraRegulada/registroANS] as [operadoraRegulada/registroANS],
[identificacaoFontePagadora/operadoraRegulada/CNPJ] as CNPJ,
[identificacaoFontePagadora/operadoraRegulada/nomeOperadora] as nomeOperadora,
%Key_mensagemTISS_AE9B42D256CCB348// Key to parent table: mensagemTISS
   %Key_demonstrativoAnaliseConta_C282603095E315F3   // Key for this table: mensagemTISS/operadoraParaPrestador/demonstrativosRetorno/demonstrativoAnaliseConta
FROM [XML TESTE\*.xml] (XmlSimple, Table is [mensagemTISS/operadoraParaPrestador/demonstrativosRetorno/demonstrativoAnaliseConta]);

Left Join(XMLSUL)
LOAD [xmlns:ansTISS],
[cabecalho/identificacaoTransacao/sequencialTransacao] as sequencialTransacao,
[cabecalho/identificacaoTransacao/dataRegistroTransacao] as dataRegistroTransacao,
[cabecalho/identificacaoTransacao/horaRegistroTransacao] as horaRegistroTransacao,
%Key_mensagemTISS_AE9B42D256CCB348// Key for this table: mensagemTISS
   FileBaseName () AS Competencia
FROM [XML TESTE\*.xml] (XmlSimple, Table is [mensagemTISS]);

pablolabbe
Luminary Alumni
Luminary Alumni

Carlos,

  Você deve trabalhar fazer um loop onde a cada arquivo lido você monta uma tabela temporária com as junções necessárias. Ao final das junções você concatena esta tabela temporária a tabela principal que possui os registros de todos os arquivos.

  Então você deve modificar a lógica do seu script da seguinte formar:

  - Abra um Loop com comando FOR EACH para ler os xmls da pasta

  - renomeie o LABEL da tabela  XMLSUL para XMLSUL_TEMP assim como as referencias no join

  - Ao final da sequencia de  todos os load com JOINS acrescente os comandos


  //cria tabela principal na primeira iteração e depois concatena autormaticamente na principal a partir da segunda iteração do Loop

    XMLSUL:

    LOAD * RESIDENT XMLSUL_TESTE;


  //remover a tabela temporária que será recriada na leitura do próximo arquivo

    DROP TABLE XMLSUL_TESTE;

 

  - Feche o loop com comando NEXT com o nome da varável declarada lá no FOR.

Abraço,

Pablo Labbe