【扩展报表】报表执行报错,提示#BAD FUNCTION 或 Large amount of data display incomplete
问题描述:
如下图所示,报表执行报错,单元格中显示:#bad function!
但缩小查询范围,可以查询出结果来。
或者提示:#SYNTAX! Large amount of data display incomplete
遇到这种情况,可以先打开扩展报表控制台(路径:报表工具 - 菜单栏“工具 - 扩展报表控制台”子菜单),再去执行报表。执行完,则在扩展报表控制台可以看到有如下错误,或者到客户端的log4j.log也可以看到报错日志。而且,此时找到扩展报表的这个数据集,双击执行数据集往往也会报同样的错(新版本数据集执行使用虚模式取数,即使数据量超出了限制也不会报错的)。
分析解答:
单次查询不超过100万个单元格,即一次查询的数据不能超过100万(行*列)。这个限制不只是针对扩展报表,而是针对所有的查询请求。这个限制可以在BOS管理控制台-工具-控制台参数中看到,如截图:
当查询结果集超过这个限制的时候,执行扩展报表的数据集时就会提示“fetched too much rows, cell number exceeding limit 1000000”,而执行报表的话就会提示“#bad function!”。
如果数据量超过100万,则可以修改控制台的参数,但是结果集参数设置过大,相当于业务返回数据量可以更多,而EAS实例内存是固定的,返回数据量越多,则占用实例内存越大,从而会导致实例频繁宕机。(参考贴:https://vip.kingdee.com/article/43437546244997126)
另,如果只是提示“fetched too much rows:100001”,那说明没有超出exceptionCellNumber的限制,但是超出了行数限制:
Caused exception message is: fetched too much rows:100001 [Client -- String Serialize] at com.kingdee.bos.dao.query.server.QueryDataAccess.getRowSetForRealPage(QueryDataAccess.java:2595) at rpc_generate._PROXY_com_1_kingdee_1_bos_1_dao_1_query_1_server_1_IQueryDataAccess.pi29(Unknown Source)
这种场景,可以criticalIDList参数的值,如下图:
注意:数据量较大,例如接近100w的时候,报表执行往往也会很慢。建议:
1)添加过滤条件以便减少数据量;
2)数据集的输出字段在报表中不展示,这样的字段不要查询出来,减少列也可以减少数据量;
3)如果报表是汇总型报表,可以在数据集中先做好汇总统计,这样可以减少数据量,而报表只做展示即可;
4)拆分报表,不要显示在一张报表中,例如使用报表联查,从汇总数据查看明细数据。
5)扩展报表是一次性取数、实模式展现数据的。可以开发序事簿页面虚模式或者使用轻分析工具(轻分析的介绍,详见帖:https://q.kingdee.com/support/index.html?version=1.0&docId=Tblcinblg)
拓展:
执行报表后单元格显示#bad function,往往都是因为数据集执行报错了,这种情况需要结合报错来分析数据集的sql查询脚本是否有问题。例如下面截图所示:
【扩展报表】报表执行报错,提示#BAD FUNCTION 或 Large amount of data display incomplete
本文2024-09-22 18:10:42发表“eas cloud知识”栏目。
本文链接:https://wenku.my7c.com/article/kingdee-eas-99115.html