-1

如何通过对特定列进行分组来在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

组属性在哪里以及如何完成。所有这些都将采用表格形式,我在这里无法做到。

请给我任何一种格式。

4

2 回答 2

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>
于 2013-01-25T12:41:18.197 回答
0

使用 iReport,您可以通过在报告检查器中右键单击报告名称并“添加报告组”来添加分组。通过意识到您需要在查询设计器中对数据进行分组以及在报表设计器中添加组将主要添加 2 个新频带,这将允许您管理特定于组的报表设计,例如突出显示组名称等...添加设计器中的组还允许您管理变量的评估时间,这将使您能够例如对每个组中的所有元素求和。

但是根据您的示例,您可以通过在用户名列的文本字段中使用表达式和 2 个额外变量来解决问题。添加一个等于 $F{username} 且不进行计算的变量并将其命名为“currentValue” 添加第二个等于 $V{currentValue} 的变量并将其命名为“previousValue”

现在,在 Report Inspector 面板的变量列表中,将变量“previousValue”拖到“currentValue”变量的上方。因为 JR 从上到下执行变量,它首先将 null 赋给“previousValue”,然后将当前值赋给“currentValue”,然后在下一行,“currentValue”将是上一行的值,并将分配给“previousValue” " 然后 "currentValue" 将采用当前值。因此,在您的文本字段表达式中,您只需输入

$V{previousValue}==$V{currentValue} ? "" : $F{username}

这样用户名只会在第一次出现时显示。

于 2013-01-25T12:24:10.947 回答