我想在Jasper iReport中使用每组的饼图,但我不知道如何为每个组创建数据集。
假设我有一张表格如下:
Table users
---------
category - user - status
然后我有以下SQL
select * from users order by category
我的显示器有一个简单的类别组,其中详细显示了每个用户及其状态。理想情况下,我会让每个类别组标题显示一个饼图,其中包含所有不同的状态及其在该组中的计数。我不知道如何在iReport中做到这一点。
如果我提前了解所有类别,我可以使用以下内容为每个类别创建数据集:
select status, count(user) from user where category = <current category> group by status
我正在尝试使用JRMapCollectionDataSource
来重置每个组,并使用变量从组中的行中提取数据,但我不是很熟悉整个重置组和增量范例
任何帮助?
答案 0 :(得分:4)
您无需按照以下步骤进行编程即可解决此问题:
以下是演示如何构建饼图的工作示例。在此示例中,我使用 csv 文件作为数据源。
该图表显示了每个类别的用户的数量。我使用变量 usersCount 来计算每个组中的用户,但可以使用内置变量 { {1}} 强>
这是我的 jrxml 文件:
$V{userGroup_COUNT}
这是我的 csv 文件(数据文件 - datasource ):
<?xml version="1.0" encoding="UTF-8"?>
<jasperReport ...>
<field name="category" class="java.lang.Integer"/>
<field name="user" class="java.lang.String"/>
<field name="status" class="java.lang.String"/>
<sortField name="category"/>
<sortField name="user"/>
<variable name="usersCount" class="java.lang.Integer" resetType="Group" resetGroup="userGroup" calculation="Count">
<variableExpression><![CDATA[$F{user}]]></variableExpression>
<initialValueExpression><![CDATA[0]]></initialValueExpression>
</variable>
<group name="categoryGroup">
<groupExpression><![CDATA[$F{category}]]></groupExpression>
<groupHeader>
<band height="135">
<pieChart>
<chart evaluationTime="Group" evaluationGroup="categoryGroup">
<reportElement x="158" y="0" width="200" height="135"/>
<chartTitle/>
<chartSubtitle/>
<chartLegend/>
</chart>
<pieDataset>
<dataset resetType="Group" resetGroup="categoryGroup" incrementType="Group" incrementGroup="userGroup"/>
<keyExpression><![CDATA[$F{user}]]></keyExpression>
<valueExpression><![CDATA[$V{usersCount}]]></valueExpression>
<labelExpression><![CDATA[String.valueOf($V{usersCount})]]></labelExpression>
</pieDataset>
<piePlot>
<plot/>
<itemLabel/>
</piePlot>
</pieChart>
<textField>
<reportElement x="0" y="0" width="100" height="20"/>
<textElement/>
<textFieldExpression><![CDATA["Category: " + $F{category}]]></textFieldExpression>
</textField>
</band>
</groupHeader>
</group>
<group name="userGroup">
<groupExpression><![CDATA[$F{user}]]></groupExpression>
</group>
<title>
<band height="79" splitType="Stretch"/>
</title>
</jasperReport>
结果将是(通过 iReport 预览):