关于如何解决大数据量下报表块(决策报表)工具栏数据行数显示不准的问题

楼主
我是社区第255654位番薯,欢迎点我头像关注我哦~

问题引出:

当前处理方法是按照类似cpt报表的用count(A2[!0])计算报表块单元格人后再使用_g().getWidgetByName("report0").getCellValue("A1")引用A1单元格的的行数从而实现行数计算!

count(A2[!0])计算行数参考文档:JS实现工具栏添加计数

 

该方法弊端:

该方式必须在报表块数据渲染完毕才可引用,对于小数据量(渲染较快)的情况下可以实现正确的行数显示,但对于大数据量(渲染较慢)的情况下,使用_g().getWidgetByName("report0").getCellValue("A1")方法可能会出现A1单元格取数比渲染出A1单元格(计算出当前查询的总行数)快的情况发生,此时A1单元格保留的是上一次的计算行数,所以会错误获取到上一次A1单元格统计的行数

如下所示:

解决办法:

使用数据集行数统计替代单元格行数统计,关键处理使用FR远程公式计算当前数据集行数:FR.remoteEvaluate('=ROWCOUNT("数据集名称")')

以下展示在工具栏显示报表块行数:

(1)打开报表块工具栏,开启使用工具栏,添加一个自定义按钮(用于后续现实页数使用

点开设置可以看到设置的自定义按钮

(2)选中刷新按钮,添加点击事件

(3)刷新按钮点击事件js代码如下

// 传递新参数刷新报表块0
_g().getWidgetByName("report0").gotoPage(1,{
//	para1:xxx,
//	para2:xxx,
//	<这里填写你的参数> 
//	...
},"lazy")


// 必须添加延迟函数,否则会查询到到上一次查询的行数,导致获取的行数错误
setTimeout(function(){
	// 获取传递新参数后数据集的行数,
    // ds1改为你的报表块对应的数据集名称即可
	var rownums = FR.remoteEvaluate('=ROWCOUNT("ds1")');

	// 获取报表块0后发现获设置新的函数提示,这里我设置了2个自定义按钮,所以需要选择第二个自定义按钮:eq(1),只有一个自定义按钮的改为eq(0)即可
	$("div[widgetname='REPORT0'] #fr-btn-CustomToolBarButton:eq(1)").text("共"+rownums+"行")
},500)

(4)给报表块添加初始化事件,js代码同(3),用于报表初始化的时候计算数据行数

(5)最终效果

 

演示附件:报表块工具栏设置数据行数.zip (31.86 K)

 

 

* 题外话:count(A2[!0]),该方式不会计算空行,所以A2单元格必须用表主键设置,确保不为空,否则会影响计算行数

分享扩散:

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

返回顶部 返回列表