Skip to main content
Announcements
See why Qlik was named a Leader in the 2024 Gartner® Magic Quadrant™ for Data Integration Tools for the ninth year in a row: Get the report
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)