Skip to main content
cancel
Showing results for 
Search instead for 
Did you mean: 
Anonymous
Not applicable

Link table ou Concatenate

Ola,

sei que esse deve ser um assunto muito antigo do QlikView mas como eu sou novato isso me gera duvidas, quando eu estudei o QlikView o entendimento que tive é que quando você trabalha com fatos com diferentes estruturas a link table seria uma opção, quando as tabelas tem a mesma estrutura o concatenate seria um opção, não falava sobre performance e coisas do tipo, como eu tenho 5 fatos atualmente e elas tem vários campos diferentes uma da outra eu optei pela link table pelo motivo de conseguir ter todas as fatos no modelo com apenas os campos que não coincidem nas tabelas e também pelo fato de eu ter uma unica tabela central com todas as chaves primarias que aparecem de forma distinta, do meu ponto de vista naquele momento esse era o modelo perfeito já que eu conseguia ter todas as fatos que precisava e ainda economizar espaço.

Como tive um problema de uso de CPU no servidor esses dias (cm grandes chances de ser por um campo inputfield) eu acabei estudando métodos de de otimizar o modelo de todas as formas possíveis lendo artigos e com a ajuda da comunidade, isso me fez chegar a essa postagem https://community.qlik.com/blogs/qlikviewdesignblog/2012/09/12/to-join-or-not-to-join?&_ga=1.2121170...

Então pelo que eu entendi de tudo que eu li sobre o velho caso do concatenate vs linktable é que o concatenate teria mais performance do que a link table pelo fato de não ser necessário fazer joins entre tabelas pra obter os resultados, como o qlikview faz os cálculos em tempo real de acordo com as seleções dos usuários a performance poderia cair no caso da linktable devido ser necessário buscar resultados em diferentes tabelas, principalmente em modelos que trabalham com muitos dados e o meu modelo tende a ficar bem volumoso. O autor recomenda sempre concatenar as fatos.

Pelo que eu percebi existe um grupo de pessoas que preferem o concatenate e outras preferem a link table, até esse momento concatenar aparenta ser muito mais vantajoso do que usar a link table, eu gostaria de saber a opinião de vocês sobre isso, o que vocês preferem usar. LinkTable ou Concatenate? se possível explicar porque prefere esse método.

No meu caso eu consigo sair da LinkTable e ir pro Concatenate sem grandes problemas conforme seguem as imagens abaixo:

link.png

conc.png

A concatenação me gerou a seguinte duvida

Nas fatos eu tenho valores de Volume, VolumeKE (volume mutiplicado por um fator), e faturamento, então por exemplo na fato Objetivo esses valores seriam a meta, na fato faturamento seria o realizado, na fato pedidos seriam os valores que estão para ser faturados.

atualmente eu uso nomes diferentes para essas colunas, exemplo: faturamento_volume, objetivo_volume, pedidos_volume. Estou pensando em criar apenas uma coluna com o nome de volume e criar um flag no script que identifica de qual tabela é esse registro, então por exemplo eu teria tudo que for fato faturamento o flag = 1 e tudo que for de pedidos o flag = 2, assim se eu quiser somar somente o valor de volume de pedidos eu faria uma sum({<flag = {2}>} volume). Seria uma boa pratica fazer dessa forma?

Obrigado

Labels (4)
1 Solution

Accepted Solutions
Clever_Anjos
Employee
Employee

A resposta do que é o melhor é sempre um "depende". Cada modelo comporta-se diferente dependendo de vários fatores

  • Quantidade de registros em cada tabela
  • Quantidade de valores distintos em cada campo
  • Como as expressões são montadas. Por exemplo se uma expressão precisa de valores de duas fatos distintas é melhor que essas fatos sejam concatenadas. Mas isso para uma expressão, pode melhorar uma expressão e piorar outras
  • Uma link table é um modelo mais "elegante", mas uma seleção normalmente leva a 2 'hops' (saltos entre tabelas Dimensão > Link > Fato)
  • Uma tabela concatenada perde em elegância mas pode (nem sempre) leva a melhor performance.

O que faço?

     Eu testo as duas e comparo velocidade x memória.

Como faço?

     Parto do modelo original, crio outra app que faz um binário e converte para uma Link Table e depois comparo as duas navegando pela aplicação e usando o Document Analyzer (Ele "dedura" objetos com muito uso de RAM e tempo de cálculo)

View solution in original post

4 Replies
Clever_Anjos
Employee
Employee

A resposta do que é o melhor é sempre um "depende". Cada modelo comporta-se diferente dependendo de vários fatores

  • Quantidade de registros em cada tabela
  • Quantidade de valores distintos em cada campo
  • Como as expressões são montadas. Por exemplo se uma expressão precisa de valores de duas fatos distintas é melhor que essas fatos sejam concatenadas. Mas isso para uma expressão, pode melhorar uma expressão e piorar outras
  • Uma link table é um modelo mais "elegante", mas uma seleção normalmente leva a 2 'hops' (saltos entre tabelas Dimensão > Link > Fato)
  • Uma tabela concatenada perde em elegância mas pode (nem sempre) leva a melhor performance.

O que faço?

     Eu testo as duas e comparo velocidade x memória.

Como faço?

     Parto do modelo original, crio outra app que faz um binário e converte para uma Link Table e depois comparo as duas navegando pela aplicação e usando o Document Analyzer (Ele "dedura" objetos com muito uso de RAM e tempo de cálculo)

Anonymous
Not applicable
Author

Comparei essa versão sem link table e a memoria por usuário caiu de 6.1mb para 3.5mb, quando você diz que compara a velocidade x memoria é essa memoria por usuário que você olha?

Eu queria entender melhor esse document analyser, você leu algum tutorial sobre ele?

Na comparação da aba sumario o tempo de calculo do modelo com a fato no meio caiu mas a memoria ram aumentou.

Na imagem abaixo os dados do lado esquerdo são sem link table.

Não sei interpretar esse resultado, por ter aumentando ram é algo a se preocupar?

Sem título.png

Clever_Anjos
Employee
Employee

Vá na aba "Objects", lá cada objeto tem memoria utilizada e tempo de cálculo

Anonymous
Not applicable
Author

O tempo de calculo dos objetivos reduziu bastante com o concatenate, tinha coisas com tempo de calculo acima de 1000 e caiu pra 100 e o object size também diminuiu, estava em 7.522.376 e foi para 4.933.008.

Acho que vou ficar nesse modelo concatenado mesmo.

Obrigado mais uma vez Clever.