8 Replies Latest reply: Dec 27, 2012 12:02 PM by Pablo Labbe RSS

    Ajuda com Datas

    Raphael Pacheco

      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!

        • Re: Ajuda com Datas
          Aderlan Rodrigues

          Olá Raphael,

           

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

           

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

           

          Abraço.

            • Re: Ajuda com Datas
              Raphael Pacheco

              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!

                • Re: Ajuda com Datas
                  Aderlan Rodrigues

                  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.

              • Re: Ajuda com Datas
                Thiago das Chagas cunha

                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

                • Re: Ajuda com Datas
                  Pablo Labbe

                  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

                  • Re: Ajuda com Datas
                    Raphael Pacheco

                    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!