2012-07-16 54 views
5

我想使用iReport创建一个汇总表。我的数据集正在返回所做的采购和价格清单。喜欢的东西如何在查询中对iReport中的特定行进行求和?

Milk, $1.23

Chicken, $5.45

Milk, $1.44

等。我希望我的桌子能够按产品细分我的产品。我想与列的表格:

  • #次购买产品(#rows其中产品牛奶),花在产品(价格的总和,其中产品是牛奶)
  • 总金额,
  • 和产品的平均价格(第2列除以第1列)。

我该怎么做?我一直在玩变数,我可以得到所有价格的总和,但我不知道如何使用更复杂的查询来处理数据的子集。

回答

8

这很容易。您可以在产品字段和该组上的两个变量上创建组:计算结果总数和平均总和。在内置变量的帮助下,您可以计算并显示该组中元素的数量。

这是工作示例:

<?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> 

此示例采用CSV文件作为数据源。您可以编辑查询 - 用SQL查询获取数据。

报告设计iReport的是:

The report design

其结果将是(通过预览在iReport的):

The result in iReport

你应该阅读这篇文章using variables in JasperReports和这篇文章约using groups in JasperReports

记得您应该在组使用前对数据进行排序。 从后约分组和从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

谢谢!我错过的伎俩是小组乐队。我一直在努力的关于iReport的部分是乐队。相同的变量将根据它进入的频带显示不同的结果。为什么数据是否被排序很重要? – Marianna 2012-07-17 22:55:51

+0

作为我原来的问题的附录...是否有一种方法来使用我的总和乘数?我有一个额外的列,状态,表明它的购买状态。我有一个STATE_SALES_TAX表,我想查询每条记录。如果在新泽西州购买我的牛奶,销售税是1.06。我在纽约买了另外一加仑,它是1.08。有没有一种方法可以用另一个表中的乘数来总结花在牛奶上的总花费?花在牛奶上的总金额= sum(eachMilkPx * salesTax(statePurchased)) – Marianna 2012-07-18 14:11:10

+0

是的,您可以创建任何您需要的变量表达式。 – 2012-07-18 14:20:16

相关问题