openxava / documentación / Generación de informes - Lección 10: Datos agrupados

×Novedad: OpenXava con IA - Refinar la UI (Parte 2) - 1 de diciembre · Leer más

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.