我创建了一个报告来生成具有部门列表的用户。我需要计算组,但不是组内的记录。
如何使用 JasperReports 进行操作?
例如: -
**No: 1**
Name : User1
Department: Depart1
Depart2
Depart3
**No: 2**
Name : User2
Department: Depart1
Depart2
Depart3
**No: 3**
Name : User3
Department: Depart1
Depart2
Depart3
在上面的例子中,我需要计算3个用户的计数1,2,3。我不希望编号计算用户内的记录,这意味着我不需要计数来计算每个用户的部门数量。
目前,我为用户创建了一个组,并且自动创建了一个变量“User_COUNT”。我在我的细节乐队中使用它,但它似乎计算用户组中的每个记录。
答案 0 :(得分:5)
您可以在论坛上使用该变量。
样本:
<?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="count_groups" language="groovy" pageWidth="595" pageHeight="842" columnWidth="555" leftMargin="20" rightMargin="20" topMargin="20" bottomMargin="20" uuid="7ca8f323-3cc7-4980-9222-77fb0f8f556b">
<queryString>
<![CDATA[]]>
</queryString>
<field name="Name" class="java.lang.String"/>
<field name="Department" class="java.lang.String"/>
<variable name="cntUser" class="java.lang.Integer" incrementType="Group" incrementGroup="userGroup">
<variableExpression><![CDATA[($V{userGroup_COUNT} == 1) ? $V{cntUser} + 1 : $V{cntUser}]]></variableExpression>
<initialValueExpression><![CDATA[1]]></initialValueExpression>
</variable>
<group name="userGroup">
<groupExpression><![CDATA[$F{Name}]]></groupExpression>
<groupHeader>
<band height="50">
<textField>
<reportElement uuid="da974bc0-323d-4169-b584-eddb4ffcfa50" x="0" y="0" width="100" height="20"/>
<textElement/>
<textFieldExpression><![CDATA["No: " + $V{cntUser}]]></textFieldExpression>
</textField>
<staticText>
<reportElement uuid="57fcf335-26f2-44b4-89ad-11c1223c9539" x="0" y="30" width="100" height="20"/>
<textElement markup="none"/>
<text><![CDATA[Name :]]></text>
</staticText>
<textField>
<reportElement uuid="16ccb7f0-eb39-403e-b7c4-1c6f35989f3d" x="100" y="30" width="100" height="20"/>
<textElement/>
<textFieldExpression><![CDATA[$F{Name}]]></textFieldExpression>
</textField>
</band>
</groupHeader>
</group>
<detail>
<band height="20" splitType="Stretch">
<textField>
<reportElement uuid="4647a9aa-229e-4f5d-8d08-aca4cda1df2f" x="100" y="0" width="100" height="20"/>
<textElement/>
<textFieldExpression><![CDATA[$F{Department}]]></textFieldExpression>
</textField>
<staticText>
<reportElement uuid="bc4bd9ae-6c2f-43c2-823e-1501b76ef39a" x="0" y="0" width="100" height="20">
<printWhenExpression><![CDATA[$V{userGroup_COUNT} == 1]]></printWhenExpression>
</reportElement>
<textElement/>
<text><![CDATA[Department:]]></text>
</staticText>
</band>
</detail>
</jasperReport>
iReport 中的报告设计如下所示:
对于此输入数据(我在样本中使用了 CSV 数据源):
Name,Department
User1,Depart1
User1,Depart2
User1,Depart3
User2,Depart2
User2,Depart3
User3,Depart1
User3,Depart4
User3,Depart4
User3,Depart4
结果将是(通过 iReport 中的预览):
详细:
在此示例中,我使用变量 cntUser ,增量类型等于 组 (对于名为 userGroup 的组)。此变量仅针对每个组中的第一条记录递增(请参阅 variableExpression )(检查
$V{userGroup_COUNT} == 1
的)。
注意:如果您使用分组 ,请不要忘记对数据进行排序
答案 1 :(得分:0)
<variable name="COUNT_GROUP" class="java.lang.Integer" incrementType="Group" incrementGroup="province" calculation="Count">
<variableExpression><![CDATA[$V{COUNT_GROUP}]]></variableExpression>
<initialValueExpression><![CDATA[1]]></initialValueExpression>
</variable>