1. 问题描述
若报表使用的数据量是上百万条的话,觉得报表展现的速度慢,可以使用层式报表来提高报表展现速度。但由层式报表章节可以得知,层式报表必须是单数据集,若是多数据集的模板且数据量又很大,想要提高报表的查询速度要如何实现呢?
2. 实现思路
在定义数据集时通过使用数据库本身的行序号或者使用数据库函数生成行序号(即行号)并且在where条件中通过页码参数使得行号在一定范围内显示,点击自定义的上一页下一页按钮时重新传入页码参数取出相应的数据。
注:SQL Server2000无法生成行号,因此需要定义存储过程实现分页查询,以下具体介绍Access实现分页的步骤,SQL Server2005以及Oracle数据库实现分页的步骤有一点区别,以下会详细介绍。
3. Access分页示例
3.1 新建模板
新建模板mutipage.cpt,为了加快展示速度,我们可以使用分页查询,获取每个产品的详细信息并计算产品对应的订单中的应付金额,因此添加数据集时查询SQL语句为select 产品.产品ID,产品名称, 供应商ID , 类别ID, 单位数量, 产品.单价, 产品.库存量, 产品.订购量,sum(应付金额) as 应付款项 from 产品,订单,订单明细 where 产品.产品ID=订单明细.产品ID and 订单明细.订单ID=订单.订单ID and 产品.产品ID between 10*(${page}-1)+1 and 10*${page} group by 产品.产品ID,产品名称, 供应商ID , 类别ID, 单位数量, 产品.单价, 产品.库存量, 产品.订购量 order by 产品.产品ID,设置参数page的默认值为1,首次看到的是第一页,只查询出第1~20条记录;若page参数为2时,查询出第21~40条记录,即第二页内容。
注:这边定义报表每页显示10条数据,即ds1的查询SQL一次只取10条数据,从而加快报表展示速度。
3.2 自定义上一页、下一页按钮
使用分页查询后,报表需要根据page参数查询出行号在一定范围内的数据,当点击下一页时,page需要加1并传入报表查询出后10条记录;点击上一页时,page需要减1并传入报表查询出前10条记录。而报表内置的上一页下一页按钮无法做这些操作,因此需要自定义上一页下一页按钮。
- 在单元格中求出上一页、下一页页码的值
在工具栏中无法直接获取page参数的值,因此先在单元格中求出上一页下一页的页码值,然后再在工具栏按钮中获取单元格的值。
- 自定义上一页下一页按钮
点击模板>模板web属性>分页预览设置分,选择为该模板单独设置,在工具栏中增加两个自定义按钮分别命名为上一页,下一页,是工具栏上只剩下如下图所示几个按钮。
3.3 第一页与最后一页的处理
首次访问报表时,默认显示第一页page=1,此时上一页按钮应该是无效的,否则点击上一页按钮时(页码为0),此时查询行号在-9到0之间的记录将会出错;同样,显示到最后一页时需下一页按钮无效。即当上一页页码page-1=0时,上一页无效;当下一页页码page>总页数时,下一页无效。
- 求出总页数
根据总记录数及每页显示条数,求出总页数。新增数据集ds2,SQL语句为:SELECT count(*) as 总数 FROM 产品,查询出产品表总条数,拖入单元格,如下
双击总数所在单元格弹出数据列设置对话框,选择高级>自定义显示,在自定义中填入公式:roundup($$$/10,0)求出总页数。
将第一行的行高设置为0,或者是隐藏:
上一页按钮设置:选中上一页自定义按钮,点击自定义JavaScript,在js中填入:
- var page= $("tr[tridx=0]","div.content-container").children().eq(0).html();
- if(page==0)//如果报表显示第一页,则上一页不可用
- this.setEnable(false);
- else
- window.location.href="${servletURL}?reportlet=doc/Advanced/multipage.cpt&page="+page;
注:第一句是获取上一页页码(A1单元格)的值,其中最后的html()可以用Text()代替;第二句是重新加载报表并给page参数赋值。
上一页按钮设置:下一页按钮设置与上一页的js差不多,只需要获取B1的值就可以了,所以在js中填入:
- var page= $("tr[tridx=0]","div.content-container").children().eq(1).html();
- var total=$("tr[tridx=0]","div.content-container").children().eq(2).html();
- if(parseInt(page) > parseInt(total))//如果报表显示最后一页,则下一页不可用
- {
- this.setEnable(false);
- }
- else
- window.location.href="${servletURL}?reportlet=doc/Advanced/multipage.cpt&page="+page;
注:首次打开报表的时候,由于page参数是在数据集中定义的,数据集参数的默认值在第一个次打开报表时没办法传到单元格中,所以需要定义一个完全一样的模板参数page,默认值设为1。这样,首次打开模板时,上一页按钮同样不可用。
分页预览,即可查看效果。mutipage.cpt
具体模板可参考:%FR_HOME%\WebReport\WEB-INF\reportlets\doc\Advanced\mutipage.cpt。
4. SQL Server2005示例
SQL Server2005使用ROW_NUMBER() OVER (ORDER BY 主键字段) AS rowno生成行号。
因此只需要修改数据集ds1查询SQL语句为select * from (SELECT *,ROW_NUMBER() OVER (ORDER BY year_school_id) AS rowno FROM year_school) as b where b.rowno between 20*(${page}-1)+1 and 20*${page}即可。
5. Oracle示例
Oracle数据库中本身有行序号ROWNUM,因此只需要将上例ds1数据集修改成如下:SELECT * FROM (select A.*,ROWNUM rn from (select * from year_school) A where ROWNUM <=${start}+20) where RN >=${start}即可。
注:ROWNUM只支持小于,大于是不支持的,因此要做如上定义。
相关推荐
行式引擎按页取数只适用于Oracle,mysql,hsql和sqlserver2008及以上数据库,其他数据库,如access,sqlserver2005,sqlite等...今天我们以Access数据库为例介绍需要写分页SQL的数据库怎样利用行式的引擎实现层式报表。
在本篇内容中,我们主要探讨了在报表开发工具FineReport中如何实现单数据集分页SQL以及如何构建层式报表。这一过程涉及到对不同数据库类型的处理策略,特别是对于那些不能直接生成分页SQL的数据库,如Access。接下来...
层式报表利用分页技术,将大数据集切割成多个小块,并通过分页的形式,允许用户仅查看当前页的数据,从而有效解决了大数据集在报表中的展示问题。 层式报表的设计思想基于数据库的分页查询。以MySQL数据库为例,其...
首先,层式贴制法是一种通过逐层叠加不同功能或材料的方式,制造出集多功能于一体的组件的技术。在电子制造领域,这种技术广泛应用于多层电路板的生产。传统的单层电路板由于空间限制,往往难以满足高密度、高效率的...
1. 高密度集成:由于其体积小巧,埋层式电容器适用于高密度集成电路,尤其是在微电子和纳米电子领域,为实现更小型化和高性能的电子产品提供了可能。 2. 优良的高频特性:由于其结构特性,埋层式电容器具有较低的...
总之,HoverAccordion 是一个利用 jQuery 实现的动态层式菜单解决方案,它通过简洁的代码和流畅的动画,使得网站的导航更加直观和用户友好。开发者只需掌握基本的 jQuery 和 HTML/CSS 技能,就能轻松集成并自定义这...
总结,增层式印刷电路板的制作是一项集材料科学、精密工程和先进制造技术于一体的复杂过程,对于现代电子产品的性能至关重要。随着科技的进步,MLPCB的制作技术也在不断优化,以满足日益增长的高性能电子产品需求。
电子政务在现代社会中扮演着越来越重要的角色,而导电...总的来说,导电层式异步电机转子是电机技术的一个重要进步,它在提高能效、优化性能方面有着显著的优势,对于电子政务领域的设备升级和可持续发展具有重要意义。
这种设计可能涉及到瓦楞纸板的结构优化、生产流程改进以及对环保材料的应用,以提高包装性能和效率。 首先,瓦楞纸板是由多层纸构成,通常包括面纸、芯纸和波纹状的瓦楞纸。层式设计可能意味着在传统单层或双层瓦楞...
低电压大电流层式绕组可能与智能电网的自动化控制和监测系统相结合,实现电力的动态调整和优化。 6. **法规与标准**:在实施电子政务项目时,必须遵循相关的电气安全和性能标准。层式绕组的设计和应用需要符合国家...
《JBT 11225-2011 烘烤机械 层式电烤炉》是中国国家标准,详细规定了烘烤机械中层式电烤炉的设计、制造、检验和验收等方面的技术要求。这份标准是行业内进行产品开发、生产和质量控制的重要依据,旨在提高层式电烤炉...
埋层式设计则意味着电极被嵌入到芯片内部,这种设计可以提高电极的稳定性,减少外部环境对电极性能的影响,同时也有利于缩小芯片的体积,实现微型化。 文档详细介绍了埋层式碳化钛电极的制备方法,通常包括以下几个...
总结,复合层式的纸浆模塑制品制造是一个集材料科学、机械工程和环保理念于一体的领域,其制造工艺和设备的优化对于提升制品质量和降低成本具有重要意义。随着可持续发展观念的深入人心,这一领域有望迎来更大的发展...
层式笔筒设计装置是一种常见的办公用品,旨在有效地组织和存储各种笔类,提升桌面的整洁度和工作效率。本文将深入探讨层式笔筒的设计原理、制作材料、结构特点以及在实际应用中的优势。 设计原理: 层式笔筒的设计...
这种新型的分离膜层式太阳能热水器真空管是提升太阳能热水系统效率的关键技术之一。 描述中的信息与标题相呼应,再次强调了该压缩包文件的核心内容——一种新型的分离膜层式太阳能热水器真空管的设计和工作原理。...
综上所述,HoverAccordion jQuery层式手风琴菜单是一种强大的前端工具,它结合了jQuery的便利性和ECMAScript的强大功能,为用户提供了直观且富有互动性的菜单体验。理解jQuery的基本原理和ECMAScript的语法是充分...
js特效脚本含源码和说明HoverAccordion jQuery层式菜单本资源系百度网盘分享地址
通过对不同数据集的实验,作者们验证了贪心层式无监督训练策略对于优化过程的积极作用。这种策略不仅有助于避免陷入局部最优,而且还能促使网络形成内部分布式表示,这些表示能够捕捉输入的高级抽象特征,从而提高...
- 组织结构:传统的科层式结构不利于业务流程优化和控制,需要扁平化改革。 - 决策与费用管控:决策需更加规范科学,费用管理机制需完善。 - 人力资源:员工流动性大,经验传承困难,人力资源管理繁琐,易出错。 ...