2013-01-24 233 views
-1

这里的关系表如何将子报表值传递给主报表?

StudentName 
Course 
Marks 



Peter 
Bio 
65 

Peter 
Chem 
70 



Peter 
Music 
80 



David 
Chem 
50 

我怎样才能让类似以下内容

Peter   Total : 215 

Subject : Bio - 65 
Subject : Chem - 70 
Subject : Music - 80 

Peter   Total : 50 

Subject : Chem - 50 
+0

请不要在标题行中放置标签信息。标签系统旨在将问题妥善放置到不同类别中,并且非常适合这样做。它甚至可以正确设置,以便在没有帮助的情况下通过Google查找。 :-) 谢谢。 (另外,我认为你的第二个'Total'项目应该是“David”,应该不是吗?) –

+0

我建议改变标题 - 因为你的问题中没有任何内容表明子报表的用法。而且,为了达到这个目的,子报表也是过分的。见下面的答案:) – MrsTang

回答

4

我不会用一个子报表这个,因为这能够以更简单的方式来实现:您可以利用报告组和变量来实现此目的。确保数据按照输出顺序排序。

准备

  • 创建基于StudentName报表组。在报告中的报告审查员右键点击iReport并选择添加报告组。按照向导,为其命名(例如Student),选择StudentName作为组表达式,添加页眉但不添加页脚。
  • 创建一个变量来保存学生的总数。右键单击报表检查器中的报表检查器变量并选择添加变量。在属性面板中进行如下配置:名称:totalMarkByStudent,变量类:java.lang.Long,Calculation:Sum,Reset类型:Group,重置组:Student,变量表达式:$ F {Marks}。其余部分保持默认值。

报表设计

  • 将它从报告检查领域StudentName拖放到报表设计到学生组页眉区域。会弹出一个询问要显示的值的类型,选择字段值然后单击确定。
  • 将报表检查器中的变量totalMarksByStudent拖放到报表设计器中,放入学生组标题栏中。点击文本字段和在属性面板修改以下设置:

    • 宽度200(以允许更多的空间)
    • 文本字段表达式"Total : " + $V{totalMarkByStudent}
    • 表达式类java.lang.String
    • 评价时间Group(意味着值得到评估o NCE该组的处理结束)
    • 评价小组Student
  • 拖动并从报告检查员丢弃字段标记进入详细信息区域中报告设计。右键单击课程字段并选择编辑表达式。将表达式切换到"Subject : " + $F{Course},然后单击Apply。

使用此配置可​​以获得如下图所示的报告输出。 report output

对于这里的完整JRXML进一步参考使用报告组和变量:如果使用报表,而不是

我以为子报表paraemterized与学生ID显示

<?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="report3" language="groovy" pageWidth="595" pageHeight="842" columnWidth="555" leftMargin="20" rightMargin="20" topMargin="20" bottomMargin="20" uuid="0dfbb9b2-a9ce-4447-beee-37d653140dd1"> 
    <property name="ireport.zoom" value="1.0"/> 
    <property name="ireport.x" value="0"/> 
    <property name="ireport.y" value="0"/> 
    <queryString> 
     <![CDATA[select * from (
Select 'Peter' as StudentName, 'Bio' as Course, 65 as Marks 
union select 'Peter', 'Chem', 70 
union select 'Peter', 'Music', 80 
union select 'David', 'Chem', 50 
) tbl 

order by StudentName, Course]]> 
    </queryString> 
    <field name="StudentName" class="java.lang.String"/> 
    <field name="Course" class="java.lang.String"/> 
    <field name="Marks" class="java.lang.Long"/> 
    <variable name="totalMarkByStudent" class="java.lang.Long" resetType="Group" resetGroup="Student" calculation="Sum"> 
     <variableExpression><![CDATA[$F{Marks}]]></variableExpression> 
    </variable> 
    <group name="Student"> 
     <groupExpression><![CDATA[$F{StudentName}]]></groupExpression> 
     <groupHeader> 
      <band height="50"> 
       <textField> 
        <reportElement uuid="ea996b6c-d41d-47bb-bef1-5df580b5c161" x="0" y="30" width="100" height="20"/> 
        <textElement/> 
        <textFieldExpression><![CDATA[$F{StudentName}]]></textFieldExpression> 
       </textField> 
       <textField evaluationTime="Group" evaluationGroup="Student"> 
        <reportElement uuid="8ddc9b5b-9c57-4fce-8ed0-587c6b54143c" x="180" y="30" width="200" height="20"/> 
        <textElement/> 
        <textFieldExpression><![CDATA["Total : " + $V{totalMarkByStudent}]]></textFieldExpression> 
       </textField> 
      </band> 
     </groupHeader> 
    </group> 
    <detail> 
     <band height="20"> 
      <textField> 
       <reportElement uuid="f67b4e51-4da6-4758-b3d3-bd75de70c0f7" x="0" y="0" width="180" height="20"/> 
       <textElement/> 
       <textFieldExpression><![CDATA["Subject : " + $F{Course}]]></textFieldExpression> 
      </textField> 
      <textField> 
       <reportElement uuid="ea82c278-d2f3-4467-bf5d-8dab9ff99ae3" x="180" y="0" width="277" height="20"/> 
       <textElement/> 
       <textFieldExpression><![CDATA[$F{Marks}]]></textFieldExpression> 
      </textField> 
     </band> 
    </detail> 
</jasperReport> 

给定学生的数据。主报告在详细面板中显示StudentName字段和子报告。

  • 在子报表中创建一个变量total,用于计算学生的总数。
  • 在主报告中创建变量totalByStudent,计算类型设置为System
  • 点击子报表,在属性面板上点击返回值。单击添加并选择:子报表变量:总计,本地目标变量:totalByStudent,休息保留为默认值。点击确定。
  • 将变量totalByStudent拖放到细节区域中。选择它并在属性面板中将评估时间设置为乐队。输出将如上所示相同。

我建议使用报告组和变量的方法,因为它降低了报告的复杂性,并且这种方式的性能会更好。

相关问题