API 生成 PDF 文件慢问题,急急急。这个问题持续很长时间了
问题场景:报表文件通结合数据和动态影藏行的方式实现不同的数据呈现形式,使用报表内不同的区域呈现数据,达成不同的显示效果。
实现细节:每个行多有一个引入式的子报表,子报表所在行跟随数据的呈现形式进行扩展,结合在行可视上设置表达式扩展格等于呈现形式时,行显示,否则行隐藏。例如下图:这个报表 14-25 这个区域的行是跟随 A10 扩展的。14 行、17 行、20 行、25 行的行可视表达式上做动态显示或隐藏,14 行 if(A10==“06 左侧显示条件组”,true,false);17 行:if(A10==“子报表 AX 列”,true,false);20 行 if(A10==“06 右侧无条件组”,true,false);25 行 if(A10==“06 右侧显示条件组”,true,false);如上表 如果 A10 扩展出来 3 个,就意味着会有 12 个子报表会被请求。
比如有四种呈现形式的子报表 a,b,c,d;数据中呈现形式为 A,A,B,C,A,D,C(A 对应呈现形式为 a,B 对应呈现形式为 b,C 对应呈现形式为 c,D 对应呈现形式为 d)。
数据 A,B,C,A,D,C 分组组后,子报表 a,b,c,d 跟随分组扩展后的数据是
一、A(a,b,c,d) 此时根据行可视表达式情况 b,c,d 是隐藏的;
二、B(a,b,c,d)此时根据行可视表达式情况 a,c,d 是隐藏的;
三、C(a,b,c,d)此时根据行可视表达式情况 a,b,d 是隐藏的;
四、A(a,b,c,d) 此时根据行可视表达式情况 b,c,d 是隐藏的;
五、D(a,b,c,d)此时根据行可视表达式情况 a,b,c 是隐藏的;
六、C(a,b,c,d) 此时根据行可视表达式情况 a,b,d 是隐藏的。
通过上方的列举,可以发现会有很多子报表被加载。实际上我们只需要显示的子报表实例化,显示和运算即可。
问题日志:详见附件。
APItxt
已经采取使隐藏的子报表数据集查询不到数据的方式,使子报表不进行计算的方式,生成文件的时长并没有减少。从输出的日志看,像是加载子报表和实例化子报表。我们还可以从哪些方面减少生成文件时间?
确定是不是子表引起的可以分几步测试:
一:把子表去掉后看看速度如何
二:如果子表循环太多,然后有子表嵌套等,那么可以建个空白报表,然后子表都引用这个空白报表看看速度如何,那如果空白报表正常,那可能还是某个子表引起的。
三:隐藏的子表也会参与运算,那可以在子表传递参数时根据条件传入一些不存在的参数,这样子表取数应该是空数据,理论上来说这个子表计算会很快,如果传入空参数,速度还没有提升,那要检查下子表设计是否合理。
另外,现在是通过 api 导出,那可以在 api 里加些输出时间,比如计算后,输出下时间,然后导出 pdf 时在输出下时间,看看是计算引起的还是导出 pdf 时引起的