报表如何实现行列互换效果?

Posted xiaohuihui-11

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了报表如何实现行列互换效果?相关的知识,希望对你有一定的参考价值。

通常我们设计的二维的交叉报表,横向的维度和纵向的维度是固定的,而用户希望更希望能根据自己的需要快速转换横向纵向维度来查看报表。

技术图片

如上图所示,我们通过点击一个按钮或文字,就可将报表的行列维度互相转换,这样的动态转换效果要怎么设置实现呢?

这里我介绍两种方法实现方法:

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,并且行列的分组字段也发生了变化。

技术图片

通过上面介绍的两种方法都能快速的实现报表行列互换的效果,如果不想做多张报表来实现,推荐使用第二种实现方法,如果不习惯条件判断的设置,可以使用第一种方法,虽然涉及到两张报表,只是另存第一张报表,简单修改就行,修改的工作量可忽律不计,也没有第二种方法的小弯弯绕,具体根据自己的情况选择合适的方法吧。

以上是关于报表如何实现行列互换效果?的主要内容,如果未能解决你的问题,请参考以下文章

在报表中录入数据时如何实现行列转换

在报表中录入数据时如何实现行列转换

SQL 实现行列互换

如何实现excel数据抽取并转换行列?

如何用python实现行列互换?

如何实现参数和报表间的联动效果