Skip to main content
Announcements
Have questions about Qlik Connect? Join us live on April 10th, at 11 AM ET: SIGN UP NOW
cancel
Showing results for 
Search instead for 
Did you mean: 
rphpacheco
Creator III
Creator III

Ajuda com Datas

Bom dia.

Tenho uma variável onde obtenho o mês através da seguinte expressão:

let MES                     = Num(month(Today()),0)-$(INCREMENTO);

Nela, eu realizo o incremento para variados tipos de relatório.

E tenho também outra variável onde quero ter o último dia do mês obtido na expressão acima. Abaixo segue também a expressão:

let DIAFIM                  = Day(MonthEnd($(MES)));

O problema é que quando o mês tem 30 dias ele acaba me retornando 31. Existe uma forma de o entender que quando por exemplo o MES = 4 (Abr) ele deverá retornar DIAFIM = 30 ?

Sem contar que tem ainda o caso de Fevereiro.

Obrigado pela atenção!

1 Solution

Accepted Solutions
pablolabbe
Luminary Alumni
Luminary Alumni

Raphael,

  O problema está no uso da função MonthEnd. O parametro desta função deve ser uma data, mas a variavel mês contem somente o numero do mes (1 a 12). 

Seu codigo poderia ficar assim:

let  DECREMENTO              = 8;

let DATAfim              = date(addmonths(MonthEnd(today()),$(DECREMENTO)*(-1),1),'DD/MM/YYYY');

let DATAinicio           = date(addmonths(monthstart('$(DATAfim)'),-6,0),'DD/MM/YYYY'); //recua 6 meses

let MES_ATUAL            = monthstart('$(DATAfim)');

Abraço,

Pablo Labbe Ibaceta

Consultor Qlikview - Gerente de Serviços

Vision Gestão & Tecnologia

www.visiongi.com.br

View solution in original post

8 Replies
aderlanrm
Partner - Specialist
Partner - Specialist

Olá Raphael,

Vou fazer a pergunta primeiro: De que ano? Rsrsrsrs...

Use o função "MakeDate", veja na ajuda (F1), tem exemplos.

Abraço.

Aderlan Rodrigues
Analista, Arquiteto de Dados e Piloto Amador Drone FPV
 (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)
rphpacheco
Creator III
Creator III
Author

Opa... desculpe Aderlan, pequeno detalhe omitido rsrsrs...

Esta minha necessidade deve-se para um relatório onde eu faço uma consulta para verificar os cartões ativos de clientes em determinado mês. Até aí tudo bem, o problema é que a apuração dos dados é feita do primeiro dia do sexto mes anterior ao mês atual e os dados são uma foto do momento de apuração.

Ex: Se quero os clientes ativos de Abr/2012 eu preciso consultar no banco o período de 01/11/2011 à 30/04/2012.

Para chegar a isso eu defini umas variáveis:

let  DECREMENTO              = 8;

let DIAINICIO               = Day(MonthStart(Today()));

let MES                     = Num(month(Today()),0)-$(INCREMENTO);

let ANO                     = Year(Today());

let DIAFIM                  = Day(MonthEnd($(MES)));

let MESINICIO               = IF($(MES)-5 < 1,($(MES)+7),$(MES)-5);

let ANOINICIO               = IF($(MES)-5 < 1,$(ANO)-1,$(ANO));

let DATAinicio              = date('$(DIAINICIO)/$(MESINICIO)/$(ANOINICIO)','DD/MM/YYYY');

let DATAfim                 = date('$(DIAFIM)/$(MES)/$(ANO)','DD/MM/YYYY');

let MES_ATUAL               = UPPER(Month('$(DIAINICIO)/$(MES)/$(ANO)'));

Esta foi a lógica que achei para o problema. Tenho a variavel DECREMENTO que no caso acima está definindo o mês de Referência para Abril. No DIAFIM estou tentando pegar o último dia do mês 4 (Abr), mas ele está me retornando 31 e não 30 😕

Tem alguma forma de ele entender que MES 4 tem 30 dias?

Sei que está um pouco bagunçado, mas ainda sou iniciante em QlikView

Obrigado por sua atenção!

aderlanrm
Partner - Specialist
Partner - Specialist

Raphael, desculpe não responder antes, estou meio sem tempo esses dias...

Hoje a noite respondo, tem como fazer sim... Acho que vai ter que usar as funções "AddMonth", "MonthEnd" e MakeDate, vai dando uma olhada nos exemplos dessas funções na ajuda (F1) e assim que der eu envio um exemplo, blz?

Abraço.

Aderlan Rodrigues
Analista, Arquiteto de Dados e Piloto Amador Drone FPV
 (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)
srchagas
Creator III
Creator III

Boa tarde Raphael,

Apenas complementando o que o Ardelan falou , vou posta um codigo meu aqui, quando eu vou rodar cargas do Qlikview, usamos o padrão de fazer por  diari alguns arquivos coisa mais expecifica, segeu o codigo que uso para pegar inicio e fim

LET vIni = date(monthstart(makedate(vAno,vMes,1)),'DD/MM/YYYY hh:mm:ss');

LET vFim = date(monthend(makedate(vAno,vMes,1)),'DD/MM/YYYY hh:mm:ss');

no caso  eu uso Date você trocar por DAY deve resolver sem o modelo de dd/mm/yyyy

aderlanrm
Partner - Specialist
Partner - Specialist

Olá Raphael,

Conseguiu com a dica do Thiago?

Abraço.

Aderlan Rodrigues
Analista, Arquiteto de Dados e Piloto Amador Drone FPV
 (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)
pablolabbe
Luminary Alumni
Luminary Alumni

Raphael,

  O problema está no uso da função MonthEnd. O parametro desta função deve ser uma data, mas a variavel mês contem somente o numero do mes (1 a 12). 

Seu codigo poderia ficar assim:

let  DECREMENTO              = 8;

let DATAfim              = date(addmonths(MonthEnd(today()),$(DECREMENTO)*(-1),1),'DD/MM/YYYY');

let DATAinicio           = date(addmonths(monthstart('$(DATAfim)'),-6,0),'DD/MM/YYYY'); //recua 6 meses

let MES_ATUAL            = monthstart('$(DATAfim)');

Abraço,

Pablo Labbe Ibaceta

Consultor Qlikview - Gerente de Serviços

Vision Gestão & Tecnologia

www.visiongi.com.br

rphpacheco
Creator III
Creator III
Author

Tinha tentado com a ajuda do Thiago, mas ele estava se perdendo na virada do ano da data inicial.

Tentei então a forma que o Pablo indicou e rodou certinho!

Obrigado a todos vocês que se dispuseram a resolver este problema!

pablolabbe
Luminary Alumni
Luminary Alumni

Valeu !