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

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

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

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

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

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

原文地址:https://www.cnblogs.com/xiaohuihui-11/p/12054389.html

时间: 2024-08-29 03:42:48

报表如何实现行列互换效果?的相关文章

将二维数组中的行列互换

情景:二维数组可以存储表格数据,还可以根据下标索引加入各种运算,而且图片的关键运算方法也是以二维数组为基础进行矩阵运算的. //创建二维数组 int arr[][] = new int[][]{{1,2,3},{4,5,6},{7,8,9}}; System.out.println("行列互掉前:"); //输出二维数组 printArray(arr); int arr2[][] = new int[arr.length][arr.length]; //调整数组行列数据 for (in

行列互换

---psydbnew (PSYP_Trends_GetTestStressorAvgPoint)SELECT QuestionNum,     sum(case when BatchClassName='第一批' then AvgPoint else 0 end )as '第一批',     sum(case when BatchClassName='第二批' then AvgPoint else 0 end )as '第二批',     sum(case when BatchClassNam

用集算器实现报表的外置存储过程数据源效果

业务逻辑相对复杂的报表开发中,开发人员往往会使用存储过程为报表准备数据.而使用存储过程往往受到编写困难.执行效率低下.数据库操作权限限制等问题,着实让开发人员不爽.如何改进或替代存储过程,成了很多程序员的心心声. 本文通过一个例子说明如何使用集算器实现报表存储过程数据源效果. 报表样式 某网络平台需要监测查看一定周期内的用户状况,需要为运营部门出具日报.周报.月报.年报等报表,每类报表中均包含本期与上期.上上期数据比较,故涉及数据量较大.这里以其日报为例(月报年报只是统计周期不同),报表格式如下

java 二维数组行列互换

代码需求: 对等行等列的二维数组进行 行列 的互换 分析过程 主对角线是保持不变 行列互换即角标互换:[0][1] => [1][0] 循环次数:外层循环行,内层循环每一行的列 示意图 代码实现 public class ArrayReverse { public static void main(String[] args) { int arry[][] = new int[][] {{1,2,3},{4,5,6},{7,8,9}}; reverse(arry); printArray(arr

MS-SQLServer 2000 T-SQL 交叉报表(行列互换) 交叉查询 旋转查询

在MS-SQLServer 2005和oracle 中可以使用Pivot 和 Unpivot来做行列转换,不过不支持动态列哦. 在这里使用 case when then else end 语句,来实现行列转换. 如何实现动态列在最下面. 下面以学生成绩表来举例: id姓名 科目 成绩 1 张三 语文 602 张三 数学 653 张三 外语 704 李四 语文 805 李四 数学 906 李四 外语 857 王五 语文 708 王五 数学 719 王五 外语 7510 赵六 语文 6411 赵六 

MS SQLServer 交叉报表(行列互换)

在MS-SQLServer 2005 中可以使用pivot运算符来来实现行列转换. ,但在之前版本中必须使用 case when then else end 语句 下面以学生成绩表来举例: id姓名 科目 成绩 1 张三 语文 60 2 张三 数学 65 3 张三 外语 70 4 李四 语文 80 5 李四 数学 90 6 李四 外语 85 7 王五 语文 70 8 王五 数学 71 9 王五 外语 75 10 赵六 语文 64 11 赵六 数学 67 12 赵六 外语 76 查询后得出: 姓名

Oracle行列互换 横表和纵表

/* 在实际使用sql工作中总会碰到将某一列的值放到标题中显示.就是总说的行列转换或者互换. 比如有如下数据: ID NAME KECHENG CHENGJI -- ---------- -------------------- ------- 1 a 语文 80 2 a 数学 70 3 b 语文 40 4 b 数学 100 5 c 语文 90 6 c 数学 92 那末我要求显示的结果是: NAME YUWEN SHUXUE ---------- ---------------------- -

SQL面试题-行列互换-if、【case when】

http://www.cda.cn/view/21469.html tb_lemon_grade中,表中字段id,student_name,course,score分别表示成绩id,学生姓名,课程名称,课程成绩,表中数据表1所示.请写出一条SQL,将表1的数据变成表2的形式id    学生姓名    课程名称    课程成绩1    张三     Linux       852    张三         MySQL       923    张三         Java       874 

SQL行列互换很方便

---行转列--pivotcreate table tempTable( id int primary key identity(1,1), Student nvarchar(36), [Subject] nvarchar(36), Score int,) select * from tempTableinsert into tempTable values ('张三','语文','90')insert into tempTable values ('张三','语文','89')insert i