Unlock a world of possibilities! Login now and discover the exclusive benefits awaiting you.
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?
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
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
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?
Bom dia, Ivan
Era isso que você precisava?
Eduardo
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
Eduardo,
Infelizmente não resolveu, dessa forma acaba gerando uma lista da seguinte forma:
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?
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
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.
Obrigado a todos que me ajudaram, consegui resolver o problema.
Eduardo e Edvaldo, as duas respostas deram certo!
Um abraço!
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?