Unlock a world of possibilities! Login now and discover the exclusive benefits awaiting you.
Boa tarde pessoal, sou novo aqui na comunidade e gostaria de tirar uma dúvida.
Tenho uma aplicação ao qual preciso fazer um LOAD de vários arquivos .csv
Cada um desses arquivos contém linhas com informações sobre produtos, como por exemplo preço e data de vigencia.
EXEMPLO:
PRODUTO | DATA_INICIAL | DATA_FINAL | PRECO
A dúvida é, como tenho vários desses arquivos, um para cada mês com a seguinte situação, quando o preço de determinado permanece dentro da vigencia para o mês seguinte, o arquivo .csv do mês seguinte vem novamente com o registro de vigencia. Criando assim a chave duplicada.
EXEMPLO de um arquivo do mês de março:
PRODUTO 1, 01/03/2016, "" , 20,00
PRODUTO 2, 01/03/2016, 15/03/2016 , 25,00
PRODUTO 2, 16/03/2016, "", 26,00
Onde "" é quando ainda não tem data de vigencia final.
EXEMPLO de um arquivo do mês de abril:
PRODUTO 1, 01/03/2016, "" , 20,00
PRODUTO 2, 01/03/2016, 15/03/2016 , 25,00
PRODUTO 2, 16/03/2016, 10/04/2016, 26,00
PRODUTO 2, 11/04/2016, "", 27,00
Viram como no arquivo do mês de abril, o meu LOAD vai carregar novamente o registro do produto lá do arquivo de março, PRODUTO 2, 16/03/2016, "", 26,00 - sendo que ele é o mesmo registro que está em abril porém agora encerrou a vigência, e já apareceu uma nova.
É possível resolver isso de alguma forma e fazer com que meu LOAD carregue apena o ultimo registro primário, ignorando assim o que ficou desatualizado na virada do mês quando ocorreu a troca do arquivo?
Não sei se me expressei de forma que fique fácil o entendimento, qualquer dúvida me perguntem. Desde já agradeço!
Olá Pedro,
Utiliza a função not Exists()
Veja exemplo:
Dados:
LOAD
AutoNumber(PRODUTO&'|'&DATA_INICIO, 'Chave') AS CHAVE,
PRODUTO,
DATA_INICIO,
DATA_FIM,
VALOR
FROM
[Dados*.txt]
(txt, codepage is 1252, embedded labels, delimiter is ',', msq)
Where Not Exists(CHAVE, AutoNumber(PRODUTO&'|'&DATA_INICIO, 'Chave'));
Anexo os dados que testei.
Don't worry, be Qlik.
Tonial.
Se entendi direito, você teria que carregar antes o mês mais atual e criar uma chave com PRODUTO | DATA_INICIAL.
Depois você carrega os mais antigos utilizando
Where not exists(Chave)
Dessa forma vai carregar todos os atuais e somente os que não existirem dos mais antigos.
Boa tarde Luciano, e como eu faço pra carregar do mais atual pro mais antigo ? O qlik faz o load com meus arquivos que são: r*.csv
r607371f612.201510.csv
r607371f612.201511.csv
r607371f612.201512.csv
r607371f612.201603.csv
Outra coisa, ao utilizar o Where not exists(tabela_compra_chave);
ele não encontra esse campo tabela_compra_chave.
Veja esse exemplo:
No caso eu carregaria todas as planilhas e faria um distinct para remover as linhas duplicadas, depois é só usar o ORDER BY para selecionar o último preço do produto.
Fala Yuri, não consegui baixar o arquivo consegue me copiar o código por aqui?
Tentei fazer o distinct e order by mas da erro. Talvez não esteja fazendo do jeito correto.
Tabela:
LOAD * INLINE [
PRODUTO, DATA_INICIO, DATA_FIM, VALOR
PRODUTO 1, 01/03/2016, "" , 20,00
PRODUTO 2, 01/03/2016, 15/03/2016 , 25,00
PRODUTO 2, 16/03/2016, "", 26,00
PRODUTO 1, 01/03/2016, "" , 20,00
PRODUTO 2, 01/03/2016, 15/03/2016 , 25,00
PRODUTO 2, 16/03/2016, 10/04/2016, 26,00
PRODUTO 2, 11/04/2016, "", 27,00
];
ProdutoValor:
NoConcatenate
LOAD
DISTINCT
PRODUTO,
DATA_INICIO,
DATA_FIM,
VALOR,
if( PRODUTO <> Previous(PRODUTO), 'Ultimo Valor') as FLAG_ULTIMO_VALOR
RESIDENT Tabela
ORDER BY
PRODUTO asc,
DATA_INICIO desc;
DROP TABLE Tabela;
Yuri, fiz aqui com esse script, executou, só que não resolveu o problema, apliquei o if na minha chave que é um autonumber do produto & data inicial, que gera um numero que vai aumentando, gerando a chave primaria sequencial e essa está se repetindo no caso do exemplo, e ainda importa a chave duplicada.
Nesse exemplo que passei o registro que tem que ficar é:
PRODUTO 2, 16/03/2016, 10/04/2016, 26,00
A antiga que não tinha a data final de vigencia digitada deve ser excluida : PRODUTO 2, 16/03/2016, "", 26,00 porém vai ter uma nova linha com esse produto só que como a vigencia é nova, e a construção da chave que é com base na data inicial, já descarta a possibilidade de duplicar os proximos registros.
Ah outra coisa que esqueci de mencionar, esse registro que vai ser atualizado pode se manter dentro de vários arquivo até chegar uma tabela com vigência nova que vai encerrar a antiga.
Pedro, você não deve criar a chave, com autonumber, antes de aplicar a lógica que te passei, caso contrário não vai funcionar mesmo.
Entao Yuri, sou bem iniciante mesmo no Qlik. Consegui desenvolver algumas coisas bem legais ja. mas dei uma empacada nesse esquema que perguntei.
A aplicacao possui bem mais registro e produtos duplicados, imagina assim. Cada arquivo o produto se repete.Com alguns criterio que serao utilizados para comparacao com notas fiscais por exemplo. Entao eu possivelmente vou precisar de uma key para relacionar com as nfs.
A aplicacao final e ler uma nota fiscal e cruzar com a tabela de preco para ver se o preco esta correto.
Sendo assim preciso comparar campos coincidentes das duas tabelas para formar a chave e poder mostrar o resultado do valor da nf x o valor da tabela.
Nao sei se estou no caminho certo, mas se for possivel consegue me detalhar melhor como seguir o melhor caminho, alguns macetes que eu tenho que seguir?
Pelo que entendi na sua logica, se eu aplicar no produto e funcionar, vai me trazer apenas um produto, mas eu preciso que todos fiquem registrados porem o que eh igual precisa preencher o campo de vigencia final com base no registro que o load estiver lendo no momento. O que acontece aqui eh que ele simplesmente inclui uma nova linha e isso gera duplicidade de valor na hora de somar o valor da tabela, conforme os campos forem coincidentes com a nota.
Desculpa se nao me fiz entender, mas obrigado mesmo por tentar me ajudar. Se conseguir sera de grande proveito e aprendizado pra mim.
Olá Pedro,
Utiliza a função not Exists()
Veja exemplo:
Dados:
LOAD
AutoNumber(PRODUTO&'|'&DATA_INICIO, 'Chave') AS CHAVE,
PRODUTO,
DATA_INICIO,
DATA_FIM,
VALOR
FROM
[Dados*.txt]
(txt, codepage is 1252, embedded labels, delimiter is ',', msq)
Where Not Exists(CHAVE, AutoNumber(PRODUTO&'|'&DATA_INICIO, 'Chave'));
Anexo os dados que testei.
Don't worry, be Qlik.
Tonial.