Java报表软件技术讨论

Style Report报表专题
posts - 97, comments - 3, trackbacks - 0, articles - 3
  BlogJava :: 首页 :: 新随笔 :: 联系 :: 聚合  :: 管理

交叉表(Cross Tabulations)是一种常用的分类汇总表格。使用交叉表查询,显示源于表中某个字段的汇总值,并将它们分组,其中一组列在数据表的左侧,另一组列在数据表的上部。行和列的交叉处可以对数据进行多种汇总计算,如:求和、平均值、记数、最大值、最小值等。使用交叉表查询数据非常直观明了,被广泛应用。

 

交叉报表是报表当中常见的类型,属于基本的报表,是行、列方向都有分组的报表。这里牵涉到另外一个概念即分组报表。这是所有报表当中最普通,最常见的报表类型,也是所有报表工具都支持的一种报表格式。从一般概念上来讲,分组报表就是只有纵向的分组。传统的分组报表制作方式是把报表划分为条带状,用户根据一个数据绑定向导指定分组,汇总字段,生成标准的分组报表。

 

 

例如下图是典型的分组交叉表格是一份销售人员销售情况的汇总表,其中垂直方向是对销售收入来源进行的分组(包括销售地区、客户信息), 而水平方向中则是对销售收入和平均价格进行汇总。此汇总表复杂百出,涉及到纵向分组,又涉及到横向求和。

java报表工具技巧--交叉分部报表制作

接下来看用Style Report 这款java报表工具如何实现此表的制作,过程步骤比较多,请耐心阅读:

 

 

1. 打开报表设计器,在工具栏中选择“新建”。 在“新建资源”对话框中,选择“空白表格式报表”。

 

2. 在报表的空白处点击右键菜单,选择“脚本”选项,然后打开报表脚本编辑窗口。

 

3. 在报表脚本编辑窗口的“装载”标签下输出脚本:

 

    var q1 = runQuery('customers');

 

    var q2 = runQuery('Order details');

 

以上脚本是将两个报表数据查询('customers' 和 'Order details')中的数据存放在q1,q2两个变量中。

 

4. 关闭报表脚本编辑窗口,在右侧的工具箱中选择”表格“组件,放入报表中。

 

5. 点击表格,打开右键菜单,在右键菜单中选择”表格->转换为公式表“。

java报表工具技巧--交叉分组报表制作

6. 点击表格,打开右键菜单,在右键菜单中选择”属性”,打开表格属性窗口,选择“标题和结尾”标签,在表格行中输入“6”,在表格列中输入“4”,标题行为“0”。 
java报表工具技巧--交叉分组报表制作

下面的步骤中进行垂直方向上的数据分组设定,数据分组为两层分组,分别是地区和客户。

 

7. 点击表格中cell[2,0]单元格(第三行,第一列),在下方的表格属性窗口中选择“数据“标签,然后在公式输入框中输入以下脚本:

 

    toList(q1['state']);

 

q1['state']是提取“customers”数据查询中的“state"列的数据,toList 函数的作用是获取q1['state']中没有重复记录的所有数据。

 java报表工具技巧--交叉分组报表制作

8. 在属性窗口,选择”扩展单元格“和”垂直“方向的扩展。这个设置的作用是将表格单元格按照真实的数据列进行扩展。

 

9. 设置表格单元格的名称为"st",然后点击”应用“按钮。

java报表工具技巧--交叉分组报表制作

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“,然后点击”应用“按钮。java报表工具技巧--交叉分组报表制作

通过以上的步骤,垂直方向上的两层分组(第一层: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] = '净收入'
java报表工具技巧--交叉分组报表制作


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);

 

此净收入为所有地区的总计

java报表工具技巧--交叉分组报表制作

最后依照最初的表格,在各表格单元格中设置字体格式、数字格式等。点击Preview即可得到此表: 

java报表工具技巧--交叉分组报表制作

 

 

 


只有注册用户登录后才能发表评论。


网站导航: