Unlock a world of possibilities! Login now and discover the exclusive benefits awaiting you.
Olá pessoal, bom dia!
Estou atrás de uma função ou de uma luz, para retornar o primeiro dia útil do mês.
Por exemplo o mês de Junho o primeiro dia útil é 03/06/2019, o do mês de Julho é 01/07/2019. Gostaria de trazer esse valor.
Alguém poderia me auxiliar? Desde já meu muito obrigado!
Pessoal, acredito que consegui resolver meu problema... pelo menos está retornando o que eu quero... rsrsrs
Criei uma função dentro do Dash, pois não queria criar a mesma no Load Editor... segue o código da função:
if(weekday(mid(vCompAtual,1,4)&'-'&mid(vCompAtual,5,2)&'-01')<> 'sáb' AND weekday(mid(vCompAtual,1,4)&'-'&mid(vCompAtual,5,2)&'-01') <>'dom',
Date(mid(vCompAtual,1,4)&'-'&mid(vCompAtual,5,2)&'-01'),
if(weekday(mid(vCompAtual,1,4)&'-'&mid(vCompAtual,5,2)&'-01') = 'sáb',
Date(mid(vCompAtual,1,4)&'-'&mid(vCompAtual,5,2)&'-01'+2),Date(mid(vCompAtual,1,4)&'-'&mid(vCompAtual,5,2)&'-01'+1)
)
)
Obs.: o campo vCompAtual, é uma outra função que tenho, que me retorna o ano_mes selecionado pelo usuário no Dash, então a partir disso quero saber qual o primeiro dia útil do mês selecionado pelo usuário, para realizar os devidos cálculos de contagem de dias de vencimento até o primeiro dia do mês.
ainda não fiz o link com uma tabela de feriados, mas se não levar em consideração, ele está trazendo o primeiro dia útil do mês.
Abraço!
Pessoal, acredito que consegui resolver meu problema... pelo menos está retornando o que eu quero... rsrsrs
Criei uma função dentro do Dash, pois não queria criar a mesma no Load Editor... segue o código da função:
if(weekday(mid(vCompAtual,1,4)&'-'&mid(vCompAtual,5,2)&'-01')<> 'sáb' AND weekday(mid(vCompAtual,1,4)&'-'&mid(vCompAtual,5,2)&'-01') <>'dom',
Date(mid(vCompAtual,1,4)&'-'&mid(vCompAtual,5,2)&'-01'),
if(weekday(mid(vCompAtual,1,4)&'-'&mid(vCompAtual,5,2)&'-01') = 'sáb',
Date(mid(vCompAtual,1,4)&'-'&mid(vCompAtual,5,2)&'-01'+2),Date(mid(vCompAtual,1,4)&'-'&mid(vCompAtual,5,2)&'-01'+1)
)
)
Obs.: o campo vCompAtual, é uma outra função que tenho, que me retorna o ano_mes selecionado pelo usuário no Dash, então a partir disso quero saber qual o primeiro dia útil do mês selecionado pelo usuário, para realizar os devidos cálculos de contagem de dias de vencimento até o primeiro dia do mês.
ainda não fiz o link com uma tabela de feriados, mas se não levar em consideração, ele está trazendo o primeiro dia útil do mês.
Abraço!
Hermann, uma sugestão pra minimizar o seu custo de cálculo na aplicação.
Eu coloquei um flag no calendário informando se é dia útil ou não.
Primeiro carrego uma suposta tabela de feriado e depois o calendário. No calendário faço a coluna WorkDay onde verifico se é final de semana ou feriado e marco como zero, senão, marco como 1.
Na aplicação faço a seguinte medida:
Date(Min({<WorkDay={1}>} Data))
Feriados:
Load
*
Inline [
Feriado
01/07/2019
20/07/2019
];
Load
Data,
If(WildMatch(Num(WeekDay(Data)),0,6) > 0 , 0 , If(Exists(Feriado,Data) , 0 , 1)) as WorkDay
Inline [
Data
01/07/2019
02/07/2019
03/07/2019
04/07/2019
05/07/2019
06/07/2019
07/07/2019
08/07/2019
09/07/2019
10/07/2019
11/07/2019
12/07/2019
13/07/2019
14/07/2019
15/07/2019
16/07/2019
17/07/2019
18/07/2019
19/07/2019
20/07/2019
21/07/2019
22/07/2019
23/07/2019
24/07/2019
25/07/2019
26/07/2019
27/07/2019
28/07/2019
29/07/2019
30/07/2019
31/07/2019
];
Drop Table Feriados;
Diogo, obrigado pelo seu retorno, também é uma forma sim...
Mas acabei criando o seguinte script de calendário, para gerar minhas informações, esse código gera um calendário automático de acordo com a data Inicial e Final... e o cria também um calendário de Feriados automático, onde depois eu utilizo para fazer a flag de dias úteis ou flag de Feriados tbm...
Mas de qualquer forma, muito obrigado pelo seu retorno. Segue abaixo o script...
LET vDataFinal = num(MakeDate(Year(today()),12,31));
LET vDataInicial = num(MakeDate(2015,01,01))-1;
LET @Anna-Nilsson = Year($(vDataInicial));
LET @AnoFinal = Year($(vDataFinal))+1;
Do While @Anna-Nilsson <= @AnoFinal
LET @Mod1 = Mod($(@Ano),19);
LET @Mod2 = Mod($(@Ano),4);
LET @Mod3 = Mod($(@Ano),7);
LET @Num1 = 24;
LET @Num2 = 5;
LET @Result1 = (19*$(@Mod1)+$(@Num1));
LET @Mod4 = Mod($(@Result1),30);
LET @Result2 = (2*$(@Mod2)+4*$(@Mod3)+6*$(@Mod4)+$(@Num2));
LET @Mod5 = Mod($(@Result2),7);
LET @Pascoa = if(($(@Mod5)+$(@Mod4))>9,if(Len(($(@Mod5)+$(@Mod4))-9)=1,'0'&($(@Mod5)+$(@Mod4))-9,($(@Mod5)+$(@Mod4))-9)&'/04/'&$(@Ano),if(len(($(@Mod5)+$(@Mod4))+22)=1,'0'&($(@Mod5)+$(@Mod4))+22,($(@Mod5)+$(@Mod4))+22)&'/04/'&$(@Ano));
LET @Pascoa = Date(@Pascoa);
LET @Carnaval = Date(@Pascoa-47);
LET @CorpusChristi = Date(@Pascoa+60);
FERIADOS:
Mapping LOAD * Inline [
Data,Feriado
01/01/$(@Ano),'Confraternização Universal'
25/01/$(@Ano),'Aniversário de São Paulo'
$(@Pascoa),'Páscoa'
21/04/$(@Ano),'Tiradentes'
$(@Carnaval),'Carnaval'
$(@CorpusChristi),'Corpus Christi'
01/05/$(@Ano),'Dia do Trabalhador'
07/09/$(@Ano),'Dia da Independência'
12/10/$(@Ano),'N. S. Aparecida'
02/11/$(@Ano),'Todos os santos'
15/11/$(@Ano),'Proclamação da republica'
25/12/$(@Ano),'Natal'
]
;
LET @Anna-Nilsson = $(@Ano)+1;
Loop;
LET @Anna-Nilsson = NULL();
LET @AnoFinal = NULL();
LET @Mod1 = NULL();
LET @Mod2 = NULL();
LET @Mod3 = NULL();
LET @Num1 = NULL();
LET @Num2 = NULL();
LET @Result1 = NULL();
LET @Mod4 = NULL();
LET @Result2 = NULL();
LET @Mod5 = NULL();
LET @Pascoa = NULL();
LET @Carnaval = NULL();
LET @CorpusChrist = NULL();
Tabela_de_Datas:
LOAD date($(vDataInicial) + IterNo(),'DD/MM/YYYY') as Data
AUTOGENERATE 1
WHILE $(vDataInicial) + IterNo() <= $(vDataFinal);
Calendar:
Load
text(Date(Data,'DD/MM/YYYY')) as Data
,if(weekday(Data)=1,'SEGUNDA-FEIRA',
if(weekday(Data)=2,'TERÇA-FEIRA',
if(weekday(Data)=3,'QUARTA-FEIRA',
if(weekday(Data)=4,'QUINTA-FEIRA',
if(weekday(Data)=5,'SEXTA-FEIRA',
if(weekday(Data)=6,'SÁBADO',
if(weekday(Data)=0,'DOMINGO'))))))) as DiaSemana
,if(ApplyMap('FERIADOS',Data,'0')<>'0',1,0) as FlagFeriado
,if(weekday(Data)=6 or Weekday(Data)=0 or if(ApplyMap('FERIADOS',Data,'0')<>'0',1,0), 0, 1 ) as FlagDiaUtil
,text(Date(Data,'DD')) as Dia
,text(Date(Data,'MM')) as Mes
,text(Date(Data,'YYYY')) as Ano
,if(text(Date(Data,'MM')) = '01','JANEIRO'
,if(text(Date(Data,'MM')) = '02','FEVEREIRO'
,if(text(Date(Data,'MM')) = '03','MARÇO'
,if(text(Date(Data,'MM')) = '04','ABRIL'
,if(text(Date(Data,'MM')) = '05','MAIO'
,if(text(Date(Data,'MM')) = '06','JUNHO'
,if(text(Date(Data,'MM')) = '07','JULHO'
,if(text(Date(Data,'MM')) = '08','AGOSTO'
,if(text(Date(Data,'MM')) = '09','SETEMBRO'
,if(text(Date(Data,'MM')) = '10','OUTUBRO'
,if(text(Date(Data,'MM')) = '11','NOVEMBRO'
,if(text(Date(Data,'MM')) = '12','DEZEMBRO')))))))))))) as NomeMes
,if(text(Date(Data,'MM')) = '01','JANEIRO'
,if(text(Date(Data,'MM')) = '02','FEVEREIRO'
,if(text(Date(Data,'MM')) = '03','MARÇO'
,if(text(Date(Data,'MM')) = '04','ABRIL'
,if(text(Date(Data,'MM')) = '05','MAIO'
,if(text(Date(Data,'MM')) = '06','JUNHO'
,if(text(Date(Data,'MM')) = '07','JULHO'
,if(text(Date(Data,'MM')) = '08','AGOSTO'
,if(text(Date(Data,'MM')) = '09','SETEMBRO'
,if(text(Date(Data,'MM')) = '10','OUTUBRO'
,if(text(Date(Data,'MM')) = '11','NOVEMBRO'
,if(text(Date(Data,'MM')) = '12','DEZEMBRO'))))))))))))&'/'&Date(Data,'YYYY') as NomeMesAno
,if(text(Date(Data,'MM')) >= '01' and text(Date(Data,'MM')) <= '03','Q1'
,if(text(Date(Data,'MM')) >= '04' and text(Date(Data,'MM')) <= '06','Q2'
,if(text(Date(Data,'MM')) >= '07' and text(Date(Data,'MM')) <= '09','Q3'
,if(text(Date(Data,'MM')) >= '10' and text(Date(Data,'MM')) <= '12','Q4')))) as Quarter
,if(text(Date(Data,'MM')) >= '01' and text(Date(Data,'MM')) <= '06','1º SEM','2° SEM') as Semestre
Resident Tabela_de_Datas;
LET vDataFinal = NULL();
LET vDataInicial = NULL();
Drop Table Tabela_de_Datas;
//Drop Table FERIADOS;
Exit Script;