Ireport制作交叉表.docx
《Ireport制作交叉表.docx》由会员分享,可在线阅读,更多相关《Ireport制作交叉表.docx(14页珍藏版)》请在冰豆网上搜索。
Ireport制作交叉表
Ireport制作交叉表
1、 打开iReport软件,【文件】——>【New】,选择一个报表模版,(以选择第一个模版为例),然后选择“OpenthisTemplate”,
如图1.1所示。
进入下一个页面,填写文件名,选择文件的存放位置,单击【下一步】,再点击【完成】。
图1.1
2、 从【组件面板】中拖拽“StaticText”控件到“PageHeader”部分,双击该控件来填写报表的题目——“学生成绩单“(可从“窗口”菜单中
打开【组件面板】)。
3、 单击图3.1中的图标,打开如图3.2所示的窗体,在【Reportquery】如图3.2光标所在的位置填写相应的SQL语句:
select
s.student_name_,s.subject_name_assubject,s.grade_fromstudents。
图3.1
图3.2
4、 如图4.1所示,注意要勾选上“AutomaticallyRetrieveFields”属性,使系统自动读取select出来的字段,如图蓝色底儿的区域。
之后点
击【OK】按钮(注意:
不是窗体的“ד)。
同时,这些字段也会在【ReportInspector】窗体的“Fields”区域显示,如图4.2所示。
图4.1
图4.2
5、 从“组件面板”中拖拽“Crosstab”控件(如图5.1)到“Summary”部分(注意交叉表必须放置在这个区域),会出现如图5.2所示的窗体,单击“下一步”,如图5.3所示,在“RowGroup1”处从查询出来的字段中选择“student_name_”作为每行的行标题,之后,单击“下一步”,如图5.4所示的,从“ColumnGroup1”处选择“subject”作为每列的列标题,再单击“下一步”,如图5.5,在“Date”处选择“grade_”作为表中的数据,如图5.6,对每个学生的成绩进行求和,如图5.7所,显示每个学生的总成绩,不显示每科的总成绩。
图5.1
图5.2
图5.3
图5.4
图5.5
图5.6
图5.7
6.可通过切换“Mainreport”和“Crosstab1”来编辑报表,在“Crosstab1”中可通过使用“Ctrl+鼠标滚轮“来实现图的缩放,以便于编辑。
图6.1
7.做完报表后,通过图7.1红色框中的“编译“按钮编译文件后,再点击绿色框中的“预览“按钮就可以观看做的报表的效果了!
弹出对话框随便输入个值即可。
图7.1
8.最终的效果图,如图8.1所示
图8.1
9.可以根据个人的需要在“Crosstab1”页面更改蓝色底儿框部分的列头的名称。
实现交叉表列排序:
1、 报表中通常我们的sql语句是这样写的:
selects.student_name_,s.grade_,s.subject_name_fromstudents,编译,运行之后,我们会看到如图1的结果,(注意:
列头的排序结果是数学、英语、语文)
图1
但是若想让列头的排列顺序是:
语文、数学、英语,这要怎么办呢?
可能有的人要说了,在sql语句中加个orderby语句就ok了,嗯,的确哦,在数据库中是可以的,或许碰巧在您的报表中也会就能得到您想要的结果,但那仅仅是“碰巧”哦,这里我要向大家介绍的是另一种实现您的报表列头排序的方法!
2、 在您的sql语句中动一下“手脚”,写成这样的:
selects.student_name_,s.grade_,
caseto_char(s.subject_name_)
whento_char('语文')thento_char('A语文')
whento_char('数学')thento_char('B数学')
whento_char('英语')thento_char('C英语')
endassubject
fromstudentsorderbys.subject_name_ desc,运行的结果如图2所示:
图2
3、 因为报表中显示了多余的字段,所以呢,我们就要想办法把多出来的字符串去掉!
如图3点击Crosstab1到交叉报表的页面,单击显示列标题的文本框,在窗体的右侧就会显示该文本框的属性
图3
4、 如图4所示:
在属性窗口中找到TextFieldExpression属性,点击最右边的“…”按钮
图4
5、 如图5.1所示,在黑色光标处写函数substring,结果如图5.2所示,然后单击【确定】
图5.1
图5.2
6、 编译,预览的效果如图6所示
图6
至此,就实现了我们想要的功能了!
还有一个小问题,不知您看出来没有啦,就是:
我添加了A、B、C后,报表就按照指定的顺序出来了,其实呢,iReport是按照首个字符的ASCII码来排序的呢。