28 Junho 2016

Construir Datasources em Tableau

Construir datasources em Tableau não é uma tarefa trivial devido à maneira como o software está construído.

A performance de Tableau vai estar directamente relacionada com as capacidades do CPU, RAM e disco.

No âmbito deste artigo, é apenas considerada uma ligação a uma base de dados.

Tipos de datasources

Tableau permite criar dois tipos de datasources:

  • Live – liga directamente à fonte de dados. No caso de uma base de dados, o software executa queries à base de dados em todas as alterações feitas no dashboard. Esta funcionalidade é ideal quando se trata de quantidades pequenas de dados;
  • Extract – para ser usado para grandes volumes de dados. Gera um ficheiro que pode ser guardado no servidor de Tableau ou directamente no computador do utilizador. Com esta opção, existe também uma optimização feita pelo software (lógica desconhecida) que aumenta a performance quando comparado com uma datasource live.

Performance considerations

A primeira coisa que deve ser considerada é que o Tableau representa dos dados adicionando colunas como se se tratasse de uma única tabela. Isto significa que problemas de performance são mais propensos a ocorrer quantas mais colunas são adicionadas à datasource.

Por omissão, se as tabelas forem adicionadas sem especificar as colunas, todas as colunas da tabela são adicionadas.

De forma a evitar o impacto de colunas desnecessárias, existem algumas boas práticas que fazem sentido aplicar ao construir datasources:

  • Em vez de arrastar as tabelas para o datasource builder, é preferível usar queries de select que incluem apenas os campos que se pretende usar na datasource através de custom SQL. Ao usar este método, é necessário garantir que se usa o mínimo de SQL e lógica possível, sem joins desnecessários a outras tabelas (criar views na BD para o efeito, é uma abordagem interessante);
  • Quando é necessário usar queries de SQL complexas, é preferível criar views directamente na BD visto que há um aumento de performance quando comparado com a execução de SQL a partir do Tableau;
  • Esconder colunas desnecessárias – isto pode ser feito directamente na configuração da datasource ou na lista de colunas. Apenas relevante para extracts visto que o tamanho do ficheiro final é muito mais pequeno, porque não contem informação desnecessária.

Abaixo está um exemplo do tamanho do extract para a mesma DS, com e sem colunas desnecessárias:

Neste caso cerca de 100 campos foram escondidos, mantendo apenas alguns, para efeitos de demonstração.

  • Recomenda-se a utilização dos filtros do Tableau de forma usar apenas informação relevante.

  • Ao criar um extract, é possível optimiza-lo. O Tableau disponibiliza uma opção que quando seleccionada vai calcular o valor dos campos calculados que de outra forma seriam calculados em runtime. Se a informação muda frequentemente, então esta opção precisa de ser usada com cautela ou então os campos poderão não ficar actualizados:

 

Integridade Referencial

Sempre que possível, é uma vantagem usar a opção Integridade Referencial. Esta funcionalidade garante que todos os registos presentes tabelas, tem um registo correspondente nas tabelas com que se relaciona. Esta opção faz mais sentido ser usada quando os dados têm integridade referencial, mas não está especificada directamente nas tabelas.

Como descrito no artigo Assuming Referential Integrity, ao ter duas tabelas que se relacionam através de uma chave, a operação natural é fazer um INNER JOIN entre as mesmas.

SELECT SUM([Sales Amount]) FROM [Sales] S INNER JOIN [Product Catalog] P ON S.ProductID = P.ProductID

No entanto, quando a opção de Integridade Referencial está activa, o Tableau apenas faz queries às tabelas de onde os dados estão a ser capturados, evitando assim a operação de INNER JOIN, consequentemente reduzindo o tempo de acesso aos dados:

SELECT SUM([Sales Amount]) FROM [Sales]

Isto apenas é possível porque o Tableau assume que os dados da parte esquerda da query existem e tem uma e apenas uma entrada nos dados da tabela do lado direito do join.

 

Publicar Datasources para o Tableau Server

Publicar uma datasource Live é bastante simples quando comparado com publicar um extract.

Para publicar um extract para o servidor, é necessário extrair todos os dados para o computador local. Esta operação gera um ficheiro que posteriormente pode ser publicado para o servidor.

Não é possível ter uma datasource Live publicada no servidor e transforma-la num extract directamente no servidor.

Truques para publicar Extracts

Recentemente foi necessário trabalhar num extract de grandes dimensões 2GB+ que levava várias horas a gerar no computador onde estava a ser desenvolvido. Como programador, não é exequível ter de esperar esse tempo para publicar a datasource para o servidor.

Assim, foi usada uma ideia simples de forma a reduzir o tempo de espera do processo.

Uma simples tabela de parâmetros foi criada que vai ter um valor que representa o número máximo de linhas que são extraídas pela query principal:

O parâmetro foi usado em combinação com a query principal:

Quando é necessário fazer um extract para ser publicado no servidor, este parâmetro é alterado para um valor baixo (por exemplo 100), e assim é possível fazer um extract em alguns minutos. O segundo passo é publicar no servidor, actualizar o parâmetro para um valor elevado e posteriormente iniciar o processo de refrescamento directamente no servidor.

Esta operação vai refrescar o extract que já se encontra publicado no servidor com todos os registos que devem estar incluídos.

   
.
.
.
.
.
.
      Sérgio Lopes
        Consultant