Metabase + Django: Visualização de dados forma prática e segura

Thiago Ferreira
WhatsGood Dev
Published in
4 min readSep 2, 2021

Introdução

Já sabemos que os dados são os recursos mais valiosos para empresas e clientes. Mas não basta apenas possuir muitos dados se eles não estão visíveis e compreensíveis para as partes interessadas.

Com base isso, vemos que a visualização de dados é essencial para geração de valor: Precisamos da informação certa, pras pessoas certas e na hora certa 🎯

Relatórios do metabase embutidos na nossa plataforma

O grande dilema

Existem muitas soluções para visualização de dados, desde alternativas pagas, gratuitas e até construir a própria solução interna.

Construir a própria solução de forma que seja flexível e funcional o suficiente é uma tarefa muito desafiadora. Além disso, a manutenção & custos a longo prazo dessa solução é sempre um fator a ser considerado.

Neste artigo vamos ver uma abordagem com duas tecnologias open source (Metabase + Django) para criar uma plataforma completa, flexível e customizável de visualização de dados.

Parte 1 — Conhecendo o Metabase

Metabase é uma plataforma open source de business intelligence e visualização de dados que nos permite gerar perguntas/relatórios sobre os dados e mostrar as respostas em formatos que façam sentido, sejam gráficos ou tabelas detalhadas.

É possível conectar diversas fontes de dados ao Metabase (como postgreSQL, MySQL, Big Query, MongoDB etc) e gerar relatórios diretamente pela interface web. Os relatórios podem ser escritos em SQL ou gerados a partir da interface, sem código algum.

É uma ferramenta incrível por si só e a parte que vamos explorar nesse artigo serão os Embedded Reports. Confira a documentação completa nesse link.

Os embedded reports são relatórios que podem ser embutidos em qualquer aplicação fora do metabase, sendo uma ótima opção pra incluir nas suas próprias plataformas.

Parte 2 — Preparando o Django para integrar com o Metabase

Django é um framework web em python, bastante flexível e nos possibilita criar APIs Rest ou páginas web com muita facilidade.

Já que podemos embutir relatórios do metabase em nossas aplicações, só precisamos de uma forma de ligar as pontas.

Pra isso, usaremos o Django pra gerar e disponibilizar os links do metabase.

Modelos necessários

Vamos precisar inicialmente dessas duas entidades no banco de dados:
- ReportEngine: Esse modelo representa a ferramenta responsável por gerar os links dos relatórios. Nesse momento, precisaremos apenas de uma instância do metabase, mas nada impede que tenhamos outros mecanismos ou fontes de dados no futuro.
- EmbeddedReport: O relatório embutido de fato. Aqui precisamos saber qual é o tipo de relatório (question ou dashboard).

Gerando links com as permissões e filtros corretos

Agora que temos nossos registros de ReportEngine e EmbeddedReport, precisamos construir um método pra gerar o link do relatório. A parte importante desse método é que ele precisa implementar todos os filtros necessários para que o usuário em questão veja apenas os dados que ele tem acesso (veja a linha 21):

Disponibilizando os links via APIs

Agora ficou fácil: basta expor uma API listando todos os relatórios disponíveis. Uma outra abordagem possível seria gerar uma página web contendo os relatórios dentro de iframes. Como no nosso caso temos uma backend e frontend separados, optamos por uma API Rest:

Mas é seguro?

SIM! 🚨 Com alguns cuidados: 🚨

O Metabase usa tokens JWT para gerar a autenticação para ver os embedded reports.

Ao gerar o link do relatório, precisamos passar todos os parametros necessários para garantir que o usuário acessando o relatório pode ver APENAS os dados que ele tem acesso. Isso é feito por meio de filtros bloqueados no metabase.

Na imagem abaixo, vemos que temos 3 filtros:

  • organization_id — Bloqueado: Isso significa que apenas nosso backend pode colocar esse parâmetro, não permitindo que usuários finais manipulem esse filtro.
  • Market Date e Market — Editáveis: O usuário final poderá editar esses filtros como desejar ;)

Conclusão

Aqui na equipe WhatsGood conseguimos organizar um processo de visualização de dados com menos de 2 semanas de trabalho (contando que já tinhamos o Metabase instalado).

Com isso agora podemos disponibilizar dados para nossos clientes de forma muito rápida e flexível e isso favorece muito nosso time to market e custo de oportunidade.

Uma outra grande vantagem é poder baixar os resultados em formato CSV, XLSX ou JSON, o que garante ainda mais flexibilidade para o usuário:

Deixo um grande agradecimento ao time do Metabase que criou uma solução tão incrível e disponível para todos — e aproveito pra convidar à todos a conhecer a ferramenta 🙌🚀

--

--