Unlock a world of possibilities! Login now and discover the exclusive benefits awaiting you.
(Obs: QVD em anexo)
Estou com um problema para validar datas de N registros de uma tabela. Preciso validar se a data do saldo está entre as datas válidas de início em fim.
Reparem que os três campos de data (%Data, dat_inic_valid e dat_fim_valid) estão de forma numérica.
Quando é feito um LOAD full são retornados 625 registos.
Reparem que esta data 40999 (31/03/2012) se encontra válida para todos os registros. A validação é dat_inic_valid <= data <= dat_fim_valid.
Segue abaixo.
Quando é feito outro LOAD, com as validações de data, são retornados 339 registros, sendo que era para retornar 625, pois a data 40999 está válida em todos os registros.
Poderiam me ajudar? Não sei se é problema de tipo de formato. Já testei varias vezes, de varias formas, e não obtive sucesso.
SALDO:
LOAD
%EmpresaID,
%ContaContábilID,
cod_ccusto,
ind_criter_distrib_ccusto,
%Data,
dat_inic_valid,
dat_fim_valid,
val_sdo_ctbl_fim
FROM SALDO.QVD (qvd)
//Where (dat_inic_valid <= %Data) and (%Data <= dat_fim_valid)
;
Olá Péricles,
Eu acho que o seu problema está nos formatos das datas, alguma data está sendo interpretada incorretamente pelo QlikView... Verifica qual é o formato da data no momento da leitura do arquivo (Você pode fazer isto na pré-visualização de carga do QVD, por exemplo). Aí aplica a função Date# para especificar o formato que está vindo, e no resultado você aplica a função Date para converter para o formato padrão de forma que você garanta que a comparação está sendo feita no mesmo formato. Exemplo:
Vamos supor que no seu arquivo os campos dat_inic_valid e dat_fim_valid estão assim: 2012-03-22 e 2012-12-09 (YYYY-MM-DD) e o campo %Data está assim: 15/04/2012 (DD/MM/YYYY). Neste caso você deveria filtrar na cláusula where da seguinte forma:
SALDO:
LOAD
%EmpresaID,
%ContaContábilID,
cod_ccusto,
ind_criter_distrib_ccusto,
%Data,
dat_inic_valid,
dat_fim_valid,
val_sdo_ctbl_fim
FROM SALDO.QVD (qvd)
WHERE (Date(Date#(dat_inic_valid,'YYYY-MM-DD'),'DD/MM/YYYY') <= %Data) and
(%Data <= Date(Date#(dat_fim_valid,'YYYY-MM-DD'),'DD/MM/YYYY');
Abraços,
Cesar Accardi
Cesar obrigado pelo retorno.
Como se faz para visualizar o formato da data no momento da leitura do arquivo?
Pré-visualização é o Debug?
Não, eu digo pelo assistente de carga de arquivo mesmo... Aquela opção no editor de script "Arquivos de Tabela"
Cesar, o valor de ambas as datas estão no DB como número.
Fiz sua dica e está exatamente a mesma coisa.
Quando eu não valido na carga e trago todos os regitros para o Qvw, eu adiciono a lista de cada campo e formato para Data. Qlikview já automaticamente reconhece elas e põe no formato certinho DD/MM/YYYY.
De qualquer forma eu preciso validar na carga. Se os valores do DB já se encontram como número, eu não entendo o porque da lógica da validação estar errada em alguns registros. Pelas fotos que eu anexei acima dá pra ver "de olho" que a única data é valida.
Você chegou a testar isso através do Qlikview?
Olá Péricles,
O que acontece, o valor que o QlikView apresenta na interface é a forma como ele interpretou as datas. Isto não quer dizer que reflete a forma como a data está armazenada. Imagine que você tem a data no banco assim: 05/10/2012 porém o formato que o banco armazena é MM/DD/YYYY (Então a data é 10 de Maio de 2012) mas o QlikView vai apresentar 05/10/2012 (DD/MM/YYYY -> De acordo com o SET DateFormat do Script; interpretando a data como 5 de Outubro de 2012) o que pode ser um problema em comparações de intervalo.
Por isso que eu disse para você verificar o formato de data na fonte.
Cesar, entendi sim.
Acabei de conversar com o DBA do sistema e ele confirmou problemas de registros. Com mais análise a fundo, conseguimos resolver. Não tinha nenhum problema em formatos de datas e etc, mas valeu pela força. Obrigado.
Att,
Coloca a solução ai e marca as respostas e as ajudas. Abraço.