Qlik Community

Qlik Brasil

Group community for Brazil users. discussion only in Portuguese.

rvsilvestre
Contributor III

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.

Tags (1)
1 Solution

Accepted Solutions
Highlighted
cesaraccardi
Valued Contributor

Re: Ajuda referência circular

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.

7 Replies
Not applicable

Ajuda referência circular

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;

rvsilvestre
Contributor III

Ajuda referência circular

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
Valued Contributor

Ajuda referência circular

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

Ajuda referência circular

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

Re: Ajuda referência circular

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];

Highlighted
cesaraccardi
Valued Contributor

Re: Ajuda referência circular

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.

rvsilvestre
Contributor III

Re: Ajuda referência circular

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