Qlik Community

Qlik Brasil

Group community for Brazil users. discussion only in Portuguese.

Highlighted
rphpacheco
Contributor III

Ajuda em Relatório

Boa tarde a todos.

Tenho uma situação onde estou desenvolvendo um script para calcular a inadimplência da empresa onde trabalho.

A regra que tínhamos era calcular a faixa da inadimplência pelos dias de atraso onde era só pegar a data atual - a data de vencimento que chagava aos dias em atraso.

O problema é que agora a regra mudou. Ela não será mais pela faixa de dias em atraso, mas sim pelo mês. Ou seja, os títulos vencidos do dia 1 a 31 de agosto serão considerados para a faixa de 30 dias na inadimplência de Setembro.

Bom, tentei fazer uma faixa pegando o valor do mês base - o mês do vencimento, mas não dá certo quando temos as passagens de anos.

Como posso implementar isso?

Alguém já passou por uma situação parecida?

Abraços!

1 Solution

Accepted Solutions
rphpacheco
Contributor III

Re: Ajuda em Relatório

Já usei essa data formatada, mas não deu certo, pois o que precisava é trazer uma faixa entre os meses e não para os dias.

Tentei utilizando as funções num() e month() para me retornar apenas o valor numeral do mês, mas quando há mudança de anos ele se perde, pois está vendo apenas meses e não os anos.

A solução que achei foi incluir a função MonthStart() , pois assim tenho como calcular a faixa de dias de um determinado mês.

Exemplo:

Criei uma variável com a data de hoje -1 chamada DATA_BASE_CRC

Aí fiz uma sequêcia de ifs

If(MonthStart($(#DATA_BASE_CRC)) <= AddMonths(MonthStart(DTVENCTO),0),
'A VENCER', ...

Aí só fui adicionando valores no AddMonths para pegar as faixas entre os meses

Obrigado pela atenção Yuri.

5 Replies

Re: Ajuda em Relatório

Utilize uma data no formato de Mês + Ano (MMM/YYYY), desta forma você não terá esse problema na mudança de ano.

rphpacheco
Contributor III

Re: Ajuda em Relatório

Já usei essa data formatada, mas não deu certo, pois o que precisava é trazer uma faixa entre os meses e não para os dias.

Tentei utilizando as funções num() e month() para me retornar apenas o valor numeral do mês, mas quando há mudança de anos ele se perde, pois está vendo apenas meses e não os anos.

A solução que achei foi incluir a função MonthStart() , pois assim tenho como calcular a faixa de dias de um determinado mês.

Exemplo:

Criei uma variável com a data de hoje -1 chamada DATA_BASE_CRC

Aí fiz uma sequêcia de ifs

If(MonthStart($(#DATA_BASE_CRC)) <= AddMonths(MonthStart(DTVENCTO),0),
'A VENCER', ...

Aí só fui adicionando valores no AddMonths para pegar as faixas entre os meses

Obrigado pela atenção Yuri.

Not applicable

Re: Ajuda em Relatório

Boa tarde Raphael,

Você pode utilizar a seguinte lógica:

Vencimento em 05/12/2013 e a data atual é 10/01/2014.

Vcto: 05/12/2013

Atual: 10/01/2014

Inicialmente pegue a diferença dos anos e dos meses:

Ano Atual - Ano Vcto: 2014 - 2013 = 1

Depois a diferença entre os meses:

Mes Atual - Mes Vcto: 01 - 12 = -11

A regra utilizada é baseada na fórmula

(RESULTADO ANO * 12) + RESULTADO MES

Ficaria:

(1 * 12) + (-11) = 1

A diferença de meses ficaria 1. Pelo o que entendi funcionaria no seu caso.

Abraços

Not applicable

Re: Ajuda em Relatório

Bom dia.

Nesse caso não teria como pegar a diferença e jogar em dias, depois converter os dias em meses ? Acredito que dessa forma ele não iria se perder na hora de virar o ano.

Att.

Carlos.

rphpacheco
Contributor III

Re: Re: Ajuda em Relatório

Bom dia Carlos.

Como eu preciso das faixas de inadimplência por meses e não por dias eu fiz da seguinte maneira:

If(IsNum(DTVENCTO), If(MonthStart($(#DATA_BASE_CRC)) <= AddMonths(MonthStart(DTVENCTO),0),

       'A VENCER',

        If(MonthStart($(#DATA_BASE_CRC)) = AddMonths(MonthStart(DTVENCTO),1),

         '30 DIAS',

          If(MonthStart($(#DATA_BASE_CRC)) = AddMonths(MonthStart(DTVENCTO),2),

          '60 DIAS',

           If(MonthStart($(#DATA_BASE_CRC)) = AddMonths(MonthStart(DTVENCTO),3),

           '90 DIAS',

            If(MonthStart($(#DATA_BASE_CRC)) = AddMonths(MonthStart(DTVENCTO),4),

            '120 DIAS',

             If(MonthStart($(#DATA_BASE_CRC)) = AddMonths(MonthStart(DTVENCTO),5),

             '150 DIAS',

              If(MonthStart($(#DATA_BASE_CRC)) = AddMonths(MonthStart(DTVENCTO),6),

              '180 DIAS',

               If(MonthStart($(#DATA_BASE_CRC)) <= AddMonths(MonthStart(DTVENCTO),7),

               'PERDA NO MES',

                If(MonthStart($(#DATA_BASE_CRC)) >= AddMonths(MonthStart(DTVENCTO),1),

                'PERDA',

                )

               )

              )

             )

            )

           )

          )

         )

        )

,DTVENCTO

)

              as [Faixa de Inadimplência],

Primeiro verifico se a data de vencimento me retorna um número, pois em uma etapa anterior do script eu verifico se o vencimento caiu em um final de semana e se foi no último dia do mês, sendo assim estes registros não vem com valor numeral.

depois verifico as faixas de inadimplência.

Como a nossa inadimplência segue até a faixa de seis meses, o restante eu considero como perda do mês (180 a 210) e perda (acima de 210).