示例代码只针对即席查询和透视分析有效。
使用场景
项目中具有较多的大数据量报表,初次打开这些大数据量报表耗时较长。
因需要对这些大数据量报表进行预处理,使用客户可以快速的对大数据量报表进行预览分析,无需等待。
下面以定时刷新即席查询报表“汽车销售情况分析-演示示例”为例,“汽车销售情况分析-演示示例”报表ID为:I40288453016667896789e42701668640ab395dba。我们可以选中资源右键选择属性获取节点ID。
实现思路
在客户预览分析报表之前,通过计划任务定时对报表进行预处理。
操作步骤
1、在计划任务中添加刷新报表数据的任务,操作入口: 系统运维 > 计划任务 > 任务 > 新建任务,如下图:
2、输入任务名称“定时刷新报表”,“任务类型”选择 定制 ,在“自定义设置”中添加刷新报表的代码,如下图:
//导入将会使用的java类与java包 importClass(java.lang.System); //打开报表资源。 var tempResourceHandle = execute('openResource', { connector: connector, reportId: "I40288453016667896789e42701668640ab395dba" //报表id }).resourceHandle;
3、再新建计划,实现定时刷新报表。操作入口 系统运维 > 计划任务 > 计划 > 新建计划,如下图:
4、如计划名称为"定时刷新报表_计划",“待执行任务”中添加已建好的任务 定时刷新报表_计划,如下图所示。再根据项目需求设置定时计划的“触发类型”、“间隔类型”、“运行设置”。
注:如果资源是透视分析,以上任务代码不适用,请使用以下代码。
importPackage(Packages.smartbi.net.sf.json); importPackage(Packages.java.lang); //以下代码中I4028839a015f575f575f7f5f015f576d868d0058是透视分析资源id var insight = connector.remoteInvoke("InsightService","openQuery",["I4028839a015f575f575f7f5f015f576d868d0058",""]); var result = JSONObject.fromObject(insight.getResult()); var clientId = result.getString("clientId"); logger.info(clientId); var pageNo = new Integer(0); connector.remoteInvoke("InsightService","refreshData",[clientId,pageNo]); connector.remoteInvoke("InsightService","closeQuery",[clientId]);//关闭报表的代码;
评论
徐晓兰 发表:
电子表格的话,可以考虑使用【资源离线】实现事先打开报表,实现缓存报表的目的。