Unlock a world of possibilities! Login now and discover the exclusive benefits awaiting you.
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.
posta uma imagem do seu modelo com a referência circular, fica mais fácil de ajudar.
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.
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.
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);
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.
OK, organizei o modelo e anexei
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?
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
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.