Skip to main content
Announcements
Qlik Connect 2024! Seize endless possibilities! LEARN MORE
cancel
Showing results for 
Search instead for 
Did you mean: 
Not applicable

Período especiais no ano

Preciso criar uma espécie de um calendário anual com alguns períodos especiais. Ex:

Dia das mães

Dia dos pais

Dia dos namorados

Carnaval

Natal

Etc...

Assim consigo medir as vendas em algum peíodo em especial.

1 Solution

Accepted Solutions
Not applicable
Author

Boa Tarde,

Você consegue manipular as informações utilizando funções do sistema: (FieldName() e NoOfFields() )

Assumindo que no seu script a ultima tabela "Calendarios" alterei para "CALENDARIO_TMP", o tratamento que consegui realizar segue abaixo. (crie uma nova aba e copie e cole):

FERIADO_FIXO:
LOAD
  Holiday,
  Desc
RESIDENT CALENDARIO_TMP;

FERIADO_VARIAVEL_TMP:
LOAD
Vespera,
Carnaval,
Cinzas,
SextaFeiraSanta,
CorpusChristi,
Pascoa
RESIDENT CALENDARIO_TMP;

LET qtde_fields = NoOfFields('FERIADO_VARIAVEL_TMP');

FOR i=1 TO qtde_fields

LET campo=FieldName($(i), 'FERIADO_VARIAVEL_TMP');
  FERIADO:
LOAD
  $(campo) AS Holiday,
  '$(campo)' AS Desc
RESIDENT FERIADO_VARIAVEL_TMP;

NEXT
// a tabela anterior contem a mesma qtde de campos, o concatenate é realizado automaticamente.
FERIADO:
LOAD *
RESIDENT FERIADO_FIXO;

DROP TABLE CALENDARIO_TMP;
DROP TABLE FERIADO_VARIAVEL_TMP;

View solution in original post

6 Replies
Clever_Anjos
Employee
Employee

Carnaval e Semana Santa não tem uma regra específica (na verdade tem, mas é baseado em ciclo lunar, etc).
Sugiro que crie uma tabela em seu sistema com o campo data como chave e um flag indicando se é dia util ou não.

Not applicable
Author

Clever  , muito obrigado pela dica vou fazer !!!!

Not applicable
Author

Senhores boa tarde.

Estou no mesmo dilema a verificação de dias uteis ou não, considernado os feriados no Brazil.

Só que não quero fazer a atualização ano a ano,  assim criei o script a seguir (ainda nao finalizado) para achar as datas dos feriados fixos e móveis do Brasil.

Exite um calculo para verificar a pascoa e consequentemente depois de Achar a Pascoa encontrar os demais feriados móveis do ano corrente.

Vespera de Carnaval  = Pascoa - 48 dias

Carnaval  = Pascoa - 47 dias

Cinzas = Pascoa - 46 dias

Sexta Feira Santa = Pascoa - 2 dias

Corpus Christi = Pascoa + 60 dias

Para os feriados fixos criei os dados em in line, criei os aniverários de cidade para Itajaí e São Paulo pois são os dias que os banco não funcionam nas filiais da emrpesa que eu presto serviço.

Até ai tudo bem cheguei no resultados dos campos

Porem ainda preciso popular todos os campos em uma unica tabela.  Maiores detalhes depois do código do script.

Cote:

Calendar:

LOAD * INLINE [

    Holiday, Desc

    01/01/, Confraternização Universal

    01/25/, Aniversário São Paulo

    04/21/, Tiradentes

    05/01/, Dia do Trabalho

    06/15/, Aniversário Itajaí

    09/07/, Independência do Brasil

    10/12/, Nossa Sra. Aparecida - Padroeira do Brasil

    11/02/, Finados

    11/15/, Proclamação da República

    12/24/, Véspera de Natal

    12/25/, Natal

    12/31/, Véspera de Ano Novo];

   

       // {Feriados Móveis}

Calendario:

   

Load

Date((Holiday&(Year(Today()))),'M/DD/YYYY') As Holiday,

//Para anos entre 1901 e 2099: X = 24 e Y = 5 para anos de 10

if(((if((((Mod(((19)*(Mod(Year(Today()),19)))+(24),30)) // d

+ // +

(Mod((2*(Mod(Year(Today()),4))+4*(Mod(Year(Today()),7))+6*(Mod(((19)*(Mod(Year(Today()),19)))+(24),30))+5),7)))// e

>=10 // Maior que 9

    ),

    (

'4/'& // Abril

    (((Mod(((19)*(Mod(Year(Today()),19)))+(24),30)) // d

+ // +

(Mod((2*(Mod(Year(Today()),4))+4*(Mod(Year(Today()),7))+6*(Mod(((19)*(Mod(Year(Today()),19)))+(24),30))+5),7)))// e

  -9 // Menos 9

    ) &'/'&(year(Today())) // YYYY

    ), ('3/'& // Março

      (((Mod(((19)*(Mod(Year(Today()),19)))+(24),30)) // d

+ // +

(Mod((2*(Mod(Year(Today()),4))+4*(Mod(Year(Today()),7))+6*(Mod(((19)*(Mod(Year(Today()),19)))+(24),30))+5),7)))// e

  +22 // Mais 22

    )&'/'&(year(Today())) // YYYY

    )))

    ='4/26/2076'), '4/19/2049',

if(((if((((Mod(((19)*(Mod(Year(Today()),19)))+(24),30)) // d

+ // +

(Mod((2*(Mod(Year(Today()),4))+4*(Mod(Year(Today()),7))+6*(Mod(((19)*(Mod(Year(Today()),19)))+(24),30))+5),7)))// e

>=10 // Maior que 9

    ),

    (

'4/'& // Abril

    (((Mod(((19)*(Mod(Year(Today()),19)))+(24),30)) // d

+ // +

(Mod((2*(Mod(Year(Today()),4))+4*(Mod(Year(Today()),7))+6*(Mod(((19)*(Mod(Year(Today()),19)))+(24),30))+5),7)))// e

  -9 // Menos 9

    ) &'/'&(year(Today())) // YYYY

    ), ('3/'& // Março

      (((Mod(((19)*(Mod(Year(Today()),19)))+(24),30)) // d

+ // +

(Mod((2*(Mod(Year(Today()),4))+4*(Mod(Year(Today()),7))+6*(Mod(((19)*(Mod(Year(Today()),19)))+(24),30))+5),7)))// e

  +22 // Mais 22

    )&'/'&(year(Today())) // YYYY

    )))    ='4/25/2049'), '4/18/2049',

(if((((Mod(((19)*(Mod(Year(Today()),19)))+(24),30)) // d

+ // +

(Mod((2*(Mod(Year(Today()),4))+4*(Mod(Year(Today()),7))+6*(Mod(((19)*(Mod(Year(Today()),19)))+(24),30))+5),7)))// e

>=10 // Maior que 9

    ),

    (

'4/'& // Abril

    (((Mod(((19)*(Mod(Year(Today()),19)))+(24),30)) // d

+ // +

(Mod((2*(Mod(Year(Today()),4))+4*(Mod(Year(Today()),7))+6*(Mod(((19)*(Mod(Year(Today()),19)))+(24),30))+5),7)))// e

  -9 // Menos 9

    ) &'/'&(year(Today())) // YYYY

    ), ('3/'& // Março

      (((Mod(((19)*(Mod(Year(Today()),19)))+(24),30)) // d

+ // +

(Mod((2*(Mod(Year(Today()),4))+4*(Mod(Year(Today()),7))+6*(Mod(((19)*(Mod(Year(Today()),19)))+(24),30))+5),7)))// e

  +22 // Mais 22

    )&'/'&(year(Today())) // YYYY

    ))))) As Pascoa,  // Se (d + e) > 9 então DIA = (d + e - 9) e MES = Abril senão DIA = (d + e + 22) e MES = Março

Desc

Resident Calendar;

Drop Table Calendar;

Calendarios:

Load

Date(if( Year(today())>1, Pascoa - 48, ''),'M/DD/YYYY') As Vespera,

Date(if( Year(today())>1, Pascoa - 47, ''),'M/DD/YYYY') As Carnaval,

Date(if( Year(today())>1, Pascoa - 46, ''),'M/DD/YYYY') As Cinzas,

Date(if( Year(today())>1, Pascoa - 2, ''),'M/DD/YYYY') As SextaFeiraSanta,

Date(if( Year(today())>1, Pascoa + 60, ''),'M/DD/YYYY') As CorpusChristi,

Pascoa,

Holiday,

Desc

Resident Calendario;

Drop Table Calendario;

Calendarios:

Load

Vespera,

Carnaval,

Cinzas,

SextaFeiraSanta,

CorpusChristi,

Pascoa,

Holiday,

Desc,

networkdays('01/01/2011', Today(), Holiday) As NetWorkDay // Calula os dias uteis de 01-Jan-2011 até Hoje considerando os feriados (Holyday).

Resident Calendarios;

Drop Table Calendarios;

Unquote

Resultado:

HolidayDesc
1/1/2011Confraternização  Universal
1/25/2011Aniversário São Paulo
4/21/2011Tiradentes
5/1/2011Dia do Trabalho
6/15/2011Aniversário Itajaí
9/7/2011Independência do  Brasil
10/12/2011Nossa Sra. Aparecida  - Padroeira do Brasil
11/2/2011Finados
11/15/2011Proclamação da  República
12/24/2011Véspera de Natal
12/25/2011Natal
12/31/2011Véspera de Ano Novo

PascoaVesperaCarnavalCinzasCorpusChristiSextaFeiraSanta
4/24/20113/7/20113/8/20113/9/20116/23/20114/22/2011

Todos esses dados estão em uma unica tablea

export.png

Pergunto diante da realidade ai vai a pergunta para finalizar este assunto de calendário com feriados fixos e móveis no Brasil.

Como colocar todas as colunas em apenas 01 coluna ?

Colunas ( Vespera, Carnaval, Cinzas, SextaFeiraSanta, CorpusChristi, Pascoa, Holiday) As nova Coluna

Desde já agradeço

ps: observem que trabalho com a data em Mes/Dia/Ano ('M/DD/YYYY')

Not applicable
Author

Boa Tarde,

Você consegue manipular as informações utilizando funções do sistema: (FieldName() e NoOfFields() )

Assumindo que no seu script a ultima tabela "Calendarios" alterei para "CALENDARIO_TMP", o tratamento que consegui realizar segue abaixo. (crie uma nova aba e copie e cole):

FERIADO_FIXO:
LOAD
  Holiday,
  Desc
RESIDENT CALENDARIO_TMP;

FERIADO_VARIAVEL_TMP:
LOAD
Vespera,
Carnaval,
Cinzas,
SextaFeiraSanta,
CorpusChristi,
Pascoa
RESIDENT CALENDARIO_TMP;

LET qtde_fields = NoOfFields('FERIADO_VARIAVEL_TMP');

FOR i=1 TO qtde_fields

LET campo=FieldName($(i), 'FERIADO_VARIAVEL_TMP');
  FERIADO:
LOAD
  $(campo) AS Holiday,
  '$(campo)' AS Desc
RESIDENT FERIADO_VARIAVEL_TMP;

NEXT
// a tabela anterior contem a mesma qtde de campos, o concatenate é realizado automaticamente.
FERIADO:
LOAD *
RESIDENT FERIADO_FIXO;

DROP TABLE CALENDARIO_TMP;
DROP TABLE FERIADO_VARIAVEL_TMP;

Not applicable
Author

Eduaro Correa muito obrigado por sua ajuda.
Realizei algumas adaptações para a minha realidade e tenho o resultado final que eu esperava.  Ponto para você!
Abaixo compartilho o código todos para quem desejar ter uma tabela anual com os calendários do Brasil.
___________________________________________________________________________________________________________________________
SET
ThousandSep=',';
SET
DecimalSep='.';
SET
MoneyThousandSep=',';
SET
MoneyDecimalSep='.';
SET
MoneyFormat='$#,##0.00;($#,##0.00)';
SET
TimeFormat='h:mm:ss TT';
SET
DateFormat='M/D/YYYY';
SET
TimestampFormat='M/D/YYYY h:mm:ss[.fff] TT';
SET
MonthNames='Jan;Feb;Mar;Apr;May;Jun;Jul;Aug;Sep;Oct;Nov;Dec';
SET
DayNames='Mon;Tue;Wed;Thu;Fri;Sat;Sun';
//*****************************************************Feriados*************************************************************************************
// Feriados Fixos
Calendar:
LOAD
* INLINE [
;
// {Feriados Móveis}
Pascoa:
Load
((Holiday&(Year(Today()))),'M/DD/YYYY') As Holiday,
//Para anos entre 1901 e 2099: X = 24 e Y = 5 para anos de 10
if(((if((((Mod(((19)*(Mod(Year(Today()),19)))+(24),30)) // d
+
// +
(
Mod((2*(Mod(Year(Today()),4))+4*(Mod(Year(Today()),7))+6*(Mod(((19)*(Mod(Year(Today()),19)))+(24),30))+5),7)))// e
>=
10 // Maior que 9
),
(
'4/'
& // Abril
(((
Mod(((19)*(Mod(Year(Today()),19)))+(24),30)) // d
+
// +
(
Mod((2*(Mod(Year(Today()),4))+4*(Mod(Year(Today()),7))+6*(Mod(((19)*(Mod(Year(Today()),19)))+(24),30))+5),7)))// e
-
9 // Menos 9
) &
'/'&(year(Today())) // YYYY
), (
'3/'& // Março
(((
Mod(((19)*(Mod(Year(Today()),19)))+(24),30)) // d
+
// +
(
Mod((2*(Mod(Year(Today()),4))+4*(Mod(Year(Today()),7))+6*(Mod(((19)*(Mod(Year(Today()),19)))+(24),30))+5),7)))// e
+
22 // Mais 22
)&
'/'&(year(Today())) // YYYY
)))
=
'4/26/2076'), '4/19/2049',
if
(((if((((Mod(((19)*(Mod(Year(Today()),19)))+(24),30)) // d
+
// +
(
Mod((2*(Mod(Year(Today()),4))+4*(Mod(Year(Today()),7))+6*(Mod(((19)*(Mod(Year(Today()),19)))+(24),30))+5),7)))// e
>=
10 // Maior que 9
),
(
'4/'
& // Abril
(((
Mod(((19)*(Mod(Year(Today()),19)))+(24),30)) // d
+
// +
(
Mod((2*(Mod(Year(Today()),4))+4*(Mod(Year(Today()),7))+6*(Mod(((19)*(Mod(Year(Today()),19)))+(24),30))+5),7)))// e
-
9 // Menos 9
) &
'/'&(year(Today())) // YYYY
), (
'3/'& // Março
(((
Mod(((19)*(Mod(Year(Today()),19)))+(24),30)) // d
+
// +
(
Mod((2*(Mod(Year(Today()),4))+4*(Mod(Year(Today()),7))+6*(Mod(((19)*(Mod(Year(Today()),19)))+(24),30))+5),7)))// e
+
22 // Mais 22
)&
'/'&(year(Today())) // YYYY
)))     =
'4/25/2049'), '4/18/2049',
(
if((((Mod(((19)*(Mod(Year(Today()),19)))+(24),30)) // d
+
// +
(
Mod((2*(Mod(Year(Today()),4))+4*(Mod(Year(Today()),7))+6*(Mod(((19)*(Mod(Year(Today()),19)))+(24),30))+5),7)))// e
>=
10 // Maior que 9
),
(
'4/'
& // Abril
(((
Mod(((19)*(Mod(Year(Today()),19)))+(24),30)) // d
+
// +
(
Mod((2*(Mod(Year(Today()),4))+4*(Mod(Year(Today()),7))+6*(Mod(((19)*(Mod(Year(Today()),19)))+(24),30))+5),7)))// e
-
9 // Menos 9
) &
'/'&(year(Today())) // YYYY
), (
'3/'& // Março
(((
Mod(((19)*(Mod(Year(Today()),19)))+(24),30)) // d
+
// +
(
Mod((2*(Mod(Year(Today()),4))+4*(Mod(Year(Today()),7))+6*(Mod(((19)*(Mod(Year(Today()),19)))+(24),30))+5),7)))// e
+
22 // Mais 22
)&
'/'&(year(Today())) // YYYY
)))))
As Pascoa, // Se (d + e) > 9 então DIA = (d + e - 9) e MES = Abril senão DIA = (d + e + 22) e MES = Março
Desc
Resident
Calendar;
Drop
Table Calendar;
Calendario_Temporario:
Load
Date
(if( Year(today())>1, Pascoa - 48, ''),'M/DD/YYYY') As Vespera_de_Carnaval,
Date
(if( Year(today())>1, Pascoa - 47, ''),'M/DD/YYYY') As Carnaval,
Date
(if( Year(today())>1, Pascoa - 46, ''),'M/DD/YYYY') As Cinzas,
Date
(if( Year(today())>1, Pascoa - 2, ''),'M/DD/YYYY') As Sexta_Feira_Santa,
Date
(if( Year(today())>1, Pascoa + 60, ''),'M/DD/YYYY') As Corpus_Christi,
Date
(Pascoa, 'M/DD/YYYY') As Pascoa,
Holiday
,
Desc
Resident
Pascoa;
Drop
Table Pascoa;
Feriados_Fixo:
load
Holiday
,
Desc
Resident
Calendario_Temporario;
Feriado_Variavel:
Load
Vespera_de_Carnaval
,
Carnaval
,
Cinzas
,
Sexta_Feira_Santa
,
Corpus_Christi
,
Pascoa
Resident
Calendario_Temporario;
Drop
Table Calendario_Temporario;
LET
qtde_fields = NoOfFields('Feriado_Variavel');
FOR
i=1 TO qtde_fields
LET
campo = FieldName($(i) , 'Feriado_Variavel');
Feriado:
Load
$(campo)
As Holiday,
if
(upper('$(campo)' )='VESPERA_DE_CARNAVAL', 'Véspera de Carnaval',
if
(upper('$(campo)' )='SEXTA_FEIRA_SANTA', 'Sexta Feira Santa',
if
(upper('$(campo)' )='CORPUS_CHRISTI', 'Corpus Christi',
if
(upper('$(campo)' )='CINZAS', 'Quarta Feira de Cinzas', '$(campo)' )))) As Desc
Resident
Feriado_Variavel;
Next
Feriado:
// a tabela anterior contem a mesma qtde de campos, o concatenate é realizado automaticamente.
Load
Date
(Holiday, 'M/DD/YYYY') As Holiday,
Desc
Resident
Feriados_Fixo;
Drop
Table Feriado_Variavel;
___________________________________________________________________________________________________________________________
Muito obrigado
Abraços Weslley!
Date
aderlanrm
Partner - Specialist
Partner - Specialist

Já que o Evandro não marcou, marquei sua resposta como certa.

O código é muito bom, você não tem interesse de fazer um QVW de exemplo e postar aqui na comunidade como arquivo? #ficaadica

Abraço.

Aderlan Rodrigues
Analista, Arquiteto de Dados e Piloto Amador Drone FPV
 (41) 9 9917-0869  www.BIdeAZ.com.br  Youtube.com/bideaz  Instagram.com/bideaz.in

"Nada é tão inútil quanto fazer eficientemente o que não deveria ser feito." (Peter Drucker)