Video
En este video veremos cómo crear un reporte con datos agrupados, se
mostrará un resumen anual de clientes, agrupados por estado y ciudad.

¿Problemas con la lección? Pregunta en el foro
Código
Puedes descargar
el proyecto de esta lección. También puedes copiar el
código que se usa en el video por aquí:
En el archivo
controllers.xml:
<controller name="Customer">
<action name="printAnnualSummary"
class="com.yourcompany.invoicing.actions.PrintAnnualSummaryAction"
mode="list"
icon="printer"/>
</controller>
En el archivo
PrintAnnualSummaryAction.java:
public class PrintAnnualSummaryAction extends JasperReportBaseAction {
@Override
protected JRDataSource getDataSource() throws Exception {
return null;
}
@Override
protected String getJRXML() throws Exception {
return "AnnualBillingSummary.jrxml";
}
@Override
protected Map getParameters() throws Exception {
return null;
}
}
Transcripción
Hola, soy Mónica. En esta lección aprenderás a hacer un resumen anual de
clientes, los cuales estarán agrupados alfabéticamente por estado y
ciudad con una sumatoria por cada grupo.
Primero creamos un nuevo reporte llamado "annual billing summary". En
Dataset tipeamos el query para obtener una lista de clientes con la
cantidad de facturas y su monto facturado en este año. Nuestro objetivo
es mostrar un resumen del año actual, pero como las facturas de esta
aplicación ejemplo llegan hasta 2024, haremos que el reporte muestre
únicamente las de 2024. Probamos a ver si el query está bien hecho.
Perfecto. En el panel outline, hacemos clic derecho en el reporte y
creamos un grupo. Le damos el nombre STATE y seleccionamos STATE
también. No hace falta que el nombre sea igual a lo seleccionado.
Hacemos lo mismo con CITY. Vemos que al crear los grupos, se han
agregado headers y footers para cada uno. Arrastramos los fields al
reporte. En los headers no nos hace falta hacer cálculos, así que lo
dejamos así como está. Arrastramos TOTAL AMOUNT al footer de city y
seleccionamos SUM. Hay otros cálculos disponibles, pero no nos interesa.
Esto nos hará la sumatoria de TOTAL AMOUNT en cada grupo de CITY.
Hacemos lo mismo en STATE. Ordenamos un poco el reporte y probamos. Los
grupos se muestran correctamente, las sumatorias también. Aquí al
parecer la página se termina y corta los datos que se están mostrando.
Podemos hacer que la información del grupo se muestre junta. En Group
header de STATE tildamos en "keep together". Esto hará que si el grupo
de STATE a mostrar no entra en el espacio que sobra de la página, pasará
a la siguiente página. Obviamente, si el grupo es muy grande, tendrá que
separarlo igual. Hemos hecho que el grupo de STATE no se separe, pero
puede ocurrir que justo la información del grupo CITY se separe también.
Lo podemos arreglar de la misma manera. Si vemos la sumatoria de total
amount, es un elemento variable. Podemos crear una variable de la
siguiente forma. Clic derecho en variable y crear una. Le damos un
nombre, "number of customers". Este va a ser un Integer. En calculation
seleccionamos count y en expression ponemos el field de name. Por
último, en reset type seleccionamos STATE. Esta variable contará la
cantidad de NAME en cada grupo de STATE. Terminamos de ordenar el
reporte y lo probamos. Para esta ocasión, he hecho unos cambios en la
base de datos, agregando y modificando clientes y facturas. Copiamos el
reporte al proyecto.
En el archivo controllers.xml
vamos al controlador Customer y definimos una acción "print annual
summary" para el modo lista. Luego en el paquete actions creamos la
acción "Print annual summary action". Extendemos de Jasper Report Base
Action. Dejamos data source y parámetros como null, solo ponemos el
nombre del reporte. Listo. Iniciamos la aplicación. Perfecto.
Hemos podido visualizar todos los clientes que tuvimos en 2024, sus
facturaciones y lo más importante, agrupados en estado y ciudad. Si
tienes alguna duda o problema puedes preguntarnos por el foro, también
puedes descargar el código de esta lección por el link del repositorio,
ambos enlaces se encuentran en la descripción del video. Chao.