【问题标题】:Is there way to generate table with subtotal in Jasper Report?有没有办法在 Jasper Report 中生成带有小计的表格?
【发布时间】:2014-09-11 11:26:10
【问题描述】:

有没有办法在 Jasper Report 中生成带有小计的表格?

我已经使用querystring 获得了一些reference 的小计。我想使用subDatasetJRBeanCollectionDataSource。如何在模板中进行小计?

模板

<subDataset name="dataSource">
    <field name="product" class="java.lang.String"/>
    <field name="qty" class="java.lang.Integer"/>
    <field name="date" class="java.lang.Date"/>
</subDataset>
<parameter name="TableDataSource" class="net.sf.jasperreports.engine.JRDataSource"/>
....
<jr:table ...>
    <datasetRun subDataset="dataSource">
        <dataSourceExpression><![CDATA[$P{TableDataSource}]]></dataSourceExpression>
    </datasetRun>
    ......  
</jr:table>

程序

list.add(new Product("AAA", 100, date));
list.add(new Product("AAA", 100, date));
list.add(new Product("AAA", 100, date));
list.add(new Product("BBB", 200, date));
list.add(new Product("BBB", 150, date));
list.add(new Product("BBB", 100, date));
new JRBeanCollectionDataSource(list));

预期输出

+--------+-----------+-------+
|Product |    Date   |  Qty  |
+--------+-----------+-------+
|AAA     | 08-08-210 | 100   |
|        | 08-09-210 | 100   |
|        | 08-10-210 | 100   |
+--------+-----------+-------|
|           SubTotal | 300   |
+--------+-----+-------------+
|BBB     | 08-08-210 | 200   |
|        | 08-09-210 | 150   |
|        | 08-10-210 | 100   |
+--------+-----------+-------|
|           SubTotal | 450   |
+--------+-----+-------------+

【问题讨论】:

  • 如何使用分组?
  • 是的,这就是我想要的。我只能通过querystring 获得参考。我想使用JRBeanCollectionDataSource
  • 您在使用 iReport 吗?如果是这样,请尝试按产品或描述创建一个组。
  • @CássioMazzochiMolin,我用它。它无法创建,因为这些字段在 `subDataset' 内。

标签: java jasper-reports


【解决方案1】:

我认为从报告中计算出来并放在DataSource中很简单

list.add(new Product("AAA", 100, date));
list.add(new Product("AAA", 100, date));
list.add(new Product("AAA", 100, date));
list.add(new Product("TOTAL:", 300, date)); //total AAA
list.add(new Product("BBB", 200, date));
list.add(new Product("BBB", 150, date));
list.add(new Product("BBB", 100, date));
list.add(new Product("TOTAL:", 450, date)); //total BBB
new JRBeanCollectionDataSource(list));

更新:您可以在数据库级别计算相同

select 0 as ord, * from t
union all
select 1 as ord, 'Total' as product, sum(Qty) as Qty, null as date from t group by
order by ord, product

【讨论】:

  • 我只是举个例子,这个来自db的列表怎么样?
  • 请检查我的更新帖子,报告模板必须自动列跨名称和日期...
【解决方案2】:

您可以使用报告分组。这是你应该做的。

  • 制作子报表将您的数据移到那里。
  • 在子报告中选择一个更改产品名称的组,即AAA
  • 获取一个在组更改时重置并计算总和 Qty 的变量。

有关报告组的更多参考,请访问this 链接。

编辑:

或者,您可以使用报告脚本来完成它。访问here 了解更多关于报告脚本的信息。

我建议你使用report scriplets,这样可以避免创建子报表和报表组。

【讨论】:

  • 谢谢。请查看我的帖子,我已经收到了。其中使用queryStringfield标签在外面。如果是这样,group 可以绑定它。我的fieldsubDataset 标签内。这是不可能的。你试过subDataset吗?不是queryString
猜你喜欢
  • 2021-07-29
  • 1970-01-01
  • 2018-06-13
  • 2015-08-19
  • 1970-01-01
  • 2012-03-27
  • 2016-07-09
  • 1970-01-01
  • 2014-06-19
相关资源
最近更新 更多