Uma das dificuldades atuais em criar novos paineis facilmente na plataforma (com gráficos a partir dos dados vindos dos datasets) reside no fato de termos que escrever as consultas manualmente e criar views específicas para serví-las. Se existisse uma forma de salvar no banco de dados os filtros/agrupamentos de uma consulta (ex: de um QuerySet do Django), seria fácil criar uma view que recuperasse essas "perguntas" salvas, fizesse a desserialização dos filtros/agrupamentos, executasse as operações no banco e então serializasse os registros resultantes em JSON.
Poderíamos simplesmente adotar alguma ferramenta de BI (como o PowerBI e o QlikView), mas isso vai na contramão dos valores do projeto: não são software livre, dificultam o download dos dados por trás dos gráficos etc. Testei bastante o Metabase, mas não vi uma maneira simples de se fazer integração (o custo da integração talvez seja o mesmo ou maior de que aproveitar algo já implementado para o Django, com algumas eventuais personalizações para nossas necessidades).
Creio que o ideal, para resolver esse problema de maneira mais consistente, seria adotar algum padrão de filtros/agrupamentos em datasets que pudesse ser serializável/desserializável para JSON, algo como uma DSL genérica para consultas em datasets (SQL parece ser essa DSL, mas requer um parser mais complexo que algo baseado em JSON - talvez o moz-sql-parser possa resolver). Qualquer ferramenta de BI ou análise de dados deve utilizar algum formato interno - a pergunta é: existe algum formato aberto para isso? O mais perto que cheguei de encontrar algo nesse sentido foi na padronização de filtros para query strings em APIs, como em:
O problema de todas as abordagens da lista acima é a dificuldade de trabalhar com agrupamentos em consultas em múltiplas tabelas (como um simples SELECT coluna, COUNT(*) FROM tabela GROUP BY coluna).
O Microsoft PowerBI suporta múltiplos datasets e agrupamentos "por baixo dos panos", no seu JSON verborrágico que é trafegado entre o front e o backend.
GraphQL poderia resolver, mas talvez possa adicionar complexidade desnecessária também. Hasura.io também é super interessante.
Estou pensando em algo como pegar essa consulta:
SELECT
cnpj
FROM empresa
WHERE
uf = "SP"
AND municipio != "SAO PAULO"
ORDER BY cnpj;
Uma das dificuldades atuais em criar novos paineis facilmente na plataforma (com gráficos a partir dos dados vindos dos datasets) reside no fato de termos que escrever as consultas manualmente e criar views específicas para serví-las. Se existisse uma forma de salvar no banco de dados os filtros/agrupamentos de uma consulta (ex: de um QuerySet do Django), seria fácil criar uma view que recuperasse essas "perguntas" salvas, fizesse a desserialização dos filtros/agrupamentos, executasse as operações no banco e então serializasse os registros resultantes em JSON. Poderíamos simplesmente adotar alguma ferramenta de BI (como o PowerBI e o QlikView), mas isso vai na contramão dos valores do projeto: não são software livre, dificultam o download dos dados por trás dos gráficos etc. Testei bastante o Metabase, mas não vi uma maneira simples de se fazer integração (o custo da integração talvez seja o mesmo ou maior de que aproveitar algo já implementado para o Django, com algumas eventuais personalizações para nossas necessidades). Creio que o ideal, para resolver esse problema de maneira mais consistente, seria adotar algum padrão de filtros/agrupamentos em datasets que pudesse ser serializável/desserializável para JSON, algo como uma DSL genérica para consultas em datasets (SQL parece ser essa DSL, mas requer um parser mais complexo que algo baseado em JSON - talvez o moz-sql-parser possa resolver). Qualquer ferramenta de BI ou análise de dados deve utilizar algum formato interno - a pergunta é: existe algum formato aberto para isso? O mais perto que cheguei de encontrar algo nesse sentido foi na padronização de filtros para query strings em APIs, como em:
O problema de todas as abordagens da lista acima é a dificuldade de trabalhar com agrupamentos em consultas em múltiplas tabelas (como um simples
SELECT coluna, COUNT(*) FROM tabela GROUP BY coluna
).O Microsoft PowerBI suporta múltiplos datasets e agrupamentos "por baixo dos panos", no seu JSON verborrágico que é trafegado entre o front e o backend.
GraphQL poderia resolver, mas talvez possa adicionar complexidade desnecessária também. Hasura.io também é super interessante.
Estou pensando em algo como pegar essa consulta:
ou mesmo esse QuerySet:
e transformar em algo como: