Qlik Community

Qlik Brasil

Group community for Brazil users. discussion only in Portuguese.

Highlighted
osatchuk_ivan
New Contributor III

Como criar um filtro de data com um período de competência?

Bom dia,

Gostaria de ajuda para criar um filtro, tenho um campo data no formato 'DD/MM/YYYY' e preciso fazer a seleção do dia 21 de um mês até o dia 20 do próximo, gerando a competência desse período.

Por exemplo para a competência de abril/2016 preciso apenas das datas entre 21/março/2016 até 20/abril/2016.

Para a competência de maio/2016 preciso das datas entre 21/abril até 20/maio, e assim sucessivamente.

Alguém tem um dica de como fazer isso?

1 Solution

Accepted Solutions
eduardo_sommer
Valued Contributor

Re: Como criar um filtro de data com um período de competência?

Bom dia, Ivan

Era isso que você precisava?

Eduardo

8 Replies
eduardo_sommer
Valued Contributor

Re: Como criar um filtro de data com um período de competência?

Boa noite Ivan,

Você pode fazer o seguinte, na script de carga, supondo que o campo que contém a data tenha o nome Data:

if(day(Data) < 21, mod(month(Data),12), mod(month(Data)+1,12)) as Competência.

O primeiro uso da função mod é para pegar a parte numérica da função month (e não o nome do mês) e o segundo uso é para transformar o mês 13 em 1.

Espero ter lhe ajudado

Eduardo

osatchuk_ivan
New Contributor III

Re: Como criar um filtro de data com um período de competência?

Muito obrigado pela resposta Eduardo,

funcionou quase perfeitamente, só estou com dificuldade quando a competência envolve dois anos diferentes, por exemplo dezembro/2015 e janeiro/2016.

Como eu poderia tratar esse problema?

eduardo_sommer
Valued Contributor

Re: Como criar um filtro de data com um período de competência?

Bom dia, Ivan

Era isso que você precisava?

Eduardo

eduardo_sommer
Valued Contributor

Re: Como criar um filtro de data com um período de competência?

Nesse caso, vamos incluir o ano. Caso sejam os primeiros 20 dias do mês de janeiro de 2016, por exemplo, a competência ficara 2015/dez ou 2015/12, como preferires. Já as datas posteriores ao dia 20 de janeiro terão a competência 2016/jan ou 2016/01.

Para o formato com a abreviatura do mês:

if(day(Data) < 21, year(MonthStart(Data,-1))&'/'&month(MonthStart(Data,-1), year(MonthStart(Data,-1))&'/'&month(MonthStart(Data,-1)) as Competência

Para o formato com o número do mês:

if(day(Data) < 21, year(MonthStart(Data,-1))&'/'&num(month(MonthStart(Data,-1)), year(MonthStart(Data,-1))&'/'&num(month(MonthStart(Data,-1))) as Competência


Depois me conta se isso resolveu.


Eduardo

osatchuk_ivan
New Contributor III

Re: Como criar um filtro de data com um período de competência?

Eduardo,

Infelizmente não resolveu, dessa forma acaba gerando uma lista da seguinte forma:

lista.png

que acaba não gerando as seleções adequadamente.

A primeira forma:

if(day(Data) < 21, mod(month(Data),12), mod(month(Data)+1,12)) as Competência

com a exceção de janeiro funciona perfeitamente.

Tem alguma maneira de tratar esse modo para selecionar dezembro de um ano e janeiro de outro?

eduardo_sommer
Valued Contributor

Re: Como criar um filtro de data com um período de competência?

Oi, Ivan

Tinha uns parenteses desbalanceados e outro erro nos parâmetros

Agora testei e funcionou:

     if(day(DataEmissao) < 21, year(MonthStart(DataEmissao,-1))&'/'&month(MonthStart(DataEmissao,-1)),                 year(MonthStart(DataEmissao))&'/'&month(MonthStart(DataEmissao))) as Competência

Desculpe por ter mandado sem testar

Eduardo

Not applicable

Re: Como criar um filtro de data com um período de competência?

Tive um caso semelhante a este, onde eu apuro periodo de apontamento de folha de pagamento, isso resolveu meu caso:

IF(DAY(Date(DATA,'DD/MM/YYYY'))>=16 , Date(MonthStart(Date(DATA,'DD/MM/YYYY'),1),'MM/YYYY'), Date(Date(DATA,'DD/MM/YYYY'),'MM/YYYY')) as [Periodo Ponto]

No seu caso é só trocar o 16 pelo 21.

At.

osatchuk_ivan
New Contributor III

Re: Como criar um filtro de data com um período de competência?

Obrigado a todos que me ajudaram, consegui resolver o problema.

Eduardo e Edvaldo, as duas respostas deram certo!

Um abraço!