No filme "Monstros S/A" os personagens são treinados para assustarem as crianças. Eles ficam lá, à espreita, esperando a hora certa de aterrorizar os pequenos humanos.


Em Qlik existe também um cenário onde um pequeno "monstro" fica à espreita para nos assustar.


Mas primeiro vamos a um pouco de teoria sobre como datas, horas e intervalos são armazenados em Qlik. Leitura recomendada by hic


As funções date() e time() são apenas funções de formatação.

Elas não alteram o valor do número que recebem como argumento. Elas apenas aplicam uma "máscara" a um valor de data/hora

Se você incluir em um objeto texto a expressão =time(now()) verá algo semelhante a isso

Capturar.PNG

Você está vendo apenas a hora:min:seg mas o valor do dia "ainda está lá" esperando para assustar você.

Se você incluir em um objeto texto a expressão =date(now()) verá algo semelhante a isso

Capturar.PNG

Você está vendo apenas a data mas as horas e minutos continuam lá.

images?q=tbn:ANd9GcTaeFK9RkQM00A7cbfc2iI3C573rSkbsubdyrY-ZZnT4jk0O_cB

Várias vezes vemos posts aqui na comunidade de diferenças estranhas quando somam-se ou calculam-se médias de campos data/hora.

Exemplo:

Sum(Aggr(time(DataHoraFim)-time(DataHoraInicio),Atendimento) parece certo não?

Para cada atendimento, calcula-se a diferença entre a data final e data inicial e soma-se para todos os atendimentos.

Mas e se?

Capturar.PNG

 

Percebeu a diferença? Quando aplica-se um time() a um valor de 34:52:20 a função "arredonda" para 24 horas e mostra apenas 10:52:20, "escondendo" 24 horas no armário. Mas aquelas horas continuam lá e quando somamos ou calculamos média o valor fica distorcido. Você vê um valor, mas valor armazenado é outro, mascarado pelas funções.


Utilize as seguintes regrinhas:

  • Quer apenas a parte data de um campo? Utilize Date(Floor(Seucampo))
  • Quer apenas as horas de um campo? Utilize Time(Frac(Seucampo))
  • Está fazendo um cálculo entre datas que pode resultar em mais de 24 horas? Formate com Interval() que não vai deixar os valores "escondidos"