gpt4 book ai didi

jasper-reports - 如何使用查询对 iReport 中的特定行求和?

转载 作者:行者123 更新时间:2023-12-04 17:53:53 25 4
gpt4 key购买 nike

我正在尝试使用 iReport 创建一个汇总表。我的数据集正在返 repo 买 list 和价格。就像是
Milk, $1.23Chicken, $5.45Milk, $1.44
等等。我希望我的表格能够按产品分割我的项目。我想要一个带列的表:

  • 购买产品的次数(#rows where product milk),
  • 在产品上花费的总美元金额(产品为牛奶的价格总和),
  • 和产品的平均价格(第 2 列除以第 1 列)。

  • 我怎样才能做到这一点?我一直在玩弄变量,我可以获得所有价格的总和,但我不知道如何使用更复杂的查询对数据的子集执行此操作。

    最佳答案

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

    这是工作示例:

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

    关于jasper-reports - 如何使用查询对 iReport 中的特定行求和?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11507084/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com