众所周知,ERP系统中报表无时无刻不在进行中更新,各种业务明细通过报表让各个岗位、各层领导即时掌握,如采购报表、出货明细、销售单据等,如果说ERP系统一个高度整合的资源规划平台,那么各种报表则是搭建此平台的信息输出与输入。因此ERP报表设计存在着一些鲜为人知的秘密,下面我们就来分析一下这些具体秘密。

ERP报表设计中的秘密
1.报表越复杂,准确性越难以把握
一般来说,报表越复杂,其准确性余越难以把握。其实抛开ERP系统,从统计学的角度,我们也可以得出这个结论。这是一个排列组合的问题。下面我们看一下ERP表单的内容情况。
现在这个表单有三个模块的数据构成。从单个模块来看。可能企业允许的误差率是5%。即100条记录中,允许有5条记录与实际有偏差。现在三部分信息共同组成的一张报表,而且最后需要根据三部分信息的内容计算出一个值,那么这个出现错误的记录会有多少呢?这又是一个排列组合的问题。如假设每部分信息中,都有5条件有偏差,那么最后理论上的错误记录是125条。显然这个错误率比较大。同时也可以看出,当涉及到的基础表数量越多,涉及到的模块越多,其最后结果的准确性就越难以保障。而当数据的准确性不高时,其实用性也就相应的降低。
2.报表关联越多,其性能也会直线下降

ERP报表关联越多,其性能也会直线下降
报表越复杂,其涉及到的后台数据库基础表也就越多。虽然多表之间的关联查询是允许的,但是关联的关键字越多,其查询的效率也就越低。特别是在关联条件中,有时候采用的并不是关键字之间的关联。如有可能日期(字符数据类型的关联)之间的关联,此时查询的效率会更低。再加上比较复杂的Where逻辑判断语句,复杂报表的查询时间会很长。另外,这个报表的查询由于涉及到众多的基础表,数据库基本上需要访问硬盘上的数据文件,而不能够使用缓存。这就有可能会导致比较严重的硬盘I/O冲突。从而影响到其它数据的查询效率。
故从数据库与应用软件的整体性能考虑,也不建议采用比较复杂的报表视图。毕竟性能降低、查询的时间比较长时,报表的实用性也在降低。
3.设计复杂报表的注意事项
为此,从原则上是禁止设计超过两个模块的数据报表,最好是将报表的范围限制在单个模块下。如此的话,无论从性能还是从数据的准确性上都会有所保障。但是,如果用户确实有需要实现比较复杂的报表,在这种情况下,该如何处理呢?为此笔者根据自己的项目经验,提出了以下几个建议。
(1)使用固化视图来改善数据库的性能
复杂报表所导致的不利影响,其首当其冲的是报表查询时速度会很慢,性能很低。为此在涉及到复杂报表时,开发人员可以考虑采用固化视图来改善数据库的性能。如在Oracle数据库中,固化视图又叫做物化视图。通固化视图,可以用于预先计算并保存表连接或者聚集等耗时比较多的操作结果。简单的说,就将某个报表的查询结果存储在一张单独的表中。如此的话,在执行查询时,就可以避免使用这些耗时的操作,同时减少磁盘的I/O冲突,从而以最短的时间得到用户想要的结果。一般来说,固化视图对于复杂的报表来说,能够提供三方面的作用。如可以提高查询的性能。如固化视图对于应用来说是透明的,增加和删除物化视图不会影响应用程序中SQL语句的正确性和有效性。总之,在设计比较复杂的报表时,开发人员可以与数据库工程师商量,能够采用固化视图。如果可以的话,需要尽量采用固化视图。
(2)复杂的报表当设计到多表时,最好采用模块化的设计
如某视图,其涉及到的基表有近20张。那么在设计视图时,要避免将其放在一个SQL语句中。而应该借鉴应用程序的模块化设计,将其设计成不同层次的视图,然后再进行连接查询。如上面这个案例,至少可以将其分为四层。最基层是基本数据表,第二层是零件出库信息、当月采购信息等数据,第三层是根据第二层的数据进行计算分析;第三层视图再将这些视图进行连接。这么操作的话,方便后续的维护与查询。同时也可以提高查询的速度。为什么这么说呢?如在第二层视图设计中,可以对基础表的数据进行过滤。此时由于基础数据少,那么后续的报表查询速度也会加快。为此对于比较复杂报表的设计,要考虑分层设计的思路。以提高报表的查询性能与灵活性。
(3)要考虑数据核对的需要
比较复杂的报表,其可能会涉及到多个不同的部门。如上面个报表,其涉及到仓库、采购、销售、开发等多个部门。而且最后的计算结果需要根据这些部门的信息得出。为此为了提高数据的准确性,就需要多个部分进行积极的配合。那么该如何来做到这一点呢?笔者认为,可以将这些视图分模块化设计。如将涉及到不同的部门的信息先设计成不同的报表。在某个特定的时刻,如月末,先让各个部门的人员核对相关的数据。核对完成没有错误之后,再对相关的数据进行运算。而不是一开始就将所有数据在一张报表上显示。这会导致各个部门数据核对的麻烦,即各个部门不利于核对与自己相关的数据。其实这一点跟上面提到的视图分层化设计类似。在ERP上,报表的内容也要分不同的模块进行体现。这有利于用户对数据进行核对与确认。然后再将它们整合起来。这种各个击破的方式,就有利于提高数据的准确性。
综上所述,对于比较复杂的报表视图,原则上还是少见为妙。因为其在性能或者数据的准确性上都很难控制。如果真的要建立复杂视图的时候,那么在设计与开发时,顾问需要听取数据库工程师的意见,考虑如何提高数据的查询性能,并采取措施提高数据的准确性。
欲了解更多,请点击ERP系统。
温馨提示:
如果您在ERP系统选购、实施、维护等方面遇到疑难问题,欢迎联系乾元坤和ERP软件开发技术工程师,他们会给您详细的解答, 。
