如何通过对特定列进行分组来在 iReport 5.0.0 中执行报告。例如
username category view
xmen news good
xmen media good
xmen radio bad
xmen tv ok
Ymen news good
Ymen media good
Ymen radio bad
Ymen tv ok
我可以很容易地将其作为表格报告来进行,但是当涉及到分组时,我被卡住了。
我想要一个显示如下的表格报告
username category view
xmen news good
media good
radio bad
tv ok
Ymen news good
media good
radio bad
tv ok
群组属性在哪里以及如何完成。所有这些将以表格形式呈现,我无法在这里做。
请为我准备任何格式。
答案 0 :(得分:1)
或者您可以执行以下操作(使用iReport):
Text field
,在属性面板中取消选中打印重复值 结果报告如下图所示。
附上JRXML以供进一步参考
<?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="report6" language="groovy" pageWidth="595" pageHeight="842" columnWidth="555" leftMargin="20" rightMargin="20" topMargin="20" bottomMargin="20" uuid="9ecb5f72-ce8e-4b32-bc4b-124460d6d018">
<property name="ireport.zoom" value="1.0"/>
<property name="ireport.x" value="0"/>
<property name="ireport.y" value="0"/>
<queryString>
<![CDATA[select * from (
select 'xmen' as username, 'news' as category, 'good' as view
union select 'xmen', 'media', 'good'
union select 'xmen', 'radio', 'bad'
union select 'xmen', 'tv', 'ok'
union select 'Ymen', 'news', 'good'
union select 'Ymen', 'media', 'good'
union select 'Ymen', 'radio', 'bad'
union select 'Ymen', 'tv', 'ok'
) tbl
order by username]]>
</queryString>
<field name="username" class="java.lang.String"/>
<field name="category" class="java.lang.String"/>
<field name="view" class="java.lang.String"/>
<group name="user">
<groupExpression><![CDATA[$F{username}]]></groupExpression>
</group>
<columnHeader>
<band height="20">
<staticText>
<reportElement uuid="6cb3e793-d932-4d29-aca4-3b1efa03a5dd" x="0" y="0" width="185" height="20"/>
<textElement/>
<text><![CDATA[username]]></text>
</staticText>
<staticText>
<reportElement uuid="341be19e-6a83-4b8d-9878-8e2c8760b014" x="185" y="0" width="185" height="20"/>
<textElement/>
<text><![CDATA[category]]></text>
</staticText>
<staticText>
<reportElement uuid="8778300d-b296-41d9-9d12-abda95a80c71" x="370" y="0" width="185" height="20"/>
<textElement/>
<text><![CDATA[view]]></text>
</staticText>
</band>
</columnHeader>
<detail>
<band height="20" splitType="Stretch">
<textField>
<reportElement uuid="4d88aa40-ee74-4535-99a4-e3aec64188d2" isPrintRepeatedValues="false" x="0" y="0" width="185" height="20"/>
<textElement/>
<textFieldExpression><![CDATA[$F{username}]]></textFieldExpression>
</textField>
<textField>
<reportElement uuid="c098560e-c140-4b9a-9599-ed0875014c0f" x="185" y="0" width="185" height="20"/>
<textElement/>
<textFieldExpression><![CDATA[$F{category}]]></textFieldExpression>
</textField>
<textField>
<reportElement uuid="1784b19e-6adb-4d3e-aa04-d172ee39a7cf" x="370" y="0" width="185" height="20"/>
<textElement/>
<textFieldExpression><![CDATA[$F{view}]]></textFieldExpression>
</textField>
</band>
</detail>
</jasperReport>
答案 1 :(得分:0)
使用iReport,您可以通过右键单击报表检查器中的报表名称并添加“报表组”来添加分组。 通过意识到您需要在查询设计器中对数据进行分组以及在报表设计器中添加组将主要添加2个新的频段,这将允许您管理特定于组的报表设计,例如突出显示组名等... 在设计器中添加组还可以让您管理变量的评估时间,这将使您能够对每个组中的所有元素求和。
但根据您的示例,您可以通过在用户名列的文本字段中使用表达式以及2个额外变量来解决问题。 添加一个等于$ F {username}但没有计算的变量,并将其命名为“currentValue” 添加第二个等于$ V {currentValue}的变量,并将其命名为“previousValue”
现在,在Report Inspector面板中的变量列表中,将变量“previousValue”拖到“currentValue”变量上方。因为JR从上到下执行变量,它将首先将“previousValue”赋予null,然后将当前值赋予“currentValue”,然后在下一行“currentValue”将是前一行值,并将分配给“previousValue” “然后”currentValue“将采用当前值。 因此,在文本字段表达式中,您只需输入
即可$V{previousValue}==$V{currentValue} ? "" : $F{username}
这样,用户名只会在第一次显示时显示。