分组表格报告

时间:2013-01-24 12:45:06

标签: jasper-reports

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

群组属性在哪里以及如何完成。所有这些将以表格形式呈现,我无法在这里做。

请为我准备任何格式。

2 个答案:

答案 0 :(得分:1)

或者您可以执行以下操作(使用iReport):

  • 根据用户名添加报告组,不要添加组页眉和页脚
  • 将报表检查器中的字段拖放到报表设计器中的详细信息区域中。
  • 选择包含用户名的Text field,在属性面板中取消选中打印重复值

结果报告如下图所示。 report output

附上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}

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