Unlock a world of possibilities! Login now and discover the exclusive benefits awaiting you.
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!
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
Olá Raphael,
Vou fazer a pergunta primeiro: De que ano? Rsrsrsrs...
Use o função "MakeDate", veja na ajuda (F1), tem exemplos.
Abraço.
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!
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.
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
Olá Raphael,
Conseguiu com a dica do Thiago?
Abraço.
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
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!
Valeu !