通常我们设计的二维的交叉报表,横向的维度和纵向的维度是固定的,而用户希望更希望能根据自己的需要快速转换横向纵向维度来查看报表。
如上图所示,我们通过点击一个按钮或文字,就可将报表的行列维度互相转换,这样的动态转换效果要怎么设置实现呢?
这里我介绍两种方法实现方法:
1. 两张报表超链接
2. 单张报表动态判断
两张报表超链接
实现思路:
二维的交叉报表行列维度有两种情况,我们只需对应两种情况做两张报表,切换的按钮用超链接实现,连接的目标就是另一张报表。
具体实现:
1. 新建一张报表,文件名为行列转换 1.rpx, 数据源使用润乾设计器下自带的 demo 数据源,数据集使用 SQL 检索方式,SQL 为:SELECT 订单. 货主地区, 订单. 订单金额, 雇员. 姓氏 + 雇员. 名字 as 雇员 FROM 订单, 雇员 WHERE 订单. 雇员 ID = 雇员. 雇员 ID 。
2. 设置报表单元格表达式,润乾设计器中单元格可以直接写表达式,也支持拖拽字段生成表达式。
B1 单元格我们通过拖拽字段的方式生成表达式:在设计器右下角的数据集面板中可以看到我们刚才新建的数据集和字段,选择对应字段,然后选择分组,将字段拖拽到 B1 单元格中,
B1 单元格就会出现 =ds1.group(货主地区; 货主地区);
A2 单元格同 B1 的操作,不同的是选择雇员字段拖拽,生成的表达式为 =ds1.group(雇员; 雇员:1);
B2 单元格选择订单金额,选择汇总,汇总方式为求和,拖拽字段到 B2 单元格中,表达式为 =ds1.sum(订单金额)。
3. 修改单元格扩展方式,单元格的扩展方向默认为纵向,选中 B1,在右侧属性面板中设置扩展方式为横向扩展。
4.A1 单元格中直接写上行列互换,设置超链接表达式:“./showReport.jsp?rpx=/30 交互报表 / 行列互换 2.rpx”,超链接窗口为:_self。
5. 将当前报表另存一张,保存文件名为“行列转换 2.rpx”,将 B1 和 A2 单元格表达式对调,将 A1 的超链接表达式修改为:“./showReport.jsp?rpx=/30 交互报表 / 行列互换 1.rpx”。
经过以上设置,我们就完成了最不烧脑的二维报表行列互换报表的制作,使用 showReport.jsp 访问行列转换 1.rpx,点击行列转换那几个字就会变成行列转换 2.rpx,用户尽管点击切换,不用做条件判断。
单张报表动态判断
实现思路:
根据标志 flag 当前值,来改变他的值,根据这个值确定横向分组和纵向分组使用的字段。
具体实现
1. 将行列转换 1.rpx 另存一个报表,文件名为行列转换.rpx。
2. 报表中增加一个普通参数,参数名称为 change, 数据类型为整数,默认的参数值为 1;
两个动态参数:参数名称 group1, 数据类型为字符串,值表达式为 if(change==1,“货主地区”,“雇员”;
参数名称 Group2, 数据类型为字符串,值表达式为 if(change==1,“雇员”,“货主地区”)。
3. 修改单元格表达式
横向分组和纵向分组的字段通过动态参数的值,动态变化,将 B1 的表达式修改为 =ds1.group(${group1};${group1}:1),将 A2 的表达式修改为 =ds1.group(${group2};${group2}:1)。
4. 修改行列互换的超链接表达式
超链接表达式为:“./showReport.jsp?rpx=/30 交互报表 / 行列互换.rpx&change=”+if(change==1,-1,1)
经过以上设置,我们通过 showReport.jsp 访问行列转换.rpx, 在浏览器地址栏中,输入 url:
http://localhost:6868/demo/reportJsp/showReport.jsp?rpx=/30 交互报表 / 行列转换.rpx访问。
当点击表头中的行列转换文字,刷新的报表还是当前的报表,但 change 的参数值已经变成了 -1,并且行列的分组字段也发生了变化。
通过上面介绍的两种方法都能快速的实现报表行列互换的效果,如果不想做多张报表来实现,推荐使用第二种实现方法,如果不习惯条件判断的设置,可以使用第一种方法,虽然涉及到两张报表,只是另存第一张报表,简单修改就行,修改的工作量可忽律不计,也没有第二种方法的小弯弯绕,具体根据自己的情况选择合适的方法吧。
附件中是两种方法实现的报表实例,方便对照文章实现行列互换的需求。