怎么设计复杂的ERP报表

企业中ERP系统中报表是用到的最频繁,比如每天采购要打印采购明细账;仓库每天要导出收货或者出货明细;销售每天要打印订单明细等。报表的设计在ERP系统开发中占据大半江。但是报表越复杂,其准确性余越难以把握。

1、越复杂报表,数据准确性难保证。

一般来说,报表越复杂,其准确性越差。如有5条件有偏差,那么理论上的错误记录是125条。同时也可以看出,当涉及到的基础表数量越多,涉及到的模块越多,其最后结果的准确性就越不确定性。当数据的准确性不高时,其真是性也差。报表关联越多,其性能直线下降报表越复杂,其涉及到的后台数据库基础表也就越多。虽然多表之间的关联查询是允许的,但是关联的关键字越多,其查询的效率也就越低。特别是在关联条件中,从数据库与应用软件的整体性能考虑,也不建议采用比较复杂的报表视图。毕竟性能降低、查询的时间比较长时,报表的实用性也在降低。有时候采用的并不是关键字之间的关联。那么查询的效率会更低。再加上比较复杂的Where逻辑判断语句,复杂报表的查询时间会很长。

2、设计复杂报表的原则

原则上是禁止设计超过两个模块的数据报表,最好是将报表的范围限制在单个模块下。如此的话,无论从性能还是从数据的准确性上都会有所保障。但是,如果用户确实有需要实现比较复杂的报表,在这种情况下,该如何处理呢?

1)用固化视图来改变数据库的性能。

在涉及到复杂报表时,开发人员可以考虑采用固化视图来改善数据库的性能。就将某个报表的查询结果存储在一张单独的表中。如此的话,在执行查询时,就可以避免使用这些耗时的操作,同时减少磁盘的I/O冲突,从而以最短的时间得到用户想要的结果。他带来的好处:A:提高查询的性能;B、固化视图对于应用来说是透明的,增加和删除物不会影响SQL语句的正确性和有效性;C:当基表发生变化时,物化视图也会同时更新。但是需要注意,会占用额外的存储空间等。

2)当设计到多表时,采用模块化的设计。

如视图涉及到的基表有多张时,那么在设计视图时,要避免将其放在一个SQL语句中,将其设计成不同层次的视图,然后再进行连接查询。一般至少设计成四层。最基层是基本数据表;实际使用到库的操作数据;根据第二层的数据进行计算分析;视图再将这些视图进行连接。这样既方便后续的维护与查询,同时也可以提高查询的速度。原理:如在第二层视图设计中,可以对基础表的数据进行过滤。此时由于基础数据少,那么后续的报表查询速度也会加快,以提高报表的查询性能与灵活性。

3)确保数据真实性。

复杂的报表,其可能会涉及到多个不同的部门,计算结果需要根据这些部门的信息得出,为此为了提高数据的准确性,将这些视图分模块化设计。如将涉及到不同的部门的信息先设计成不同的报表。在某个特定的时刻,如月末,先让各个部门的人员核对相关的数据,核对完成没有错误之后,再对相关的数据进行运算。在ERP上,报表的内容也要分不同的模块进行体现。这有利于用户对数据进行核对与确认。然后再将它们整合起来。这种各个击破的方式,就有利于提高数据的准确性。

复杂的报表视图,原则上还是少建为妙。因为其在性能或者数据的准确性上都很难控制。如果真的要建立复杂视图的时候,那么在设计与开发时,顾问需要听取数据库工程师的意见,考虑如何提高数据的查询性能,并采取措施提高数据的准确性。


分享到:


相關文章: