报表性能优化方案之单数据集分页SQL实现层式报表

如果数据库是上面所说的access一类的无法直接生成分页sql的数据库,那么就需要编写分页SQL。

3、操作步骤

以FRDemo内置的sqlite为例,说明sqlite如何写分页查询。

注:sqlserver2005和sqlite操作步骤一样。

3.1新建数据集

新建数据集ds1:SELECT * FROM 订单明细。

3.2添加分页查询SQL语句

在数据查询面板中点击分页查询按钮,,编辑分页SQL语句,如下图:

完整的sql语句如下:

SELECT *FROM (SELECT *FROM(SELECT *FROM 订单明细 ORDER BY 订单ID ASC limit ${fr_pagesize*fr_pagenumber}) AS e1 ORDER BY 订单ID DESC limit ${if(fr_pagenumber == int((((fr_rowcount-1)/fr_pagesize)+1)),fr_rowcount – (fr_pagesize*(fr_pagenumber-1)),fr_pagesize)}) AS e2 ORDER BY 订单ID ASC

订单ID ASC limit 90 )AS e1 ORDER BY 订单ID DESClimit30) AS e2 ORDER BY 订单ID ASC

预览至最后一页时,所剩下的数据可能不足30行,那么sql语句又会转化成什么样呢?

如果fr_rowcount=100,fr_pagesize=30,即数据总行数为100行,每页显示30行,预览至最后一页,也就是第4页时,fr_pagenumber=4,sql语句将转换为:

SELECT * FROM (SELECT * FROM ( SELECT * FROM 订单明细 ORDER BY 订单ID ASC limit 90)AS e1 ORDER BY 订单ID DESClimit10 ) AS e2 ORDER BY 订单ID ASC

3.3报表主体设计

将数据集中的数据列拖曳至单元格中。

3.4行式引擎设置

同上一节的设置方法,这里不再赘述。

3.5效果查看

点击分页预览,效果图如下:

已完成模板请参照:%FR_HOME%\WebReport\WEB-INF\reportlets\doc\Advanced\PagingSql.cpt

3.6数据库的分页SQL语句

SELECT *FROM (SELECT TOP ${if(fr_pagenumber == int((((fr_rowcount-1)/fr_pagesize)+1)),fr_rowcount – (fr_pagesize*(fr_pagenumber-1)),fr_pagesize)} *FROM(SELECT TOP ${fr_pagesize*fr_pagenumber} *FROM 订单明细 ORDER BY 订单ID ASC) AS e1 ORDER BY 订单ID DESC) AS e2 ORDER BY 订单ID ASC

版权声明:本文为博主原创文章,未经博主允许不得转载。

你在无垠的海边第一次听到了自己心跳的声音,

报表性能优化方案之单数据集分页SQL实现层式报表

相关文章:

你感兴趣的文章:

标签云: