4 Replies Latest reply: Dec 29, 2017 12:09 PM by Cristiano Rocha RSS

    Contador de Dias Úteis passados

    Daniel Teixeira

      Boa tarde, pessoal.

       

      Possuo uma tabela de calendário já criada no meu banco de dados. Esta tabela possui configuração de feriados, ou seja, um dia de semana pode não ser considerado como dia útil, dependendo da configuração que eu fizer.

       

      Tomando como exemplo o mês de Dezembro/2017, temos 20 dias úteis, pois além dos fins de semana, temos o dia 25 como feriado.

       

      A configuração da tabela seria similar à seguinte:

       

      DATA

      DIA_SEMANA

      DIA_UTIL

      01/12/2017

      Sexta

      Sim

      02/12/2017

      Sabado

      Nao

      03/12/2017

      Domingo

      Nao

      04/12/2017

      Segunda

      Sim

      05/12/2017

      Terça

      Sim

      06/12/2017

      Quarta

      Sim

      07/12/2017

      Quinta

      Sim

      08/12/2017

      Sexta

      Sim

      09/12/2017

      Sabado

      Nao

      10/12/2017

      Domingo

      Nao

      11/12/2017

      Segunda

      Sim

      12/12/2017

      Terça

      Sim

      13/12/2017

      Quarta

      Sim

      14/12/2017

      Quinta

      Sim

      15/12/2017

      Sexta

      Sim

      16/12/2017

      Sabado

      Nao

      17/12/2017

      Domingo

      Nao

      18/12/2017

      Segunda

      Sim

      19/12/2017

      Terça

      Sim

      20/12/2017

      Quarta

      Sim

      21/12/2017

      Quinta

      Sim

      22/12/2017

      Sexta

      Sim

      23/12/2017

      Sabado

      Nao

      24/12/2017

      Domingo

      Nao

      25/12/2017

      Segunda

      Nao

      26/12/2017

      Terça

      Sim

      27/12/2017

      Quarta

      Sim

      28/12/2017

      Quinta

      Sim

      29/12/2017

      Sexta

      Sim

      30/12/2017

      Sabado

      Nao

      31/12/2017

      Domingo

      Nao

       

      Já tentei utilizar a função NetWorkDays, que basicamente ignora essa tabela de calendário. O problema desta função é que ela está considerando o dia 25 como dia útil, por ser uma segunda feira.

       

      Preciso fazer um contador de dias úteis passados dentro desse mês. Por exemplo, hoje, 27/12/2017, temos 17 dias úteis passados.

       

      Alguém pode me ajudar?

       

      Obrigado!

        • Re: Contador de Dias Úteis passados
          Yuri Nicolett

          Daniel, uma forma simples de utilizar a NetWorkDays e passar os feriados de seu calendário, é armazenar os feriados em uma variável. Mais ou menos assim:

           

          Feriados_Tmp:

          LOAD

                DATA

          RESIDENT SUATABELACALENDARIO

          WHERE DIA_UTIL = 'Sim'

           

           

           

          //Concatenando os feriados com virgula

          Feriados:

          LOAD

          CONCAT(chr(39) & DATA & chr(39), ',') as TodosFeriados

          RESIDENT Feriados_Tmp;

           

          DROP TABLE Feriados_Tmp;

           

          //Colocando os feriados dentro de uma variável

          LET vFeriados = peek('TodosFeriados',0, 'Feriados');

           

           

           

           

          Depois disso, basta usar a função NetWorkDays com essa variável, no parâmetro de feriados, desta forma:

           

          NetWorkDays(DataInicio, DataTermino, '$(vFeriados)')

          • Re: Contador de Dias Úteis passados
            Cristiano Rocha

            Boa Tarde , Daniel.

             

            No meu modelo de negocio tive que fazer a mesma coisa para criar os dias de feriados e atípicos e resolvi diretamente na expressão da seguinte maneira:

             

            1 - Criei uma variável na visão geral das variáveis chamada vHolidays fiz a inserção de todos os dias que não queria considerar desta maneira '01/01/2016','08/02/2016','09/02/2016' mesmo o primeiro valor ficando normal e os outros tracejados ele entende.


            2 - Criei um calendário auxiliar por tipo de dia constando no meu caso a empresa a referencia de chave mês/ano os tipos de dias e as quantidades de cada por exemplo fevereiro de 2016 foram 19 uteis / 4 sábado / 4 domingo / 2 feriados e total 29 , liguei com a tabela de quantidades que queria realizar a media dos dias.


            3 - O set analise abaixo

            sum({$<TP_DIA={'Dia_Util'},DDate=E({$< DDate={$(vHolidays)}>})>}[pax])/sum(TPUTIL) ou no seu caso o count.

             

            Esta solução funciona perfeitamente e atende uma das principais demandas de indicadores da nossa empresa , caso tenha alguma duvida ou queira entrar em contato fico a disposição.

             

            Att;