Relatório lento? DMR, Relacional ou OLAP?
- DMR
Coisa feia.. mas funciona basicamente como um cubo, tanto que MDX funciona.
Se seu relatório é em DMR e está lento, procure verificar o tamanho das tabelas envolvidas, esse modo foi desenvolvido para tratar de tabelas pequenas, agregadas, em tabelas muito grandes considere a abordagem normal.
- Relacional
Ai o bixo pega, pois podem ser muitos fatores, creio que os mais comuns são falta de índices e utilização de funções de aplicação logo de cara.
Sempre que for fazer um relatório, leve para a query somente o que for estar visível ou necessário para agregações, tenha certeza de que os relacionamentos estão bem feitos e analise a query para conferir.
Faça uma consulta paralela ao banco e compare os tempos do relatório e do banco, não pode ser muito diferente.
Funções como total( ... for) dificilmente são aplicadas no banco, e são geralmente tratadas na aplicação(servidor cognos), se forem utilizadas na primeira query farão um belo estrago, trazendo muito mais informação do que o necessário para só depois agregar, nesse caso, faça subqueries e só utilize essas funções depois que o nível de agregação do banco já foi feito.
- OLAP(Cubos)
Isso serve para todos os cubos MSAS, PowerCube, etc
Não faça detail filters, pois funciona como funções de aplicação, que antes de filtrar trazem todos os dados do cubo, e isso pesa pacas!!
Utilize slicers(filtros de contexto) e a função filter, que são muito mais performáticas.
Dúvidas? E-mail me!
Fala Tiago,
ResponderExcluirBeleza?
Acessei pela primeira vez seu blog e achei bem interessante.
Dúvida nesse post relacionado a lentidão em relatórios Relacionais. O que vc quis dizer com subqueries?? Poderia ser mais específico?
Abraço,
Roldan
Roldan,
ResponderExcluirQuando digo subqueries me refiro a primeiro você fazer uma consulta com as agregações e depois faça os calculos em cima do resulatdo dessa consulta, assim você fará cálculos com menos linhas, aumentando a performance.
Ex:
select a, b, c, total(c for b)
from
(select a, b, sum(c) c from tb1 group by a, b) tb2
Ah sim, agora entendi. Nada muito diferente do usual.
ResponderExcluirValeu.
Abraço,