Do not input private or sensitive data. View Qlik Privacy & Cookie Policy.
Skip to main content

Announcements
Posting on Qlik Community is temporarily paused for some users. Thank you for patience and we'll update you soon!
cancel
Showing results for 
Search instead for 
Did you mean: 
pericles_silva
Contributor III
Contributor III

Problemas em validação de datas

(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.

ScreenShot00191.jpg

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.

ScreenShot00194.jpg

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)

;

Labels (1)
7 Replies
cesaraccardi
Specialist
Specialist

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

pericles_silva
Contributor III
Contributor III
Author

Cesar obrigado pelo retorno.

Como se faz para visualizar o formato da data no momento da leitura do arquivo?

Pré-visualização é o Debug?

cesaraccardi
Specialist
Specialist

Não, eu digo pelo assistente de carga de arquivo mesmo... Aquela opção no editor de script "Arquivos de Tabela"

pericles_silva
Contributor III
Contributor III
Author

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?

cesaraccardi
Specialist
Specialist

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.

pericles_silva
Contributor III
Contributor III
Author

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,

aderlanrm
Partner - Specialist
Partner - Specialist

Coloca a solução ai e marca as respostas e as ajudas. Abraço.

Aderlan Rodrigues
Analista, Arquiteto de Dadose e Desenvolvedor
 (41) 9 9917-0869  www.BIdeAZ.com.br  Youtube.com/bideaz  Instagram.com/bideaz.in

"Nada é tão inútil quanto fazer eficientemente o que não deveria ser feito." (Peter Drucker)