Qlik Community

Brasil

Announcements
QlikWorld 2022, LIVE in Denver CO., May 16-19, 2022. REGISTER NOW TO RECEIVE EARLY BIRD PRICING
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
Partner

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
Professor, Analista e Arquiteto de Dados
? (41) 9 9917-0869 ? www.BIdeAZ.com.br ? Youtube/bideaz.ead ? Instagram/bideaz.ead

"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
Partner

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
Professor, Analista e Arquiteto de Dados
? (41) 9 9917-0869 ? www.BIdeAZ.com.br ? Youtube/bideaz.ead ? Instagram/bideaz.ead

"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
Partner

Olá Raphael,

Conseguiu com a dica do Thiago?

Abraço.

Aderlan Rodrigues
Professor, Analista e Arquiteto de Dados
? (41) 9 9917-0869 ? www.BIdeAZ.com.br ? Youtube/bideaz.ead ? Instagram/bideaz.ead

"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

View solution in original post

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 !