java报表工具技巧--如何在style Report中制作交叉分组报表
?
交叉表(Cross Tabulations)是一种常用的分类汇总表格。使用交叉表查询,显示源于表中某个字段的汇总值,并将它们分组,其中一组列在数据表的左侧,另一组列在数据表的上部。行和列的交叉处可以对数据进行多种汇总计算,如:求和、平均值、记数、最大值、最小值等。使用交叉表查询数据非常直观明了,被广泛应用。
?
交叉报表是报表当中常见的类型,属于基本的报表,是行、列方向都有分组的报表。这里牵涉到另外一个概念即分组报表。这是所有报表当中最普通,最常见的报表类型,也是所有报表工具都支持的一种报表格式。从一般概念上来讲,分组报表就是只有纵向的分组。传统的分组报表制作方式是把报表划分为条带状,用户根据一个数据绑定向导指定分组,汇总字段,生成标准的分组报表。
?
?
例如下图是典型的分组交叉表格是一份销售人员销售情况的汇总表,其中垂直方向是对销售收入来源进行的分组(包括销售地区、客户信息), 而水平方向中则是对销售收入和平均价格进行汇总。此汇总表复杂百出,涉及到纵向分组,又涉及到横向求和。
?
接下来看用Style Report 这款java报表工具如何实现此表的制作,过程步骤比较多,请耐心阅读:
?
?
1. 打开报表设计器,在工具栏中选择“新建”。?在“新建资源”对话框中,选择“空白表格式报表”。
?
2. 在报表的空白处点击右键菜单,选择“脚本”选项,然后打开报表脚本编辑窗口。
?
3. 在报表脚本编辑窗口的“装载”标签下输出脚本:
?
? ? var q1 = runQuery('customers');
?
? ? var q2 = runQuery('Order details');
?
以上脚本是将两个报表数据查询('customers' 和 'Order details')中的数据存放在q1,q2两个变量中。
?
4. 关闭报表脚本编辑窗口,在右侧的工具箱中选择”表格“组件,放入报表中。
?
5. 点击表格,打开右键菜单,在右键菜单中选择”表格->转换为公式表“。
?
?
?
6. 点击表格,打开右键菜单,在右键菜单中选择”属性”,打开表格属性窗口,选择“标题和结尾”标签,在表格行中输入“6”,在表格列中输入“4”,标题行为“0”。
?
?
下面的步骤中进行垂直方向上的数据分组设定,数据分组为两层分组,分别是地区和客户。
?
7. 点击表格中cell[2,0]单元格(第三行,第一列),在下方的表格属性窗口中选择“数据“标签,然后在公式输入框中输入以下脚本:
?
? ? toList(q1['state']);
?
q1['state']是提取“customers”数据查询中的“state"列的数据,toList 函数的作用是获取q1['state']中没有重复记录的所有数据。
?
?
8. 在属性窗口,选择”扩展单元格“和”垂直“方向的扩展。这个设置的作用是将表格单元格按照真实的数据列进行扩展。
?
9. 设置表格单元格的名称为"st",然后点击”应用“按钮。
?
?
?
10. 按住”Shift“键同时选中 cell[3,0]和 cell[4,0]两个表格单元格,然后打开右键菜单,在右键菜单中选择”表格->合并单元格“。
?
11. 在下方的属性窗口中选择“数据“标签”,然后在公式输入框中输入以下脚本:
?
? ? toList(q1['company_name@state:$st']);
?
q1['company_name@state:$st']是提取“customers”数据查询中的“company_name"列的数据结果,并且”company_name“将根据对应的”state“列进行分组。
?
12. 在属性窗口,选择”扩展单元格“和”垂直“方向的扩展,设置单元格的名称为"comp",在行分组中选中”st“,然后点击”应用“按钮。
通过以上的步骤,垂直方向上的两层分组(第一层:state,第二层:company_name)就被建立完成了
?
?
13. 按住”Shift“键同时选中 cell[0,3]和 cell[1,3]两个表格单元格,然后打开右键菜单,在右键菜单中选择”表格->合并单元格“。
?
给对应的表头加上对应的文字。
?
Cell[0,1] = '数量合计'
?
Cell[0,2] = '毛利额'
?
Cell[1,1] = '平均单价'
?
Cell[1,2] = '折扣金额'
?
Cell[5,0] = '销售合计'
?
Merged Cell[0,3] = '净收入'
?
?
?
?
14. 创建合计列,合计列是指定数据列的聚合,合计列被加入到最低层的分组上。加入下面的公式到对应的表格单元格中。
?
在 Cell[3,1]单元格中插入:
?
? ? sum(q2['Quantity@Company:$comp']);
?
在 Cell[4,1]单元格中插入:
?
? ? average(q2['Price@Company:$comp']);
?
在 Cell[3,2]单元格中插入:
?
? ? sum(q2['Total@Company:$comp']);
?
在 Cell[4,2]单元格中插入:
?
? ? sum(q2['=Total*Discount@Company:$comp']);
?
设置Cell[3,2]表格单元格的名称为:"grossRevenue"
?
设置Cell[4,2]表格单元格的名称为:"discountRevenue"
?
15. 创建净收入数据列,"净收入=总收入-折扣金额"。首先合并表格单元格,按住”Shift“键同时选中 cell[3,3]和 cell[4,3]两个表格单元格,然后打开右键菜单,在右键菜单中选择”表格->合并单元格“。然后在合并的表格单元格输入以下脚本:
?
? ? $grossRevenue-$discountRevenue;
?
16. 设置合并的表格单元格的名称为”netRevenue“ ,净收入为每个地区中客户的净收入。
?
17. 设置Cell[2,3]表格单元格的脚本为:
?
? ? sum($netRevenue);
?
此净收入为每个地区的合计
?
18. 设置Cell[5,3]表格单元格的脚本为:
?
? ? sum($netRevenue);
?
此净收入为所有地区的总计
?
?
?
最后依照最初的表格,在各表格单元格中设置字体格式、数字格式等。点击Preview即可得到此表:
?
?
?
Java报表工具--Style Report功能强大是业内的共识,但有一部分不了解它的用户对其复杂报表制作以及分组报表制作都表示怀疑态度,更多更详细的了解Style Report 产品信息和报表绘制知识请参阅:http://www.inetsoft.com.cn/services/KnowledgeBase/
?