Skip to main content
Announcements
Live today at 11 AM ET. Get your questions about Qlik Connect answered, or just listen in. SIGN UP NOW
cancel
Showing results for 
Search instead for 
Did you mean: 
Anonymous
Not applicable

Ajuda referência circular

Boa tarde,

tenho 3 tabelas ligadas pelo campo cod_prod , e cada tabela tem um campo data diferente ( data de venda, data do custo , data custo materia prima)...

preciso relacionar essas tabelas pelo cod_prod e pela data, criando um calendario para as 3 datas, o problema é que nao consigo fazer isso sem dar referência circular....

alguem tem alguma dica ...

segue em anexo o print do visualizador de tabelas para ficar mais facil de compreender.

1 Solution

Accepted Solutions
cesaraccardi
Specialist
Specialist

Olá Rodrigo, segue em anexo exemplo usando ilha de datas. No exemplo eu tenho uma tabela com títulos, filtrando o calendário eu consigo saber quantos títulos foram emitidos, venceram e foram recebidos no mês selecionado sem a existência de relação lógica entre as tabelas.

Abraços.

View solution in original post

7 Replies
Not applicable
Author

olá,
vc pode colocar as data em uma mesma tabela para evitar a referencia circular a fazer o filtro para o calendario... vai ficar +ou- dessa forma:

LinkTable:

load

     cod_prod,

     dt_mp_custo as data

resident mp;

add load

     cod_prod,

     dt_venda_prod as data

resident venda;

add load

     cod_prod,

     dt_prod_custo as data

resident prod;

Anonymous
Not applicable
Author

Boa tarde Fabio,

valeu pela ajuda, mas ainda nao deu certo ... quando eu concateno as tabelas, os valores não batem, acho que acabam duplicando... tentei colocar distinct no load... mas nao deu certo ...

cesaraccardi
Specialist
Specialist

Olá Rodrigo,

Você pode criar uma única tabela de calendário e deixá-la isolada, isto é, sem relacionamentos (ilha de datas). Aí você utilizaria funções como InDate, InMonth, etc... nas suas expressões, hora filtrando pela data X, hora pela data Y.

Not applicable
Author

Bom dia Rodrigo,

lembre que o melhor modelo para se trabalhar com o Qlikview é o modelo estrela (cria-se uma tabela fato e apenas liga-se a fato tabelas auxiliares). Recomendaria a você fazer o seguinte:

1) faça um left join de venda_prod com venda_produto

2) faça um left join de mp com materia_prima

3) faça um left join de prod com produto

4) concatene tudo isso

5) crie seu calendario e ligue na tabela fato.

T+

Not applicable
Author

Cara,

Se a quantidade de tabelas que usem o caledário for pequeno, você também pode criar um calendário para cada uma das tabelas.

Cria uma aba separada para os calendário no script (fica mais fácil de gerenciar separando uma aba só pros calendários) e põe teus calendarios lá.

Em Vários casos específicos isso tem me ajudado.

Tenho um Exemplo que utilizei e deu muito certo. Talvez possa te ajudar.

Foi um caso de três tabelas que usavam calendário. A tabela de "Ordem_de_Serviço", "Parcelamento" e "Pagamento".

Exemplo Abaixo:

Calendario_Geração_OS:
LOAD date(ORSE_TMGERACAO_DATA)                                          as ORSE_TMGERACAO_DATA,
          Month(ORSE_TMGERACAO_DATA)                                      as Mês_Geração_OS,
          Year(ORSE_TMGERACAO_DATA)                                         as Ano_Geração_OS,
          Day(ORSE_TMGERACAO_DATA)                                          as Dia_Geração_OS,
          Date(MonthStart(ORSE_TMGERACAO_DATA),'MMM/YYYY')  as [Mês/Ano_Geração_OS],
          Week(ORSE_TMGERACAO_DATA)                                       as Semana_Geração_OS
Resident [Ordem_de_Serviço];

CalendarioPARC:
LOAD  date(PARC_TMPARCELAMENTO_DATA)       as PARC_TMPARCELAMENTO_DATA,
          Month(PARC_TMPARCELAMENTO_DATA)       as Mês_PARC,
          Year(PARC_TMPARCELAMENTO_DATA)        as Ano_PARC,
          Day(PARC_TMPARCELAMENTO_DATA)        as Dia_PARC,
          Date(MonthStart(PARC_TMPARCELAMENTO_DATA),'MMM/YYYY') as [Mês/Ano_PARC],
          Week(PARC_TMPARCELAMENTO_DATA)        as Semana_PARC
Resident [Parcelamento];


Calendario_Pagamento:
LOAD date([Data do Pagamento])       as [Data do Pagamento],
         Month([Data do Pagamento])        as Mês_do_Pagamento,
         Year([Data do Pagamento])        as Ano_do_Pagamento,
          Day([Data do Pagamento])        as Dia_do_Pagamento,
          Date(MonthStart([Data do Pagamento]),'MMM/YYYY') as [MêsStart/Ano_Pagamento],
          Date(MonthEnd([Data do Pagamento]),'MMM/YYYY')  as [MêsEnd/Ano_Pagamento],
          Week([Data do Pagamento])        as Semana_do_Pagamento
Resident [Pagamento];

cesaraccardi
Specialist
Specialist

Olá Rodrigo, segue em anexo exemplo usando ilha de datas. No exemplo eu tenho uma tabela com títulos, filtrando o calendário eu consigo saber quantos títulos foram emitidos, venceram e foram recebidos no mês selecionado sem a existência de relação lógica entre as tabelas.

Abraços.

Anonymous
Not applicable
Author

Obrigado pela ajuda de todos, tentei de várias formas colocadas aqui, porém acontecia sempre o mesmo problema, quando eu ligava os calendários pelo cod_prod os valores não batiam, e quando eu tentava ligar pelas datas dava referência circular.

A melhor solução foi usando ilhas de datas... essa função InMonth() eu não conhecia, e com o exemplo do Cesar ficou bem claro como utiliza-la.

Mais uma vez, obrigado pela ajuda de todos