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

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

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

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

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

附件中是两种方法实现的报表实例,方便对照文章实现行列互换的需求。

sortable 拖拽时互换目标的位置_报表如何实现行列互换效果?相关推荐

  1. sortable 拖拽时互换目标的位置_双端通用型JS拖拽插件的封装与应用

    最近工作中遇到一个需求,需要将一个元素从某位置拖动到另一固定位置后执行某一交互行为,具体效果如下: 这个看似简单的需求,然而实现起来却并不那么顺利.我首先想到的是如何通过哪个现有的插件来快速解决这个问 ...

  2. Vue+el-tree,元素拖拽时出现禁用图标, 请看解决办法

    项目需求:vue+el-tree实现节点拖拽到指定div播放视频: 问题:当节点拖拽时, 出现禁用图标: 一开始以为将禁用图标改变样式或隐藏就可以,一番尝试后, 发现这个图标可能是浏览器默认的, 经过 ...

  3. JavaScript模态对话框类(拖拽时动画)

    2010年写了一个模态对话框类,这次进行一些重构和扩充.拖拽时使其有动画效果.接口没变,如下 new ModelDialog({caption 标题 '对话框标题'(默认)template 主体内容 ...

  4. 图片img或者含有img元素拖拽时,或者scale缩放时产品的阴影效应问题

    图片img或者含有img元素拖拽时,或者用scale缩放时产品的阴影效应问题 html中有图片img或者含有img元素拖拽时,或者scale缩放时产品的阴影效应问题,也就是图片重影, 另外使用scal ...

  5. 优酷视频URL浅析-视频拖拽时长

    一下是通过wireshark抓包工具抓得,见下 GET /yplaylog?hd=2&number=59&langid=0&videoid=224369529&curr ...

  6. jquery的sortable拖拽排序问题,在页面上多次拖拽保存顺序之后,刷新页面,排序出现紊乱

    一.前言 这篇博客是因为我在做完拖拽保存之后,测试多次拖拽,然后刷新页面,发现保存的顺序出来紊乱.这就很无奈了啊,打印各项数据才发现,因为保存用的是ajax的方式,所以页面上的列表序号是固定的,比如列 ...

  7. jquery的sortable拖拽排序插件,顺序没发生改变则不请求

    一.前言 前几天刚做完排序,本来以为没什么问题的,结果今天被告知要优化一下..功能上是没问题,但是有一些小细节需要优化.比如我做的是每次拖拽完成之后,都在stop方法里面请求ajax保存顺序.但是要考 ...

  8. chart 完成拓扑图单节点拖拽不影响其他节点位置

    就是做这种的功能,箭头原本是可以动态重复移动的,但不知道哪里问题导致没箭头了,然后补了个edgeSymbol: ['','arrow'], 字段,才增加了箭头. 拖拽某个节点,只有关联到的线条会跟着变 ...

  9. sortable使用小知识(vue)-- 使用sortable拖拽插件在初始化循环标签的状态下,如何获取拖拽的数据

    废话 大家搜索这个基本都知道这个插件是干啥的,那我就不废话了.如果真的有人不晓得的话,点这个: sortable.js中文文档. 问题场景 当时产品拿着一个示例给我,我就要做成这样的. emmm,我看 ...

最新文章

  1. 码流 / 码率 / 比特率 / 帧速率 / 分辨率 / 高清
  2. Manage Jenkins管理界面提示“依赖错误: 部分插件由于缺少依赖无法加载...“问题解决办法
  3. dotConnect for Oracle入门指南(八):通过OracleCommand类使用存储过
  4. html 执行外部js的函数,javascript – Chrome扩展程序:加载并执行外部脚本
  5. Linux_磁盘管理
  6. 前端实现连连看小游戏(1)
  7. 挣值管理:PV,AC和EV
  8. EntLib 4.1 第2.5章 DAAB+Unity (数据访问程序块)
  9. Windows下安装NetCat
  10. 使用css控制gridview控件的样式,GridView 样式美化及应用.doc
  11. 使用FontCreator工具创建字体符号导入arcmap
  12. 十分钟理解线性代数的本质_线性代数的本质
  13. 三菱FX系列PLC辅助继电器(M)
  14. CAD批量打图精灵自动识别纸张大小
  15. Python代码实现中国日报网双语文章订阅至邮箱
  16. 用JavaSwing也能写出win10扁平风的软件
  17. ARM芯片的时钟系统详解(S5PV210芯片)
  18. 日期控件--WdatePicker的使用小技能
  19. 高防cdn的构建简单吗?高防cdn有什么优势?
  20. 每个国家的邮政编码查询

热门文章

  1. 有趣的HTML5/CSS3艺术网站
  2. 自定义Unity对象生命周期管理集成ADO.NET Entity Framework
  3. 《Redis实战》一第一部分 入门
  4. [leetcode]Jump Game
  5. HttpContext.Current:异步模式下的疑似陷阱之源
  6. Linux上的ftp配置,及错误500 OOPS: could not bind listening IPv4 socket解决
  7. 客户端连接caching-sha2-password 报错问题
  8. 2018年6月2号(线段树(2))
  9. SVN服务器搭建和使用教程
  10. 使用快速傅里叶变换计算大整数乘法-代码