Tenho um arquivo com informações em fomato texto a ser importado. Ele não possui um
formato específico (xml, csv). Então fiz a leitura e recuperei as informações para um
padrão, salvando em uma tabela.
Analisando a uma tabela, as informações (resumo) estariam nesta forma:
ANO | COD_ESCOLA | NOME_ESCOLA | COD_ALUNO | NOME_ALUNO | DEFICIENCIA
Preciso de um relatorio semelhante a uma pivot table do excel onde nas colunas
eu teria os valores referentes as deficiências dos alunos (cegueira, baixa visão,
mental) e nas linhas a identificação as escolas para poder contar o tipo de deficiencia
por escola.
Por ser um pequeno módulo do sistema, dividi em:
- Importação - Leitura do arquivo e recuperação das informações importantes
- Padronização - DE/PARA para converter informações para o padrão
- Relatório - criação e exibição do pivot table ou cross table
Tudo isso fiz de forma estruturada e a montagem do pivot table foi através de uma
montagem do SQL no código da aplicação dividido em duas partes:
- Primeiro pego as informações sobre as Deficiencias existentes (com select distinct deficiencia)
- Segundo monto o SQL do cross table usando linguagem
Exemplo do SQL montado:
SELECT nome_escola,
sum(if(deficiencia=‘CEGUEIRA’,1,0)) as ‘CEGUEIRA’,
sum(if(deficiencia=‘BAIXA VISÃO’,1,0)) as ‘BAIXA VISÃO’,
sum(if(deficiencia=‘MENTAL’,1,0)) as ‘MENTAL’,
sum(if(deficiencia<>’’,1,0)) as 'TOTAL’
FROM situacaoescolar
GROUP BY nome_escola
ORDER BY nome_escola;
Aí é percorrer o resultset e montar o relatório.
O resultado esperado pelo cliente está Ok.
O desempenho do relatório está Ok.
Dúvidas:
Alguém tem alguma sugestão de modelagem/implementação para uma situação assim? Ou é melhor fazer na forma estrutural?
Até que ponto em um relatório pode ser interessante trabalhar diretamente com SQL ao invés de utilizar regras de domínio ou Value Objects (VOs) para obter informações desejadas?
