2012-07-16 193 views
5

Estoy tratando de crear una tabla de resumen usando iReport. Mi conjunto de datos devuelve una lista de compras realizadas y precios. Algo así comoCómo sumar filas específicas en iReport con consulta?

Milk, $1.23

Chicken, $5.45

Milk, $1.44

y así sucesivamente. Quiero que mi mesa pueda desglosar mi artículo por producto. Quiero una tabla con columnas:

  • # de veces que se ha adquirido el producto (#rows donde la leche del producto),
  • cantidad total dólar gastado en el producto (suma de los precios donde el producto es la leche),
  • y el precio promedio del producto (columna 2 dividida por la columna 1).

¿Cómo puedo hacer esto? He estado jugando con variables y puedo obtener una suma total de todos los precios, pero no sé cómo hacer esto con un subconjunto de los datos usando una consulta más compleja.

Respuesta

8

Es bastante fácil. Puede crear un grupo en el campo producto y dos variables en este grupo: para contar suma de resultado y suma promedio. Con la ayuda de la variable incorporada puede calcular y visualizar la cantidad de elementos en este grupo.

Esta muestra está trabajando:

<?xml version="1.0" encoding="UTF-8"?> 
<jasperReport xmlns="http://jasperreports.sourceforge.net/jasperreports" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://jasperreports.sourceforge.net/jasperreports http://jasperreports.sourceforge.net/xsd/jasperreport.xsd" name="group_average2" language="groovy" pageWidth="595" pageHeight="842" columnWidth="555" leftMargin="20" rightMargin="20" topMargin="20" bottomMargin="20"> 
    <queryString> 
     <![CDATA[]]> 
    </queryString> 
    <field name="product" class="java.lang.String"/> 
    <field name="price" class="java.lang.Integer"/> 
    <sortField name="product"/> 
    <variable name="totalSum" class="java.lang.Double" resetType="Group" resetGroup="productGroup" calculation="Sum"> 
     <variableExpression><![CDATA[$F{price}]]></variableExpression> 
     <initialValueExpression><![CDATA[0]]></initialValueExpression> 
    </variable> 
    <variable name="averageSum" class="java.lang.Double" resetType="Group" resetGroup="productGroup" calculation="Average"> 
     <variableExpression><![CDATA[$F{price}]]></variableExpression> 
     <initialValueExpression><![CDATA[0]]></initialValueExpression> 
    </variable> 
    <group name="productGroup"> 
     <groupExpression><![CDATA[$F{product}]]></groupExpression> 
     <groupFooter> 
      <band height="20"> 
       <textField> 
        <reportElement x="0" y="0" width="122" height="20"/> 
        <box leftPadding="10" rightPadding="10"> 
         <topPen lineWidth="1.0"/> 
         <leftPen lineWidth="1.0"/> 
         <bottomPen lineWidth="1.0"/> 
         <rightPen lineWidth="1.0"/> 
        </box> 
        <textElement/> 
        <textFieldExpression><![CDATA[$F{product}]]></textFieldExpression> 
       </textField> 
       <textField pattern="###0.00;-###0.00"> 
        <reportElement x="244" y="0" width="122" height="20"/> 
        <box leftPadding="10" rightPadding="10"> 
         <topPen lineWidth="1.0"/> 
         <leftPen lineWidth="1.0"/> 
         <bottomPen lineWidth="1.0"/> 
         <rightPen lineWidth="1.0"/> 
        </box> 
        <textElement textAlignment="Right"/> 
        <textFieldExpression><![CDATA[$V{totalSum}]]></textFieldExpression> 
       </textField> 
       <textField> 
        <reportElement x="122" y="0" width="122" height="20"/> 
        <box leftPadding="10" rightPadding="10"> 
         <topPen lineWidth="1.0"/> 
         <leftPen lineWidth="1.0"/> 
         <bottomPen lineWidth="1.0"/> 
         <rightPen lineWidth="1.0"/> 
        </box> 
        <textElement/> 
        <textFieldExpression><![CDATA[$V{productGroup_COUNT}]]></textFieldExpression> 
       </textField> 
       <textField pattern="###0.00;-###0.00"> 
        <reportElement x="366" y="0" width="149" height="20"/> 
        <box leftPadding="10" rightPadding="10"> 
         <topPen lineWidth="1.0"/> 
         <leftPen lineWidth="1.0"/> 
         <bottomPen lineWidth="1.0"/> 
         <rightPen lineWidth="1.0"/> 
        </box> 
        <textElement textAlignment="Right"/> 
        <textFieldExpression><![CDATA[$V{averageSum}]]></textFieldExpression> 
       </textField> 
      </band> 
     </groupFooter> 
    </group> 
    <pageHeader> 
     <band height="19"> 
      <staticText> 
       <reportElement x="0" y="-1" width="122" height="20"/> 
       <box leftPadding="10" rightPadding="10"> 
        <topPen lineWidth="1.0"/> 
        <leftPen lineWidth="1.0"/> 
        <bottomPen lineWidth="1.0"/> 
        <rightPen lineWidth="1.0"/> 
       </box> 
       <textElement textAlignment="Center" verticalAlignment="Middle" markup="none"> 
        <font isBold="true" isItalic="true"/> 
       </textElement> 
       <text><![CDATA[Product]]></text> 
      </staticText> 
      <staticText> 
       <reportElement x="122" y="-1" width="122" height="20"/> 
       <box leftPadding="10" rightPadding="10"> 
        <topPen lineWidth="1.0"/> 
        <leftPen lineWidth="1.0"/> 
        <bottomPen lineWidth="1.0"/> 
        <rightPen lineWidth="1.0"/> 
       </box> 
       <textElement textAlignment="Center" verticalAlignment="Middle" markup="none"> 
        <font isBold="true" isItalic="true"/> 
       </textElement> 
       <text><![CDATA[Number of orders]]></text> 
      </staticText> 
      <staticText> 
       <reportElement x="244" y="-1" width="122" height="20"/> 
       <box leftPadding="10" rightPadding="10"> 
        <topPen lineWidth="1.0"/> 
        <leftPen lineWidth="1.0"/> 
        <bottomPen lineWidth="1.0"/> 
        <rightPen lineWidth="1.0"/> 
       </box> 
       <textElement textAlignment="Center" verticalAlignment="Middle" markup="none"> 
        <font isBold="true" isItalic="true"/> 
       </textElement> 
       <text><![CDATA[Total sum]]></text> 
      </staticText> 
      <staticText> 
       <reportElement x="366" y="-1" width="149" height="20"/> 
       <box leftPadding="10" rightPadding="10"> 
        <topPen lineWidth="1.0"/> 
        <leftPen lineWidth="1.0"/> 
        <bottomPen lineWidth="1.0"/> 
        <rightPen lineWidth="1.0"/> 
       </box> 
       <textElement textAlignment="Center" verticalAlignment="Middle" markup="none"> 
        <font isBold="true" isItalic="true"/> 
       </textElement> 
       <text><![CDATA[Average sum of order]]></text> 
      </staticText> 
     </band> 
    </pageHeader> 
</jasperReport> 

Esta muestra tiene como origen de datos de archivo CSV. Puede editar la consulta: para obtener datos con la consulta SQL.

El diseño de informes en iReport es:

The report design

el resultado será (a través de la vista previa en iReport):

The result in iReport

Debe leer este artículo sobre using variables in JasperReports y esta publicación acerca de using groups in JasperReports.

Por favor, recuerde que debe ordenar los datos antes de usar el grupo. La cita del poste sobre la agrupación y clasificación de la jasperforge.org:

In order to get an accurate data representation, the data in the data source should be already ordered according to the group expressions used in the report. One can either perform data sorting through the report query, or use the <sortField/> element.

+0

Gracias! El truco que me faltaba era la banda del grupo. La parte sobre iReport con la que sigo luchando es con las bandas. La misma variable mostrará resultados diferentes según la banda en la que vaya. ¿Por qué es importante si los datos están ordenados o no? – Marianna

+0

Como una adición a mi problema original ... ¿Hay alguna manera de usar un multiplicador en mi suma total? Tengo una columna adicional, estado, que indica el estado en el que se compró. Tengo una tabla STATE_SALES_TAX que quiero consultar para cada registro. Si compro mi leche en NJ, el impuesto a las ventas es 1.06. Compro otro galón en Nueva York y es 1.08.¿Hay alguna manera de resumir el total gastado en leche usando este multiplicador de otra tabla? Total gastado en leche = suma (eachMilkPx * salesTax (estadoComprado)) – Marianna

+0

Sí, puede crear la expresión de cualquier variable que necesite. –

Cuestiones relacionadas