历史版本42 :启用行式引擎执行层式报表 返回文档
编辑时间: 内容长度:图片数:目录数: 修改原因:

目录:

1. 概述编辑

1.1 版本

报表服务器版本
11.0

1.2 问题描述

有时报表形式非常简单,只是简单的单数据源明细报表,但是数据量非常大,百万、千万甚至更多。报表取数及计算时间相当长。

希望能够提高报表展示速度,对于用户来说,查询报表不会有滞后的感觉。

1.3 解决方案

对于单数据集的明细报表,可以启用行式引擎来执行报表,提高报表展示速度,优化用户体验。

注:行式引擎不支持移动端。

2. 行式引擎简介编辑

2.1 原理

  • 普通报表:取出全部数据后再执行报表,最后返回整体的报表结果给浏览器,用户访问到看到结果的时间=报表取数时间+报表执行时间。

  • 行式引擎报表:边取数边执行报表,执行到哪页用户就可以看到哪页,用户访问到看到结果的时间=首页数据读取时间+首页计算时间。

2.2 报表引擎属性

FineReport 报表默认不启用行式引擎。

当报表数据量大且报表结构不复杂时,可以启用行式引擎。按页取数执行报表,能够大大缩短报表执行时间,提高用户体验。

在 FineReport 报表中启用行式引擎:

1)点击菜单栏「模板>报表引擎属性」。

2)勾选「启用后台分页」,选择「行式引擎」。

3)勾选「固定行数分页」,设置每页记录数。点击「确定」,设置完成。如下图所示:

注1:每页记录数不得超过500。

注2:数据量较大时,请勾选「使用按页运算分段执行报表」,以防出现卡顿现象。


2.3 注意事项

2.3.1 行式引擎不支持部分功能

由于行式引擎是按页取数来执行报表,因此报表中每页的计算必须是独立的,即报表不能有单元格关联的复杂运算等。

为了提高行式引擎的性能,FineReport 舍弃了一些复杂的功能,如下所示:

  • 不支持单元格过滤,不支持单元格字段汇总求和。

  • 不支持重复冻结功能。

  • 条件属性不支持行高、列宽、超级链接、行后分页、形态、控件。

  • 仅支持从上到下扩展属性,其他属性设置均不支持。

  • 不支持悬浮元素,层次坐标,分栏,sheet 间运算。

  • 不支持展示图表,不支持子报表。

  • 不支持单元格内容提示使用公式。

  • 不支持分页分 sheet 导出 Excel 。

  • 不支持数据列的结果集筛选。

  • 不支持报表的分组展示。

  • 不支持使用「$$$」进行传参。

  • 不支持存储过程。

2.3.2 行式引擎支持部分数据库

行式引擎按页取数只适用于 Oracle,MySQL,HSQL 和 SQL Server 2012 及以上版本数据库,如 Sqlite,Access,SQL Server 2005 等。

其他类型数据库必须手动编写分页 SQL 才能实现按页取数。对于需要编写分页 SQL 的数据库,实现步骤请参考 单数据集分页 SQL 实现层式报表

注:SQL Server 2012 及以上版本是支持行式引擎的,但在 SQL 中一定要写 order by。

2.3.3 多数据集报表

行式引擎只适用于单数据源报表,对于多数据集报表,行式引擎无法对其实现分页显示数据。

多数据集的模板可是使用层式报表来提高报表展现速度,多数据集实现层式报表的具体步骤请参考 多数据集实现层式报表

2.3.4 新计算引擎

如果行式引擎无法支持用户所需场景,则可以试用 新计算引擎功能 ,实现多数据集情况下的分页查询功能。

用户无需再写复杂的分页 SQL 或 JS 按钮,就可以让报表快速完成首页加载。

注:该功能支持 Oracle、SQL Server、MySQL、HANA、PostgreSQL、Impala、DB2 等大部分主流 JDBC 数据源。

3. 示例编辑

本文示例:以 MySQL 数据库为例,使用行式引擎分页显示「S订单明细」表中的数据,每页显示 50 行。

3.1 连接MySQL数据库

MySQL 数据库连接步骤请参考:[平台]MySQL数据连接

3.2 新建报表

3.1.1 数据准备

1)MySQL 数据库中,需要准备一张表「S订单明细」。表结构如下:

请自行下载文件,并将该表上传至您的 MySQL 数据库中:S订单明细.xlsx

2)新建数据库查询,选择数据连接为:mysql

新建数据集 ds1SELECT * FROM S订单明细,点击「确定」,数据集准备完成。如下图所示:

3.1.2 设计报表

新建一张普通报表,设置 A2~F2 单元格纵向扩展,左父格为默认。

模板样式如下:

3.3 设置报表引擎属性

1)点击菜单栏「模板>报表引擎属性」,会弹出报表引擎属性界面。

2)勾选「启用后台分页」,选择「行式引擎」。

3)在行式引擎设置项中,勾选「固定行数分页」,设置每页记录数为 50。

点击「确定」,报表行式引擎属性设置完成。如下图所示:

3.4 效果预览

点击「分页预览」,效果如下图所示:

4. 注意事项编辑

4.1 Class not found:PageSetChain

问题描述

使用行式引擎,设置按页运算分段执行报表后报错:Class not found:PageSetChain。如下图所示:

2 (2).png

排查思路

  • 参考本文 2.3 节内容,排查是否使用了行式引擎不支持的功能点。

  • 查看数据集预览是否正常,检查 SQL 语句是否规范正确;若 SQL 语句较复杂,可进行简化。

  • 若仍无法解决问题,建议使用 新计算引擎

  • 查看 SQL 语句中是否多出引号、分号;查看是否有重复列名。