但凡用过企业ERP系统的客户,肯定对系统中的报表毫不陌生,尤其对于经常要与报表打交道的财务人员以及管理层,有了报表可以对账目一目了然,可当遇到繁琐不堪的报表时,不仅会影响我们的工作效率,还会拉低数据的准确性,这里就从报表的繁杂性或者从准确性来看,将会出现什么样的结果呢
一.报表相关越多,功能也会下降
报表越繁琐,其涉及到的后台数据库根底表也就越多。尽管多表之间的相关查询是允许的,可是相关的关键词越多,其查询的效率也就越低。特别是在相关条件中,有时候选用的并不是关键词之间的相关。如有可能日期(字符数据类型的相关)之间的相关,此刻查询的效率会更低。再加上比较繁琐的Where逻辑判断语句,繁琐报表的查询会延长。经测试,依照上面这个用户的需求,规划出的报表其查询的时刻需求近三分钟,并且是现已优化过的查询。别的,这个报表的查询因为涉及到很多的根底表,数据库基本上需要访问硬盘上的数据文件,而不能够运用缓存。这就有可能会致使比较严重的硬盘抵触。然后影响到其它数据的查询功率。故从数据库与应用软件的全体功能考虑,也不主张选用比较繁琐的报表视图。性能下降、查询的时刻比较长时,报表的实用性也在下降。
二.报表越复杂,准确性越难把握
一般来说,报表越复杂,其准确度越难以把握。其实抛开企业ERP系统,从统计学的角度,我们也可以得出这个论证。现在这个表单有三个模块的数据构成。就好像三个抽屉。当然其抽屉中的数据远比10个数字要负载的多。我们设想一下,从单个模块来看。可能企业允许的误差率是5%。即100条记录中,允许有5条记录与实际有偏差。现在三部分信息共同组成的一张报表,而且最后需要根据三部分信息的内容计算出一个值,那么这个出现错误的记录会有多少呢?这又是一个排列组合的问题。如假设每部分信息中,都有5条有偏差,那么最后理论上的错误记录是125条。显然这个错误率比较大。同时也可以看出,当涉及到的基础表数量越多,涉及到的模块就越多,其最后结果的准确性就越难以保障。而当数据的准确性不高时,其实用性也就相应的降低。
三.设计复杂报表的注意事项
为此,从原则上是禁止设计超过两个模块的数据报表,最好是将报表的范围限制在单个模块下。(傲鹏ERP报表是根据不同模块,安排相对应的报表,保证数据的准确性.)如此的话,无论从性能还是从数据的准确性上都会有所保障。但是,如果用户确实有需要实现比较复杂的报表,在这种情况下,该如何处理呢?
1.使用固化视图来改善数据库的性能。
复杂报表所导致的不利影响,首当其冲的是报表查询时速度会很慢,性能很低。为此在涉及到复杂报表时,开发人员可以考虑采用固化视图来改善数据库的性能。如在Oracle数据库中,固化视图又叫做物化视图。通过固化视图,可以预先计算并保存报表连接或者聚集等耗时比较多的操作结果。简单的说,就将某个报表的查询结果存储在一张单独的表中。如此的话,在执行查询时,就可以避免使用这些耗时的操作,同时减少磁盘的冲突,从而以最短的时间得到用户想要的结果。一般来说,固化视图对于复杂的报表来说,能够提供三方面的作用。如可以提高查询的性能。如固化视图对于应用来说是透明的,增加和删除物化视图不会影响应用程序中SQL语句的正确性和有效性。但当基表发生变化时,物化视图也会同时更新。不过需要注意的是,物化视图也会带来一些负面影响。如物化视图的数据会保存在硬盘中,为此就会占用额外的存储空间等。总之,在设计比较复杂的报表时,开发人员可以与数据库工程师商量,如果可以的话,需要尽量采用固化视图。
2.复杂的报表当涉及到多表时,最好采用模块化的设计。
如某视图,其涉及到的基表有近20张。那么在设计视图时,要避免将其放在一个SQL语句中。而应该借鉴应用程序的模块化设计,将其设计成不同层次的视图,然后再进行连接查询。如上面这个案例,至少可以将其分为四层。最基层是基本数据表,第二层是零件出库信息、当月采购信息等数据,第三层是根据第二层的数据进行计算分析;第三层视图再将这些视图进行连接。这么操作的话,方便后续的维护与查询。同时也可以提高查询的速度。如在第二层视图设计中,可以对基础表的数据进行过滤。此时由于基础数据少,那么后续的报表查询速度也会加快。为此对于比较复杂的报表设计,要考虑分层设计的思路,以提高报表的查询性能与灵活性。
比较繁琐的报表视图,原则上仍是罕见为妙。由于其在功能或数据的准确性上都很难掌控的。假如真的要树立繁琐视图,那么在规划与开发时,参谋需要听取数据库工程师的意见,思考嵌入数据的查询功能,并采纳办法提高数据的准确性。