Qlik Community

Qlik Brasil

Welcome to the group for Brazil users. .All discussions will be in Portuguese.

Highlighted
Not applicable

Junção e Comparação entre datas em duas tabelas distintas

Pessoal boa tarde,

Muito tenho pesquisa sobre intervalo entre duas datas e muito tenho encontrado pessoal que tem essa neecessidade e muitas, muitas mesmo, são as dificuldades para cada situação/pessoa.

No meu caso não é diferente.

Por isso peço ajuda a vocês, pois " n " cabeças pensam melhor que uma.

Em outros post's, com ajuda dos Senhores (as) contrui um calendário Brasileiro tendo os feriados fixos e variados ( ou seja todos os calendários).

Minhas variáveis no código abaixo traz os feriados desde 2009 ao ano corrente + 01 ( neste caso 2004).

Abaixo o script e o resultado do mesmo:

/*****************************************************Feriados*************************************************************************************

    // Feriados Fixos

       // {Years}

      

LET Var1 = 2009;

LET Var2 = year(today())+1;// $(n)+1;

LET VarTotal = 1;

Sub Cal (Var1,Var2,VarTotal)

       

         for n = ($(Var1)) to ($(Var2)) Step 1

               

            Calendar:

                   

            LOAD * INLINE [

            Holiday, Desc

            01/01/$(n), Confraternização Universal

            01/25/$(n), Aniversário São Paulo

            04/21/$(n), Tiradentes

            05/01/$(n), Dia do Trabalho

            06/15/$(n), Aniversário Itajaí

            07/09/$(n), Deflagração da Revolução Constitucionalista de 1932

            09/07/$(n), Independência do Brasil

            10/12/$(n), Nossa Sra. Aparecida - Padroeira do Brasil

            11/02/$(n), Finados

            11/15/$(n), Proclamação da República

            12/24/$(n), Véspera de Natal

            12/25/$(n), Natal

            12/31/$(n), Véspera de Ano Novo];

           

     Pascoa:

   

Load

     Date(Holiday,'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($(n),19)))+(24),30)) // d

     + // +

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

     >=10 // Maior que 9

        ),

        (

     '4/'& // Abril

        (((Mod(((19)*(Mod($(n),19)))+(24),30)) // d

     + // +

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

      -9 // Menos 9

        ) &'/'&($(n)) // YYYY

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

          (((Mod(((19)*(Mod($(n),19)))+(24),30)) // d

     + // +

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

      +22 // Mais 22

        )&'/'&($(n)) // YYYY

        )))

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

    if(((if((((Mod(((19)*(Mod($(n),19)))+(24),30)) // d

     + // +

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

     >=10 // Maior que 9

        ),

        (

     '4/'& // Abril

        (((Mod(((19)*(Mod($(n),19)))+(24),30)) // d

     + // +

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

      -9 // Menos 9

        ) &'/'&($(n)) // YYYY

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

          (((Mod(((19)*(Mod($(n),19)))+(24),30)) // d

     + // +

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

      +22 // Mais 22

        )&'/'&($(n)) // YYYY

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

    (if((((Mod(((19)*(Mod($(n),19)))+(24),30)) // d

     + // +

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

     >=10 // Maior que 9

        ),

        (

     '4/'& // Abril

        (((Mod(((19)*(Mod($(n),19)))+(24),30)) // d

     + // +

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

      -9 // Menos 9

        ) &'/'&($(n)) // YYYY

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

          (((Mod(((19)*(Mod($(n),19)))+(24),30)) // d

     + // +

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

      +22 // Mais 22

        )&'/'&($(n)) // 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;

    next

   

        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

// a tabela anterior contem a mesma qtde de campos, o concatenate é realizado automaticamente.

    Feriado:

Load

    Date(Holiday, 'MM/D/YYYY') As Holiday,

    Weekday(Holiday) As DiaSemana,

    Desc    

Resident Feriados_Fixo;

Drop Table Feriados_Fixo;

Drop Table Feriado_Variavel;

end sub

Call Cal (Var1,Var2,VarTotal);

Abaixo o resultado do script acima:

HolidayDescDiaSemana
1/1/2009Confraternização UniversalThu
1/25/2009Aniversário São PauloSun
2/23/2009Véspera de CarnavalMon
2/24/2009CarnavalTue
2/25/2009Quarta Feira de CinzasWed
4/10/2009Sexta Feira SantaFri
4/12/2009PascoaSun
4/21/2009TiradentesTue
5/1/2009Dia do TrabalhoFri
6/11/2009Corpus ChristiThu
6/15/2009Aniversário ItajaíMon
7/9/2009Deflagração da Revolução Constitucionalista de 1932Thu
9/7/2009Independência do BrasilMon
10/12/2009Nossa Sra. Aparecida - Padroeira do BrasilMon
11/2/2009FinadosMon
11/15/2009Proclamação da RepúblicaSun
12/24/2009Véspera de NatalThu
12/25/2009NatalFri
12/31/2009Véspera de Ano NovoThu
1/1/2010Confraternização UniversalFri
1/25/2010Aniversário São PauloMon
2/15/2010Véspera de CarnavalMon
2/16/2010CarnavalTue
2/17/2010Quarta Feira de CinzasWed
4/2/2010Sexta Feira SantaFri
4/4/2010PascoaSun
4/21/2010TiradentesWed
5/1/2010Dia do TrabalhoSat
6/3/2010Corpus ChristiThu
6/15/2010Aniversário ItajaíTue
7/9/2010Deflagração da Revolução Constitucionalista de 1932Fri
9/7/2010Independência do BrasilTue
10/12/2010Nossa Sra. Aparecida - Padroeira do BrasilTue
11/2/2010FinadosTue
11/15/2010Proclamação da RepúblicaMon
12/24/2010Véspera de NatalFri
12/25/2010NatalSat
12/31/2010Véspera de Ano NovoFri
1/1/2011Confraternização UniversalSat
1/25/2011Aniversário São PauloTue
3/7/2011Véspera de CarnavalMon
3/8/2011CarnavalTue
3/9/2011Quarta Feira de CinzasWed
4/21/2011TiradentesThu
4/22/2011Sexta Feira SantaFri
4/24/2011PascoaSun
5/1/2011Dia do TrabalhoSun
6/15/2011Aniversário ItajaíWed
6/23/2011Corpus ChristiThu
7/9/2011Deflagração da Revolução Constitucionalista de 1932Sat
9/7/2011Independência do BrasilWed
10/12/2011Nossa Sra. Aparecida - Padroeira do BrasilWed
11/2/2011FinadosWed
11/15/2011Proclamação da RepúblicaTue
12/24/2011Véspera de NatalSat
12/25/2011NatalSun
12/31/2011Véspera de Ano NovoSat
1/1/2012Confraternização UniversalSun
1/25/2012Aniversário São PauloWed
2/20/2012Véspera de CarnavalMon
2/21/2012CarnavalTue
2/22/2012Quarta Feira de CinzasWed
4/6/2012Sexta Feira SantaFri
4/8/2012PascoaSun
4/21/2012TiradentesSat
5/1/2012Dia do TrabalhoTue
6/7/2012Corpus ChristiThu
6/15/2012Aniversário ItajaíFri
7/9/2012Deflagração da Revolução Constitucionalista de 1932Mon
9/7/2012Independência do BrasilFri
10/12/2012Nossa Sra. Aparecida - Padroeira do BrasilFri
11/2/2012FinadosFri
11/15/2012Proclamação da RepúblicaThu
12/24/2012Véspera de NatalMon
12/25/2012NatalTue
12/31/2012Véspera de Ano NovoMon
1/1/2013Confraternização UniversalTue
1/25/2013Aniversário São PauloFri
2/11/2013Véspera de CarnavalMon
2/12/2013CarnavalTue
2/13/2013Quarta Feira de CinzasWed
3/29/2013Sexta Feira SantaFri
3/31/2013PascoaSun
4/21/2013TiradentesSun
5/1/2013Dia do TrabalhoWed
5/30/2013Corpus ChristiThu
6/15/2013Aniversário ItajaíSat
7/9/2013Deflagração da Revolução Constitucionalista de 1932Tue
9/7/2013Independência do BrasilSat
10/12/2013Nossa Sra. Aparecida - Padroeira do BrasilSat
11/2/2013FinadosSat
11/15/2013Proclamação da RepúblicaFri
12/24/2013Véspera de NatalTue
12/25/2013NatalWed
12/31/2013Véspera de Ano NovoTue
1/1/2014Confraternização UniversalWed
1/25/2014Aniversário São PauloSat
3/3/2014Véspera de CarnavalMon
3/4/2014CarnavalTue
3/5/2014Quarta Feira de CinzasWed
4/18/2014Sexta Feira SantaFri
4/20/2014PascoaSun
4/21/2014TiradentesMon
5/1/2014Dia do TrabalhoThu
6/15/2014Aniversário ItajaíSun
6/19/2014Corpus ChristiThu
7/9/2014Deflagração da Revolução Constitucionalista de 1932Wed
9/7/2014Independência do BrasilSun
10/12/2014Nossa Sra. Aparecida - Padroeira do BrasilSun
11/2/2014FinadosSun
11/15/2014Proclamação da RepúblicaSat
12/24/2014Véspera de NatalWed
12/25/2014NatalThu
12/31/2014Véspera de Ano NovoWed

PS: Trabalho no idioma Inglês  'M/D/YYYY' .

O nome da tabela é " Feriado "

Até aqui sem problemas.

A minha dúvida consite no comparar o resultado da tabela Feriado com outra tabela, onde a unica ligação são as datas do Feriado e o Vencimento de um documento.

Qual é a melhor form ade fazer isso, o que sugerem, um Lado na tabela Feriado com o Load na outra tabela ( documento) comparam todas as datas da tabela Feriado ?

Sugerem outra opção?

Minha dúvida é com referencia a ajunção e compraração de dados entre as duas tabelas e não calculo entre elas.


1 Solution

Accepted Solutions
Not applicable

Re: Junção e Comparação entre datas em duas tabelas distintas

Fazer um Join da tabela de feriados com calendário com campo DATA, pq ai vc criaria uma tabela de datas só, e as datas que são feriado ficariam com alguma descrição.

4 Replies
Not applicable

Re: Junção e Comparação entre datas em duas tabelas distintas

Fazer um Join da tabela de feriados com calendário com campo DATA, pq ai vc criaria uma tabela de datas só, e as datas que são feriado ficariam com alguma descrição.

Not applicable

Re: Junção e Comparação entre datas em duas tabelas distintas

Tem certo momentos que não conseguimos enchergar um palmo a frente do nariz.

Desculpe te fazer ler todo esse post para uma pergunta no mínimo "ridicula".

No meu caso usei a função  LEFT KEEP .

Obrigado Issosorio.

Not applicable

Re: Junção e Comparação entre datas em duas tabelas distintas

Cara ler todo esse post, se ta brincando....esse script que vc fez é a salvação para feriados AHAHAAHAHHAAHHAAH Sempre esbarro nesse problema, agora tenho seu script salvo.

Not applicable

Re: Junção e Comparação entre datas em duas tabelas distintas

Valeu mais uma vez, quando precisar estamos ai.