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: 
junior_ehlke
Creator III
Creator III

Opinião sobre chaves Sintéticas "$Syn"

Boa tarde, gostaria da opinião de vocês sobre um problema que é a chave sintética. Particularmente não vi um baixo desempenho no meu projeto além do tempo de criação das chaves porém ja ouvi falarem que deve ser evitado. Hoje eu tenho 6 delas, não sei se isso é muito e a que ponto devo me preocupar com elas?

A maioria delas não os camspos "ID_unidade", "mes" e "ano".

Labels (1)
25 Replies
Anonymous
Not applicable

Boa tarde Hamilton !

Use o conceito da tabela FATO, ela pode criar a independência de chaves sintéticas.

Segue um link interessante:

Fact Table - Definition, Examples and Four Steps Design by Kimball

Abraços.

junior_ehlke
Creator III
Creator III
Author

Olha o que ele esta fazendo

$Syn 1 = id_unidade+mes

$Syn 2 = id_unidade+ano+mes

$Syn 3 = id_unidade+ano+mes+id_planocon

$Syn 4 = $Syn 1+$Syn 2

$Syn 5 = $Syn 1+$Syn 2+$Syn 3

$Syn 6 = $Syn 4+$Syn 5

Clever_Anjos
Employee
Employee

Vá em todas as tabelas (menos uma, a que possua todas as combinações, no seu caso provavelmente a funcionarios) que possuem a SK4 (funcionarios,VendasRateio,produtos,ApoioDctos,etc) e REMOVA os campos id_unidade,ano,mes e INCLUA aquela chave que mostrei como fazer.

junior_ehlke
Creator III
Creator III
Author

Fiz, ficou apenas com 1 chave mas os valores referente aos meses nao batem, acho que errei em algo.

na tabela que eu tenho que deixar os campos id_unidade, mes e ano eu faço o autonumberhash128(id_unidade,ano ,mes) as %key ou não?

em algumas tabelas eu tenho no campo id_unidade um apllymap, tem problema eu colocar junto no codigo exemplo:

autonumberhash128(ApplyMap( 'DePara', id_unidade),ano ,mes) as %key

junior_ehlke
Creator III
Creator III
Author

Deu boa, descobri o erro, deixei como principal uma tabela que nao tinha todos os meses de movimento,

vou criar tabelas de dimensões para os meses, anos e unidades. Muito obrigado pela ajuda, de 6 caiu para 1 chave.

Clever_Anjos
Employee
Employee

Agora você avalia se vale a pena remover essa também.

Normalmente uma SK apenas é inofensiva.

O problema é que elas costumam ser que nem aquele filme antigo "Gremlins". Se deixar crescer, vira uma praga incontrolável.

aderlanrm
Partner - Specialist
Partner - Specialist

Bem, como você pediu a opinião, acho que posso contribuir.

Eu nunca deixo chave sintética na minha modelagem e passei a usar o AutoNumberHash128 pelo óbvio, é numérico e colocar os campos separados por vírgula acho melhor do que concatenar.

Nem toda chave sintética significa erro, porém, como já dito a questão de desempenho, também existe o consumo de memória, não chega ser assustador, mas boa prática é boa prática! Rsrsrsrs...

Por exemplo, imagine uma tabela de cabeçalhos de notas fiscais, existe uma chave de NF e Serie, porém, nessa tabela, esses valores são únicos, para cada nota, já na tabela de itens da nota, esses mesmos campos, se repetem várias vezes em cada item, claro, o que gerará um chave sintética.

Então, nesse exemplo, só é necessário manter os campos NF e Serie da tabela de cabeçalho (menor quantidade) para uso no layout, a relação entre as duas tabelas se dará com o campo criado com a função AutoNumberHagh128.

Isso se aplica a qualquer chave composta (como é conhecido em banco de dados relacional).

Espero que seja útil, abraço.

Aderlan Rodrigues
Analista, Arquiteto de Dados e Piloto Amador Drone FPV
 (41) 9 9917-0869  www.BIdeAZ.com.br  Youtube.com/bideaz  Instagram.com/bideaz.in

"Nada é tão inútil quanto fazer eficientemente o que não deveria ser feito." (Peter Drucker)
junior_ehlke
Creator III
Creator III
Author

Então, foi muito útil sim. Estou vendo a importância da dimensão de tempo no Projeto.

Tenho um QVD aqui que outra pessoa fez que possui a dimensão de tempo até 2019, porém é gerada com uma chave id_tempo e não sei como implantar no meu projeto, conseguindo isso além de eliminar as chaves vou ter dimensão de tempo organizada.

junior_ehlke
Creator III
Creator III
Author

Preciso de mais uma ajuda, agora ao invés de MES, ANO, ID_UNIDADE eu tenho ID_TEMPO e IDUNIDADE. ótimo,

Porém o que fazer quando as tabelas não possuem todas as combinações possíveis? ou mês ou unidade, não seria "arriscado" escolher alguma e em um futuro estar faltando alguma destas informações? Pensei em escolher a tabela de venda, mas vamos dizer que uma loja não faça venda, apenas gerencial, esta não vai aparecer, sei la, usei um exemplo qualquer.

junior_ehlke
Creator III
Creator III
Author

Talvez, no meu caso como só gerou dois registros parecidos semelhantes, seria melhor deixar criar a chave normalmente não?