Já procurei muito mas não encontrei respostas, apenas perguntas similares a minha sobre essa questão no ireport.
Gostaria de calcular o percentual de rendimento em vendas de cada vendedor, a conta é muito simples.
Pego o total que ele vendeu / total geral da empresa * 100
$F{SUB_TOTAL} / $V{V_TOTAL} * 100
A minha conta funciona perfeitamente masssss apenas no último registro. Porque afinal isso acontece?
Acredito que o ireport faça a leitura registro a registro e ele não consegue entender que eu quero logo no promeiro registro o total geral, ou seja, $V{V_TOTAL} sendo a venda da empresa inteira.
Se tentar fazer $F{SUB_TOTAL} / $V{V_TOTAL} sendo a V_TOTAL uma somatória do campo SUB_TOTAL, não da muito certo, porque o V_TOTAL so trará o valor total no fim da leitura de todos os registros retornados pela sua consulta.
Ou seja… eu preciso do valor total logo no primeiro registro para poder fazer as conversões de percentuais… e não da para esperar o fim da leitura…
E o problemas de trazer o total no SQL está em perfomance… perco muito disso sendo que poderia fazer na própria ferramenta… se eu soubesse hehe)…
Nessas operações aritméticas com variáveis tipo essa de totalização, o que mais interfere no resultado é Primeiro: a Banda em que a variável esta localizada. Segundo: e tempo de avaliação e incremento da variável, se for relatório com agrupamento experimente setar o tempo em “group” senão “now” e Incremento “none” , posicione na banda correta tipo footer ou footer group, summary, vai depender do campo que vc quer totalizar.
Mesmo que vc coloque o group como “report” em uma variavel que fica no cabeçalho o total não vai aparecer certo. Isso ocorre porque o relatório é montado montado de cima para baixo… sem ter como voltar… ou seja… não tem como ter um valor total no cabeçalho sem passar pelos valores impressos no detalhe…
Para o seu caso… o ideal seria trazer o valor total direto no SELECT… e assim usa-lo nos subtotais… outra forma seria criar um subrelatório… onde no primeiro vc colocaria o select SUM com o total e passaria esse parãmetro para o sub usar nos calculos…
Obrigado pessoal mas não me conformo em ter que fazer um totalizador via SQL.
Isso seria um bug do ireport?
Pois nem colocando a variavel total_geral no cabeçalho funciona… o tempo de execução dele é conforme vc disse mesmo PadrE.
Já fiz trucentas combinações de bands e Evalution Time e não vai…
O que me deixa mais doido ainda é que sempre o último registro apresenta o valor correto.
Estou colocando um screenshot para analise. A coluna que gostaria de achar o valor correto é a %faturamento (que é o percentual do vendedor em relação ao faturamento total da empresa no periodo)
Que seria: new Double($V{totalfaturado}.doubleValue() / $V{geral_faturamento}.doubleValue() * 100)