Skip to main content
cancel
Showing results for 
Search instead for 
Did you mean: 
glaubergc
Contributor II
Contributor II

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

10 Replies
nicolett_yuri

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.

nicolett_yuri

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.

glaubergc
Contributor II
Contributor II
Author

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?

nicolett_yuri

Você precisa criar esses campos na tabela CALENDARIO.

Qual foi o erro que apresentou? Pode ser algum erro de sintaxe, pois digitei diretamente aqui no post

glaubergc
Contributor II
Contributor II
Author

Error in expression:

AUTOGENERATE is not a valid function

CALENDARIO:

Load

  Date('37540,683272535' + Recno() - 1) as DATA,

  AutoGenerate('41961,500173611' - '37540,683272535' + 1)

nicolett_yuri

Estranho esse erro... (irei te mandar um exemplo)

só um detalhe, seu campo de data contém DATA e HORA, o ideal é remover a hora desse campo para criar o calendário. Para remover a hora desse campo, basta utilizar a função Date(Floor(DATA)).

glaubergc
Contributor II
Contributor II
Author

Sim, o campo de data contém a HORA, usei o função Date(floor(data) para remover, mas o erro continua..


Error in expression:

AUTOGENERATE is not a valid function

fernando_tonial
Partner - Specialist
Partner - Specialist

Nesse seu exemplo você deve remover a virgula após o o Campo DATA.

CALENDARIO:

Load

  Date('37540' + Recno() - 1) as DATA

AutoGenerate('41961' - '37540' + 1)

Qlikfique-se.

Tonial.

Don't Worry, be Qlik.
nicolett_yuri

Segue o exemplo em anexo.

Sobre o seu erro: disponibilize seu código ou app de exemplo para análise