Skip to main content
Announcements
Join us at Qlik Connect for 3 magical days of learning, networking,and inspiration! REGISTER TODAY and save!
cancel
Showing results for 
Search instead for 
Did you mean: 
Not applicable

Relacionamentos de tabelas

Pessoal estou com um problema de referencia circular, acontece que tenho uma tabela SLO que guarda registros históricos de várias outras tabelas, mas o nome dos campos de PK e FK entre elas são diferentes e ao tentar renomear acontece esse problema de referencia circular.

Tem alguma forma de resolver isso? A  maneira que encontrei foi fazer um JOIN e gerar um QVD e renomear uma chave para ele.

Obrigado.

9 Replies
Anonymous
Not applicable
Author

posta uma imagem do seu modelo com a referência circular, fica mais fácil de ajudar.

Not applicable
Author

Essa tabela SLORESPONSE tem uma coluna FOREIGN_KEY que tem todos os IDs das outras tabelas

     FOREIGN_KEY,

     FOREIGN_KEY as %INCIDENT_ID,
     FOREIGN_KEY as %NUMBER_REQUEST,

Então eu renomiei para se relacionar com a tabela de INCIDENT

  FOREIGN_KEY as %INCIDENT_ID,

E quando fui renomear para se relacionar com a de REQUEST deu referência circular.

  FOREIGN_KEY as %NUMBER_REQUEST,

Coloquei o anexo dos QVDs.

nicolett_yuri

João, na imagem ainda não da para entender o seu modelo. Disponibilize mais informações para podermos te ajudar melhor.

No QlikView não pode existir um ciclo de ligação de tabelas (Tabela A liga com a B, que liga com a C, que liga com a A). Você consegue contornar isso utilizando recursos de junção de tabela, através de JOIn ou concatenate, e também através de LinkTable. Cada resolução vai depender muito de como estão os seus dados.

Not applicable
Author

O modelo não fica no BD então não tenho imagem dele, vou colocar o script onde eu faço a nomeação das chaves. O problema acontece no última tabela

Directory;
LOAD FOREIGN_KEY,
     FOREIGN_KEY as %INCIDENT_ID
     FOREIGN_KEY as %NUMBER_REQUEST

FROM

(qvd);

Directory;
LOAD INCIDENT_ID ,
     INCIDENT_ID as %INCIDENT_ID,

FROM
[..\qvd\INCIDENTSM1.qvd]
(qvd);

Directory;
LOAD NUMBER,
     NUMBER as %NUMBER_REQUEST

FROM
[..\qvd\REQUESTM1.qvd]
(qvd);

nicolett_yuri

João, é só enviar a imagem completa (que você enviou a pouco).

Seu script ilustra exatamente o cenário da referência circular. Provavelmente você vai ter que verificar a possibilidade de juntar essas tabelas, mas precisa entender a melhor forma para fazer isso.

Not applicable
Author

OK, organizei o modelo e anexei

nicolett_yuri

Olhando o seu modelo, a sua tabela SLORESPONSEM1 já esta ligada com a tabela REQUESTM1 através da tabela INCIDENTSM1. Nesta ligação, você depende que exista o valor na INCIDENTSM1 para sua informação chegar até a REQUESTM1.

O que existe em cada uma dessas tabelas e qual a informação que esta querendo chegar para ter feito a ligação que gerou a referência circular?

Not applicable
Author

O que acontece é que essa relação é para KMDOCUMENTM1. Então essa relação %CGU_CATEGORIA só é válida
de :
INCIDENT -> KMDOCUMENT
REQUEST -> KMDOCUMENT
PROBSUMARY -> KMDOCUMENT

Não existe valores entre as ( INCIDENT, REQUEST E PROBSUMARY ) como está apontado no modelo.
  -- Nem me atentei nesse ponto.


A tabela SLORESPONSEM1 tem essa coluna FOREIGN_KEY que recebe os ids dessas tabelas
( INCIDENT, REQUEST E PROBSUMARY )

A referencia circular acontece quando eu vou renomear 
  FOREIGN_KEY as %NUMBER_REQUEST

nicolett_yuri

Da forma que esta você não vai poder fazer essa ligação. Você precisa pensar em trabalhar com um modelo estrela, seja agrupando os fatos em apenas uma tabela ou com LinkTable. Veja esse link: Concatenate vs Link Table

Se optar por continuar com o modelo SnowFlake, então terá que repensar essa ligação através da coluna %CGU_CATEGORIA.

Fica um pouco difícil opinar sem ter o conhecimento das tabelas e os tipos de ligações entre elas.