Ireport - relatório com dois grupos

Pessoal, estou usando o IReport (última versão) para fazer um relatório de vendas por mês e por produto, usando dois grupos.
O primeiro grupo eu coloquei uma expression na data para agrupar por mês/ano. O segundo grupo, estou utilizando o código do produto/ou serviço. Esse código é um número + uma String (prod ou serv).

Ao invés de aparecer assim:

Mês 01/2009 (1º grupo)
                       Produto 1            R$ 200,00 (2º grupo)
                       Produto 2            R$ 200,00

Está ficando assim, agrupando somente o mês mas não o produto

Mês 01/2009
                       Produto 1            R$ 100,00
                       Produto 2            R$ 100,00
                       Produto 1            R$ 100,00
                       Produto 2            R$ 100,00

Segue o xml do relatório, mas já estou sem oque fazer pois o 1º grupo funciona sem problemas.

	<variable name="mesAno" class="java.lang.String" resetType="Group" resetGroup="MesAno">
		<variableExpression><![CDATA[br.com.unicar.utils.DateUtils.formatDate($F{dataFaturamento}, "MMM/yyyy")]]></variableExpression>
	</variable>
	<variable name="valorTotalSoma" class="java.lang.Double" resetType="Group" resetGroup="ProdutoServico" calculation="Sum">
		<variableExpression><![CDATA[$F{valorTotal}]]></variableExpression>
		<initialValueExpression><![CDATA[0]]></initialValueExpression>
	</variable>
	<group name="MesAno">
		<groupExpression><![CDATA[$V{mesAno}]]></groupExpression>
		<groupHeader>
			<band height="23">
				<textField evaluationTime="Group" evaluationGroup="MesAno">
					<reportElement x="0" y="0" width="100" height="20"/>
					<textElement/>
					<textFieldExpression class="java.lang.String"><![CDATA[$V{mesAno}]]></textFieldExpression>
				</textField>
			</band>
		</groupHeader>
	</group>
	<group name="ProdutoServico">
		<groupExpression><![CDATA[$F{codigo}]]></groupExpression>
		<groupFooter>
			<band height="24">
				<textField evaluationTime="Group" evaluationGroup="ProdutoServico">
					<reportElement x="386" y="0" width="100" height="20"/>
					<textElement/>
					<textFieldExpression class="java.lang.Double"><![CDATA[$V{valorTotalSoma}]]></textFieldExpression>
				</textField>
				<textField>
					<reportElement x="100" y="0" width="100" height="20"/>
					<textElement/>
					<textFieldExpression class="java.lang.String"><![CDATA[$F{codigo}]]></textFieldExpression>
				</textField>
			</band>
		</groupFooter>
	</group>


Pessoal, percebi agora oque está acontecendo é que o relatório não agrupa os produtos por causa da ordem dos dados no datasource. Antes de enviar para o relatório eu ordeno por mês/ano (MMM/yyyy) e por produto. Porém no IReport, ordenei pelo mês/ano (date) e por produto.

Aliás, é mesmo importante a ordem dos dados para fazer agrupamentos? Nunca tive tanto problema com agrupamento por causa de um sort.
Já prevendo o ínicio de uma grande gambiarra.

ele naum vai agrupar por produto pra vc , ate por que pelo que vi vc precisa dos totais no campo valor do produto,faca um select que traga a data o produto o soma do total dos produtos agrupados por mes e no rel agrupe por mes.

Era exatamente oque eu ia citar,

Faça todo group by no SQL, e envie para o relatório as informações de maneira organizada…

Att. Jonas

Já pensei nisso, porém preciso agrupar por Mês/Ano e por Produto. Estou usando JPA, e não encontrei nenhuma função que leia um date da base de dados e agrupe no formato MMM/yyyy (Ex: Jan/2010).

Se não encontrar utilize Query e monte a query no formato jdbc

Mas, duvido muito não existir algo assim…

att. Jonas