BI是一个数据分析的工具,而ERP系统则是一个联机事务处理系统。这两个系统之间会产生交集吗?答案是肯定的。做一个形象的比喻。ERP系统就好像是一个油田,而BI就是一个炼油的工具。BI系统在炼油时,肯定需要原油。这个原油就是ERP系统中的数据。在这篇文章中,笔者就以SAP的ERP系统和BW系统(BI系统的一种)为例,分析一下如果有效的从ERP系统中抽取数据。
一、从ERP系统中抽取数据需要解决的问题
当BI系统从ERP系统中抽取数据时,用户主要关心的是三个问题。一是数据抽取是否完全,二是数据抽取是否准确,三是数据抽取是否及时。如果能够确保这三个问题都不成问题了,那么这个数据抽取的解决方案就是成功的。
在实际工作中,一般数据抽取可以分为两个部分。一是初始化抽取。在这个部分中,往往是采取完全抽取的方式。即将ERP中的数据全部抽取到BI中。如果企业ERP运行的时间比较长,这个抽取的过程会比较漫长。如笔者做过一个项目,这个数据的初始化抽取工作就会了2天时间。二是后续的抽取。当第一次抽取后,数据会有变化。对于这些变化的数据,一般不会采取完全覆盖的方式。即不会将已经抽上去的数据清除,然后重新来过。如果这样做的的话,传输的时间会比较长。通常情况下,我们采用的方式增量更新的方式。简单的说,就是只更新上次更新后未更新的数据。
如果采用增量更新的话,那么项目管理员只需要关心捕获、运输和融合三个话题。捕获表示系统如何判断数据是否更新、是否有删除等等;运输表示数据如果传递到BW上去;融合指的是新旧数据如何对接等等。在SAP的解决方案中,对此都有比较详细的处理方式。
二、系统初始数据抽取
在实际项目中,一般都是先有ERP系统,然后再上BI项目。这就好像是炼油。一般都是先有原油,然后再进行提炼。而且BI项目其分析的一般都是3-5年的数据,为此ERP系统中的数据量已经比较多了。
为此第一次数据的抽取,所需要花的时间是比较多的。如上图右面的分支所示,就表示在SAP系统中第一次如果从系统中抽取数据。为了保障数据抽取的准确性与高效性,SAP专门为BI系统准备了一张SetUp表。这张表是根据BI系统的需要而设计的。通常情况下,SAP中的数据BI系统可能只需要50%即可。所以这张SETUP表是为BI系统量身定制的。数据要比原系统的数据要少。
在数据抽取之前,一般需要先对SetUp表进行清空。以防止该表中原有数据与需要导入的数据出现冲突的清空。清空之后,再将源系统中的数据导入到SetUp表中。通过中间表SetUp,可以过滤到一些BI系统用不到都是数据,以提高数据抽取的效率。将数据抽取到SetUp表之后,再通过工具将数据传输到BI中去。
三、增量更新处理方式
后续的数据,一般都是通过增量更新的方式。如在实际项目中,都会设置一个批处理作业。在晚上下班后,让系统自动将一天之内更新的数据传输到BI中。此时就遇到一个问题,系统如何来判断,哪些数据时更新过的呢?注意,这个地方的数据更新其实包括三方面的内容。分别是数据更新、数据删除和新建数据。
针对这个内容,在SAP系统中其实又提供了两种方式。一是增量队列式。如上图所示,在SAP中专门有一个ExtractionQueue表。当SAP系统中数据有更新时,系统会将数据写入到SAP基础表的同时写入到这个表中。也就是说,这个表中的数据就是最近所更新的数据。需要注意的是,这个表中的数据一般保存的是最近更新的和最近一次更新的。系统会在记录中做一下标识来判断数据是否已经传输到了BW中去。一般的IO数据抽取,都是采用这种方式。
二是采用时间戳的方式。即系统在数据更新时,会记录数据更新的时间。这个时间往往是精确到秒的。然后系统中另外有一个地方会记录系统上次抽取数据的时间。然后这次数据抽取时,其就会将这两个时间进行比较,然后将晚于这个时间的数据全部抽取上去。通常情况下,财务相关的数据,都会采用这种方式来抽取。
也就是说,系统中可以允许同时存在这两种数据。到底是用甚么样的数据,就要看用户的需要而定。不过一般情况下,物流相关的数据,推荐是用增量队列的方式。而财务相关的数据,则采用时间戳的方式。
这另外需要提醒的是,上图所示的ExtractionQueue与DeltaQueue表其实是同一张表。在表中,会有一个字段来标识其到底是属于哪一张表中的内容。也就是说,上图中所显示的表一般是逻辑表,而不是实体表。另外,系统还会额外的提供两张控制表,来确保整个增量更新作业的准确性。
四、项目的建议
在实际项目中,从ERP抽取数据要比上面所话的图复杂的多。除了要掌握上图的基本理论之外,笔者认为在数据抽取时,还需要关注如下内容。
一是要充分认识到从BI系统中抽取数据的重要性。在实际项目中,虽然有时候也需要从文本数据中获取数据,但是这个比例并不是很高。在笔者遇到的项目中,一般文本类型的数据只有10%左右。大部分的数据都是来源于ERP系统。为此从ERP系统中抽取数据,无论是BI系统设计者、还是企业用户,都是无法避免的一个课题。
二是需要注意,数据抽取等系统本身性能的冲击。如上所示,如果采用增量更新方式的话,系统除了要往基础表中写入数据之外,还需要向另外一张额外的表中写入数据。可见,这会增加服务器的负担。特别是当数据量比较多时,会还用比较多的系统资源。为此在数据抽取时,要关注对系统本身性能的冲击。一般情况下,都会采取一些措施来避免这种情况。如可以合理安排数据抽取的时间,将其放在用户使用量比较少的时候。像在SAP系统中,其采用的是中间表的方式,来减少数据的传输量。
三是需要注意,对于SAP系统来说,那面这些表,是系统专门为BI系统所准备的。即在系统安装时就已经存在了的。只是系统没有启用而已。当企业用户需要使用BI系统时,需要通过事务代码来激活这些表。否则的话,就无法使用。上图中所显示的表格都是逻辑表,实际表的结果要比这个要复杂的多。不过作为BI的事实顾问来说,只需要掌握这些逻辑表即可。对于其后台的基础表,让SAP的技术人员去了解即可。
四是DeltaQueqe的方式。对于BI系统来说,DeltaQueqe其实提供了三种方式。其中比较常用的就是DeltaQueqe方式(上图所示的方式)和DirectQueqe的方式。其中前者对于性能的冲击比较小,因为有中间表的过滤。而后者对于系统性能的冲击比较大。在后续硬件跟的上的情况下,采用DirectQueqe的方式也未尝不可。不过笔者建议,在现阶段,还是采用DeltaQueqe方式为宜。
通过上面的分析我们可以知道,SAP的从ERP系统中抽取数据的解决方案,相对来说是比较合理科学的。可以解决数据传输过程中捕获、传输、融合等方面的问题。无论是项目管理员还是开发人员,都值得借鉴这种处理方式。