Agrupamento por colunas iReport

Tenho um relatório onde preciso agrupar as despesas por mês, em colunas criadas dinâmicamente.
Eu escolho o período de meses que filtra o relatório antes dele ser gerado.
Exemplo:

Escolho o período de março à julho.

Codigo       Descricao       MAR        ABR          MAI      JUN        JUL    TOTAL
311.01    Despesa tipo 1     50         30           5,10      32         44    161,10
311.02    Despesa tipo 2     39         84            2        20         13    158
                    TOTAL    89        114           7,10      52         57    319,10

Aí depois peço de agosto à novembro.

Codigo       Descricao       AGO        SET          OUT      NOV        TOTAL
323.01    Despesa tipo 1     31         54           22         9        116
323.02    Despesa tipo 2     71         12           17        11        111
                    TOTAL    102        66           39        20        227

A minha dúvida é como agrupar por meses cada linha do relatório…

estude crosstab isso ja ajudaria em muito o que vc ta querendo =)

abraço

Acho que esse recurso de crosstabs é exatamente o que preciso, mas sempre que tento usar crosstabs recebo essa excessão na hora de gerar o relatório:

Exception in thread "main" java.lang.ClassCastException: cannot assign instance of net.sf.jasperreports.crosstabs.base.JRBaseCrosstab to field net.sf.jasperreports.engine.base.JRBaseLineBox.boxContainer of type net.sf.jasperreports.engine.JRBoxContainer in instance of net.sf.jasperreports.engine.base.JRBaseLineBox

vc ta fazendo por JDBC? ou por DataSource?

se for por DataSource… vc tem que ver as variaveis estão iguais na entidade… se for por JDBC possivelmente vc ta recebendo um objeto e o Jasper espera por outro…

olha esse link

http://www.furutani.com.br/tutoriais/crosstab/tutorial_crosstab.pdf

é sobre como fazer com JDBC…

Faço com DataSource, passando pelo código java…

seguinte o crosstab só funciona no sumary… coloca ele lá que vai funcionar normalmente =)

desculpa demora em responder

Sem problemas!
Cara, vou te falar… Ele já tá no summary haha
Tá brabo… No google também não consigo achar solução…

me explica como vc ta fazendo…

vc ta enviando uma Lista para o jasper correto??

e dentro dessa lista tem o q??

no aguardo

Sim, eu passo pro fillReport(), do JasperFillManager, como um dos parâmetros, o JRBeanCollectionDataSource com a minha lista…

Na lista tem objetos da classe que quero usar no relatório, como em todos os outros relatórios.

posta seu codigo??

a entidade com a lista e a classe que gera o relatorio de preferencia

Bem, resolvi esse erro de forma ridícula: usei o iReport 4.5.1 pra fazer o relatório, mas no build path tava usando o .jar da versão 4.1.1.

O que me ajudou foi um site em russo (que traduzi pro inglês e consegui decodificar a má tradução):
http://www.sql.ru/forum/actualthread.aspx?tid=945697

Consegui!
Muito obrigado, cara.

Porém, estou com problemas pra agrupar da forma correta.
Agrupando sem passar um comparator, ele não agrupa as colunas de data.
Com o comparator, ele agrupa, mas fica tudo na ordem errada.

o código do comparator:

Tô tentando de tudo… Mas ainda não consegui nada…

@Override
	public int compare(Date o1, Date o2) {
		GregorianCalendar gc1 = new GregorianCalendar();
		GregorianCalendar gc2 = new GregorianCalendar();
		gc1.setTime(o1);
		gc2.setTime(o2);
		Integer m1 = gc1.get(GregorianCalendar.MONTH);
		Integer m2 = gc2.get(GregorianCalendar.MONTH);
		Integer y1 = gc1.get(GregorianCalendar.YEAR);
		Integer y2 = gc2.get(GregorianCalendar.YEAR);
		return ((m1.compareTo(m2)) - (y1.compareTo(y2)));
//		return m1.compareTo(m2);
//		return y1.compareTo(y2);
	}

Pra quem consegue ver o link direto:
http://img402.imageshack.us/img402/5969/errado.png -> com comparator
http://img855.imageshack.us/img855/7246/semcomparator.png -> sem comparator




Alguém?

EDIT: Não resolvido… :x

[Resolvido]
Consegui resolver usando um compareTo assim:

@Override
	public int compare(Date o1, Date o2) {
		GregorianCalendar gc1 = new GregorianCalendar();
		GregorianCalendar gc2 = new GregorianCalendar();
		gc1.setTime(o1);
		gc2.setTime(o2);
		Integer m1 = gc1.get(GregorianCalendar.MONTH);
		Integer m2 = gc2.get(GregorianCalendar.MONTH);
		Integer y1 = gc1.get(GregorianCalendar.YEAR);
		Integer y2 = gc2.get(GregorianCalendar.YEAR);
		return ((m1.compareTo(m2)) >>> (y1.compareTo(y2)));
	}

Porém, não sei explicar. Ainda não parei pra verificar. :?

Galera… Ainda tô com problema nisso…
Hoje fui verificar mais a fundo o relatório e vi que ele calcula todos os totais corretamente, mas exibe valores incorretos nas colunas.

Isso é por causa do Comparator.
Fui testar assim:

return ((m1.compareTo(m2)) - (y1.compareTo(y2)));  

e os valores ficam nas colunas corretas, os totais ficam corretos, mas as colunas ficam ordenadas apenas por mês (Jan/12, Fev/12 … Nov/11, Dez/11, nessa ordem).

A ordenação incorreta e as as propriedades do column group data no relatório estão como na foto em anexo.

Alguém tem uma idéia?

http://img440.imageshack.us/img440/3879/cabecalhoir.png



?