10 Replies Latest reply: Oct 12, 2016 1:10 PM by JOAO CARLOS RAMIRES RSS

    Campo DATA unificado ou Calendário Maestro

      Bom dia senhores(as),

       

      Ainda estou no início em desenvolvimento no qlikview, estão sempre surgi as 1001 duvidas rs e gostaria de uma ajuda, se for possível.


      Bom, tenho 4 tabelas e todas elas tem um campo DATA, gostaria de saber se é possível de unificar o campo DATA de modo que posso selecionar uma data e todas as tabelas filtrasse de acordo com a data selecionada.

      Detalhe, em cada tabela a data tem inicio diferente. Exemplo: DATA_CADASTRO tem inicio em 2012, DATA_MATRICULA tem incio em 2007, DATA_ACESSO_JOGO tem inicio em 2012 e a DATA_ACESSO_MINI tem incio em 2014.

       

      Eu li um artigo sobre trabalhar com tabela Fato, e a solução era resolver criar uma tabela de ligação (Link Table).

      Mas tive muita dificuldade em traz a teoria para pratica.

       

      Veja um simples exemplos das minhas tabelas:

       

      USUÁRIO

      COD_ALUNO

      NOME

      DATA_CADASTRO

       

      TURMA_ALUNO

      COD_TURMA

      COD_ALUNO

      TIPO_CURSO

      DATA_MATRICULA

       

      JOGOS

      COD_JOGOS

      COD_ALUNO

      TIPO_JOGO

      DATA_ACESSO_JOGO

       

      MINI_CURSO

      COD_MINI_CURSO

      COD_ALUNO

      TIPO_MINI_CURSO

      DATA_ACESSO_MINO

        • Re: Campo DATA unificado ou Calendário Maestro
          Yuri Nicolett

          Glauber, sugiro a criação de uma tabela Calendário e esta tabela fará a ligação por um campo de Data (Dia, Mês e Ano) com as outras tabelas. As dimensões temporais passarão a ser a da tabela de calendário.

            • Re: Campo DATA unificado ou Calendário Maestro
              Yuri Nicolett

              Faltou demonstrar como construir um calendário rsrs

               

              Primeiro você precisa descobrir o menor e o maior valor de data, para isso, faça um concatenate de todas as tabelas utilizando somente o campo de data, por exemplo:

               

              Menor_Maior_Data_Tmp:

              LOAD

              DATA_CADASTRO AS DATA

              RESIDENT USUÁRIO;

               

              CONCATENATE

               

              LOAD

              DATA_MATRICULA as DATA

              RESIDENT TURMA_ALUNO;

               

              Faça isso com todas as suas tabelas, depois você pode calcular a menor e a maior data através de variáveis:

               

              Menor_Maior_Data:

              LOAD

              MAX(DATA) as MaiorData,

              MIN(DATA) as MenorData

              RESIDENT Menor_Maior_Data_Tmp;

               

              LET vMaiorData = Peek('MaiorData',0,'Menor_Maior_Data');

              LET vMenorData = Peek('MenorData',0,'Menor_Maior_Data');

               

              Com essas variáveis criadas, basta gerar o relatório:

              CALENDARIO:

              Load

                date('$(vMenorData)' + Recno() - 1) as Data

              AutoGenerate ('$(vMaiorData)' - '$(vMenorData)' + 1);

               

              Agora basta criar os campos de Mês,Ano,MêsAno, etc e fazer a ligação com as suas tabelas fato através da coluna de Data.

                • Re: Campo DATA unificado ou Calendário Maestro

                  Valeu Yuri pela força ai.

                   

                  Deu um erro na expressa com "AutoGenerate " troquei por  "AutoNumber", algum problema?


                  Em qual tabela eu crio os campos Mês,Ano?

                  • Re: Campo DATA unificado ou Calendário Maestro
                    JOAO CARLOS RAMIRES

                    Boa tarde Yuri.

                     

                    Peguei esta discussão e gostaria de fazer algumas perguntas. Fiz exatamente como vc colocou, criei o calendário, etc...

                     

                    "Agora basta criar os campos de Mês,Ano,MêsAno, etc e fazer a ligação com as suas tabelas fato através da coluna de Data." Quando fui fazer isto aqui, ele dá referencia circular.

                     

                    O que eu fiz: na tabela onde tinha o campo DTMOVIMENTO as DATA e nas demais tabelas também... ai vem a bendita referencia circular.

                     

                    Menor_Maior_Data_Temp:

                    LOAD

                    DATE(FLOOR(DTMEDICAO)) AS DATAMESTRE

                    Resident EACOITEMREGISTROME;

                     

                    Concatenate

                     

                    LOAD

                    DATE(FLOOR(DTPAGTO)) AS DATAMESTRE

                    Resident ECPGBAIXA;

                     

                    Concatenate

                     

                    LOAD

                    DATE(FLOOR(DTMOVIMENTO)) AS DATAMESTRE

                    Resident EESTMOVESTOQUE;

                     

                    Concatenate

                     

                    LOAD

                    DATE(Floor(DTMOVIMENTOCXB)) AS DATAMESTRE

                    Resident ECXAMOVCXABCO;

                     

                     

                    Menor_Maior_Data:

                    load

                    max(Date(Floor(DATAMESTRE))) AS MAIORDATA,

                    MIN(Date(Floor(DATAMESTRE))) AS MENORDATA

                    Resident Menor_Maior_Data_Temp;

                     

                    LET vMaiorData = Peek('MAIORDATA',0,'Menor_Maior_Data');

                    LET vMenorData = Peek('MENORDATA',0,'Menor_Maior_Data');

                     

                    CALENDARIO:

                    Load

                    date('$(vMenorData)' + Recno() - 1) as DATAMESTRE,

                    MonthName('$(vMenorData)'+ Recno()-1) AS MESANOMESTRE

                    AutoGenerate ('$(vMaiorData)' - '$(vMenorData)' + 1);

                     

                    e nas tabelas eu fiz:

                     

                    EESTMOVESTOQUE:

                    LOAD

                        CDCENTROCUSTO,

                        CDDETALHE,

                       // CDDOCUMENTO,

                       // CDFORNECEDOR,

                        CDINSUMO,

                        CDMARCA,

                       // CDOBRA,

                        CDTABELA,

                        CDTIPOMOVIMENTO,

                       // CDUNIDADEMOVORIG,

                        DTMOVIMENTO,

                         MonthName(DTMOVIMENTO) AS MESANOMESTRE,  // <-- ACHO Q ESTOU FALHANDO AQUI.

                        NUMOVESTOQUE,

                        NUMOVIMENTO,

                        QTMOVIMENTO,

                        QTORIGEM,

                        TPENTRADASAIDA,

                        TPSERIE,

                        VLMOVIMENTO AS VLMOVIMENTOEST,

                        VLORIGEM

                    FROM $(vExtrator)EESTMOVESTOQUE.QVD(qvd);

                     

                     

                    STORE EESTMOVESTOQUE into $(vTransforma)EESTMOVESTOQUE.QVD;

                    IF vDrop = 'S' then

                      DROP Table EESTMOVESTOQUE;

                    ENDIF