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 !