Unlock a world of possibilities! Login now and discover the exclusive benefits awaiting you.
Caros,
Preciso dar carga diariamente de uma planilha de chamados. Gostaria que no QVD ficasse apenas o ultimo registro do chamado.
Exemplo :
Arquivo Excel de 01072014 :
CHAMADO ABERTURA FECHAMENTO STATUS
001 01072014 NULL ABERTO
002 01072014 01072014 FECHADO
003 01072014 NULL ABERTO
Arquivo Excel de 02072014 :
CHAMADO ABERTURA FECHAMENTO STATUS
001 01072014 NULL ABERTO
002 01072014 01072014 FECHADO
003 01072014 02072014 FECHADO
O que ocorre é que no QVD eu fico dessa forma :
CHAMADO ABERTURA FECHAMENTO STATUS
001 01072014 NULL ABERTO
002 01072014 01072014 FECHADO
003 01072014 02072014
003 01072014 02072014 FECHADO
E gostaria que ficasse assim :
CHAMADO ABERTURA FECHAMENTO STATUS
001 01072014 NULL ABERTO
002 01072014 01072014 FECHADO
003 01072014 02072014 FECHADO
Já pesquisei e tentei diversas formas, mas nada deu o resultado esperado.
Alguém sabe como posso fazer isso ?
Desde já agradeço a atenção.
Abraços,
Ernesto Alves
Ficaria assim, Ernesto:
//*** Início da leitura das planilhas ***
Chamados_tmp:
Load
CHAMADO as CHAMADOTMP,//Só pra não concatenar. Também pode ser usado o NoConcatenate abaixo.
ABERTURA,
FECHAMENTO,
STATUS
From [Arquivo*.xls]
(...)
;
//*** Fim da leitura das planilhas ***
Chamados:
Load
CHAMADOTMP as CHAMADO , ABERTURA, FECHAMENTO, STATUS
Resident Chamados_tmp where STATUS like 'FECHADO';
Load
CHAMADOTMP as CHAMADO , ABERTURA, FECHAMENTO, STATUS
Resident Chamados_tmp where Not Exists(CHAMADO, CHAMADOTMP);
DROP Table Chamados_tmp;
STORE Chamados INTO Chamados.qvd (qvd) ;
Abs,
Felipe
Tente isto, Ernesto:
//*** Início da leitura das planilhas ***
Chamados_tmp:
Load
CHAMADO as CHAMADOTMP,//Só pra não concatenar. Também pode ser usado o NoConcatenate abaixo.
ABERTURA,
FECHAMENTO,
STATUS
From ...
//*** Fim da leitura das planilhas ***
Chamados:
Load
CHAMADOTMP as CHAMADO , ABERTURA, FECHAMENTO, STATUS
Resident Chamados_tmp where STATUS like 'FECHADO';
Load
CHAMADOTMP as CHAMADO , ABERTURA, FECHAMENTO, STATUS
Resident Chamados_tmp where Not Exists(CHAMADO, CHAMADOTMP);
DROP Table Chamados_tmp;
Abs,
Felipe
Boa noite!
Existem muitas formas de fazer este trabalho, uma delas é:
Auxiliar:
LOAD Distinct
AutoNumber(CHAMADO&'|'&
ABERTURA&'|'&
FECHAMENTO
,'CHAVE') as Chave,
CHAMADO,
ABERTURA,
FECHAMENTO,
STATUS
FROM <Sua Base de Dados>;
Em seguida, leia os registros novamente ordenando-os de forma decrescente e incluindo uma flag de tratamento:
[Tratando Registros]:
LOAD
*
Where
Flag <> 'V';
LOAD
If(CHAMADO = Peek(CHAMADO, -1), 'V', 'F') as Flag,
*
Resident Auxiliar
Order By
Chave Desc;
DROP Fields
Flag,
Chave
From [Tratando Registros];
DROP Table Auxiliar;
Segue em anexo um exemplo.
Abraço!
Bom dia Felipe,
Primeiramente, muito obrigado pela resposta.
Não sei se entendi bem, mas deixe-me explicar melhor.
Imagino que ficaria assim, seguindo a sua dica.
//*** Início da leitura das planilhas ***
Chamados_tmp:
Load
CHAMADO as CHAMADOTMP,//Só pra não concatenar. Também pode ser usado o NoConcatenate abaixo.
ABERTURA,
FECHAMENTO,
STATUS
From Arquivo010720014.xls
Load
CHAMADO as CHAMADOTMP,//Só pra não concatenar. Também pode ser usado o NoConcatenate abaixo.
ABERTURA,
FECHAMENTO,
STATUS
From Arquivo020720014.xls
...
//*** Fim da leitura das planilhas ***
Chamados:
Load
CHAMADOTMP as CHAMADO , ABERTURA, FECHAMENTO, STATUS
Resident Chamados_tmp where STATUS like 'FECHADO';
Load
CHAMADOTMP as CHAMADO , ABERTURA, FECHAMENTO, STATUS
Resident Chamados_tmp where Not Exists(CHAMADO, CHAMADOTMP);
STORE Chamados INTO Chamados.qvd (qvd) ;
DROP Table Chamados_tmp;
É isso ?
Abraços,
Ernesto Alves
Bom dia Raphael,
Muito obrigado pela resposta.
Não entendi bem a sua dica.
Estou trabalhando com um QVW de carga de dados que gera um QVD e outro que faz a leitura desse QVD.
Essa sua sugestão eu deveria implementar no segundo QVW, o que lê o QVD, correto ?
Abraços,
Ernesto Alves
Bom dia Ernesto.
Pelo que eu entendi, você quer os dados dos últimos registros lidos gravado em um QVD. Esta lógica que montei faz isso, só não coloquei o comando store no final.
Depois é só criar uma aplicação que leia esta informação e mostre os dados.
Raphael,
O código do QVW que lê o QVD que gerei ficaria assim ?
Auxiliar:
LOAD Distinct
AutoNumber(CHAMADO&'|'&
ABERTURA&'|'&
FECHAMENTO
,'CHAVE') as Chave,
CHAMADO,
ABERTURA,
FECHAMENTO,
STATUS
... //Existem outros campos.
FROM Chamado.qvd (qvd);
[Tratando Registros]:
LOAD
*
Where
Flag <> 'V';
LOAD
If(CHAMADO = Peek(CHAMADO, -1), 'V', 'F') as Flag,
*
Resident Auxiliar
Order By
Chave Desc;
DROP Fields
Flag,
Chave
From [Tratando Registros];
DROP Table Auxiliar;
Abraços,
Ernesto Alves
Tem que ver quais as informações adicionais existem no seu modelo, mas a primeiro momento é isso mesmo!
Explicando passo a passo a lógica, Criei uma chave utilizando o AutoNumber() com os campos Chamado, Abertura e Fechamento. Após isto, li o conteúdo deste primeiro Load para utilizar a função Order By Desc (pois ela só funciona em tabela Resident). Assim, temos as chaves ordenadas do menor para o maior valor. O if() verifica se o chamado anterior é igual ao atual, se for ele inclui a flag 'V', senão 'F'. Depois fiz um load do load apenas excluindo os registros da flag com valor 'V' e dropei os campos flag e chave (não há necessidade em fazer isso).
Cheguei até a fazer 3 arquivos .xls para testar com um número maior de registros e funcionou aqui.
Verifique se com a sua estrutura irá funcionar e se houver algum problema retrate aqui!
Abraço!
Ficaria assim, Ernesto:
//*** Início da leitura das planilhas ***
Chamados_tmp:
Load
CHAMADO as CHAMADOTMP,//Só pra não concatenar. Também pode ser usado o NoConcatenate abaixo.
ABERTURA,
FECHAMENTO,
STATUS
From [Arquivo*.xls]
(...)
;
//*** Fim da leitura das planilhas ***
Chamados:
Load
CHAMADOTMP as CHAMADO , ABERTURA, FECHAMENTO, STATUS
Resident Chamados_tmp where STATUS like 'FECHADO';
Load
CHAMADOTMP as CHAMADO , ABERTURA, FECHAMENTO, STATUS
Resident Chamados_tmp where Not Exists(CHAMADO, CHAMADOTMP);
DROP Table Chamados_tmp;
STORE Chamados INTO Chamados.qvd (qvd) ;
Abs,
Felipe
Boa noite,
Apenas para dar um retorno e agradecer novamente.
Deu certo com a solução do Felipe e a do Rafael me pareceu sem resultado ou erro.
Acredito que as duas funcionem, mas como a do Felipe funcionou e me pareceu mais fácil, adotei esta.
Fica aqui o meu muito obrigado aos dois, me ajudaram muito !
Abraços,
Ernesto Alves