【IT168 信息化】
BI作为一个数据分析系统,应该支持多种数据源。这主要是因为一家企业可能会同时有不同格式的数据。如有些数据来自于SQLServer数据库系统,而有些数据源则来源于Excel表格。甚至有些数据来自于网页等等。为了从不同的地方读取数据进行分析,则要求BI系统能够支持多种数据源。如下图所示,就是一个BI系统数据源的示意图。
▲
一、企业数据保存的常见格式
通常情况下,企业会将数据保存在哪些地方呢?只有了解这个内容之后,才能够在BI系统中进行数据源的设计与开发。根据笔者的经验,企业通常会将数据保存在如下几个地方。
第一个地方是数据库。这也是企业主要的数据存储地。如ERP系统、进销存系统、财务管理系统等等,都需要用到后台数据库。这个数据库可以是大型的Oracle数据库,也可以是小型的ACCESS数据库等等。在BI进行数据分析时,从数据库中获取所需要的数据,则是其必须具备的一个能力。同时又因为其所采用的数据库不同,为此BI系统需要能够支持不同的数据库。如上图所示,在连接数据库中可以采用ODBC驱动程序,也可以使用OLEDB技术。无论采取什么手段,一个基本的要求,就是BI系统应该能够访问现在常见的数据库系统。从数据库文件中获取所需要的数据进行分析。
第二个地方是Excel文件。并不是所有企业都采用了ERP等信息化管理软件。没有采用这些软件的企业,一般他们是将数据存储在Excel文件中。如有些企业使用Excel表格来管理企业的库存信息、来做生产计划、来设计应付帐龄表等等。为此BI系统在设计时,还要能够直接出Excel文件中读取数据。在设计这个功能时需要注意一个问题,即Excel不同版本之间的兼容性。特别是Excel2000、2003、2007几个版本在数据的存储上有很大的差异。企业的数据可能会同时存在不同版本的Excel文件中。在使用BI系统来读取Excel文件中的数据时,应该可以同时读取这几个不同版本的数据,而不需要再经过额外的转换。
第三个地方是Web网页中,如Web文件或者XML文件。这主要是用于读取外部网站的数据。如在进行汇率损益分析时,需要从银行网站上读取汇率信息。此时就需要BI系统能够直接从官方网站上读取相关的信息。而不是用户先从网页上复制出来保存到Excel表格中,再让BI系统去读取。这多了一个中间环节,会导致额外的工作量。而且数据的准确性与即时性也会降低。为了减少中间环节,提高数据的准确率,就要求BI系统能够直接从Web文件或者XML文件中读取分析所需要的数据。
二、只获取所需要的数据
在数据源中可能有很多数据。但是在数据分析时,可能只有用到其中20%的数据。如果不管三七二十一将所有的数据都导入到BI系统中,显然会影响系统运行的性能。而且不必要的数据,也会浪费宝贵的磁盘空间。特别是有些使用内存数据库的BI系统,更加需要对数据源中的数据进行过滤。因为内存数据仓库技术,通过压缩技术将所有的数据都保存在内存中。目的就是为了提高数据的分析效率。如果将不相关的数据也导入到BI系统中,会降低数据的压缩能力,浪费宝贵的内存空间。总之BI从数据源中读取数据时,只需要获取分析过程中要采用的数据。要做到这一点,该如何操作呢?
1、是在查询数据时,需要使用Where等限制语句。
从Excel表格或者从数据库中读取数据时,BI系统其实用的就是普通的Select语句。有数据库开发或者维护经验的用户或许知道,可以从列与条件两个角度对数据进行过滤。从列的角度来说,在Select语句中只包含了特定的列。如在应收帐款帐龄分析中,需要用到客户信息这张表。而在原始的数据源中,这张表中包含很多信息,包括客户的联系方式、联系人、地址等信息。不过在进行帐龄分析式,很多信息并不需要。
如只需要客户的名字、客户的付款条件等有限的几个信息。此时在设计BI系统时,在Select语句中不需要列出所有的字段,或者使用*通配符。而只需要让系统查询出一些核心的信息,如客户的名字、信用条件等等。其次就是通过Where语句来进行限制。如在进行应收帐款帐龄分析时,并不需要分析所有的客户。企业的销售可能分为两类,分别为现款销售与信用销售。在应收帐款帐龄分析时,只需要用到信用销售的客户信息。此时就可以在Where语句中进行限制,只让BI系统获取数据分析所必要的数据即可。过多的干扰数据会降低系统的分析性能,浪费内存空间。
2、是在数据读取时,需要适当关注安全性。
如对于产品的销售价格或者原材料的进货价格,企业往往是保密的。在内控制度中,都有要求不相关的人员不获取这些机密的信息。此时在使用BI系统进行数据读取与分析时,也需要从源头抓起,关注这些数据的安全性。如仓库部门在进行安全库存合理性分析时,就不需要知道产品的价格或者供应商等信息。那么BI系统中数据源中读取数据时,就没有必要读取价格或者供应商的相关信息。如果读取了这些不必要的信息,那么在BI系统设计时还需要考虑如何来保护这些信息没有被越权访问,又降低了系统的性能。这种损人不利己的事情,BI系统管理员还是应该避免。笔者的意见是对于这些比较机密的信息,应该从源头就开始进行保护。
有些BI系统开发人员在系统设计时,有一个误区。他们可能认为产品的价格信息仓库不需要访问,但是采购部门可能需要用。为此就直接将这个价格数据导入到BI系统的后台数据仓库中。然后再在前台系统设计时,对数据进行安全方面的设计。这虽然也是可行的,但是笔者认为有点小题大作。或者说其设计的并不是很合理。BI系统的核心功能是数据分析,对数据保护这一块普遍不是很强,也不是很灵活。我们也没有必要将重点放在这个数据的保护上。在实际工作中,我们可以将这些工作交给更加专业的软件来完成,如ERP系统或者数据库系统等等。
总之,BI系统需要支持多种数据源格式。而从数据源中获取数据时,需要采用种种限制与过滤手段,确保在BI系统后台数据仓库中只保存数据分析所必要的数据。特别是数据仓库放置在内存中的BI系统,更加需要注意这一点。
三、数据的及时性考虑
BI系统从数据源中获取数据时,一般并不是及时的。如从ERP系统的后台数据库中获取数据时,并不会取得用户刚刚输入的交易数据。也就是说,实际的数据跟BI系统进行分析时的数据会有一个时间差。现在用户需要考虑的是,这个可以容忍的时间差是多少呢?如我8月10日进行存货周转率分析时,采用的是什么时候的数据?是采用即时的数据,还是采用7月底的数据呢?
现在市面上的BI系统,其采用的数据都不会是即时数据。因为BI系统后台采用的是数据仓库,而数据仓库需要从数据库或者Excel文件中获取数据。数据库与数据仓库之间的数据不会同步。这主要是从性能角度等进行考虑。这也就是说,在进行数据分析之前,用户需要先确认一下自己所需要的数据的起始与截至时间。如是截止到7月底的数据。此时用户就需要运行某个作业,将所需要用到的数据从数据源中读取出来。笔者再次强调一下,跟Erp系统不同,BI系统所采用的数据仓库一般不会同原始的数据文件进行自动同步。而是用户在分析之前,根据实际的需要来判断,需要重新从原始文件中读取最新的数据。在用户没有发送更新指令之前,系统采用的还是上次更新的数据。