Skip to main content
Announcements
Have questions about Qlik Connect? Join us live on April 10th, at 11 AM ET: SIGN UP NOW
cancel
Showing results for 
Search instead for 
Did you mean: 
IvanOsatchuk
Contributor III
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?

2 Solutions

Accepted Solutions
eduardo_sommer
Partner - Specialist
Partner - Specialist

Bom dia, Ivan

Era isso que você precisava?

Eduardo

View solution in original post

eduardo_sommer
Partner - Specialist
Partner - Specialist

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

View solution in original post

9 Replies
eduardo_sommer
Partner - Specialist
Partner - Specialist

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

IvanOsatchuk
Contributor III
Contributor III
Author

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
Partner - Specialist
Partner - Specialist

Bom dia, Ivan

Era isso que você precisava?

Eduardo

eduardo_sommer
Partner - Specialist
Partner - Specialist

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

IvanOsatchuk
Contributor III
Contributor III
Author

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
Partner - Specialist
Partner - Specialist

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

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.

IvanOsatchuk
Contributor III
Contributor III
Author

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

Eduardo e Edvaldo, as duas respostas deram certo!

Um abraço!

vagnerfrr
Contributor II
Contributor II

Tenho uma duvida com relação a datas.

Quero definir no meu script períodos com as datas.

ex: [Dt Emissão]={">'01/10/2016'<30/09/2017"} as 12m

 

Fiz isso nas expressões, porém não consigo mineirar as informações. Como posso fazer isso no script?