商业智能的一大重要应用是在数据量庞大而嘈杂的制造业中,可以说,制造业是非常需要商业智能的行业。因此,本期,我们就将目光转向制造业,讨论一下商业智能在ERP业务中的应用。
一、ERP业务数据的特点
1、数据量庞大。制造业的数据量非常大,动辄以百万、千万为单位计,甚至上亿条,可以说是海量的,会对企业的业务数据库造成极大的负荷,因此,制造业是非常适合做BI项目的。
2、数据整齐程度差,随意性较大。大量数据采集是人工归集的,数据准确性很差,且很不规整,数据格式很不统一,数据类型混乱而嘈杂。
3、信息分散、不及时、不共享。和其他行业不同,制造业产、供、销、人、财、物是一个有机的整体,它们之间存在大量信息交换。而人工管理信息分散,缺乏完善的基础数据,大大影响管理决策的科学性和准确性。
二、ERP业务BI项目特点
下面,我们就以一家鞋服制造企业为例,描述其ERP相关的BI系统项目特点,让大家对制造业BI在ERP业务的应用有一个直观的印象和清晰的理解。
我们都知道,一个完整的BI项目流程包括三个基本步骤:
第一步,通过ETL流程,利用WINDOWS SQL SERVER 2005中的组件INTEGRATION SERVICES工具,将数据从业务数据库源系统中抽取、转换、清洗和加载到数据仓库中;
第二步,通过OLAP流程,利用WINDOWS SQL SERVER 2005中的组件ANALYSIS SERVICES工具,将数据仓库中的数据,按照分析的模式进行聚合和计算,并把计算结果以某种特定的结果存储起来,搭建起多维分析模型,以便客户端快速查询和使用。
第三步,通过报表流程,利用WINDOWS SQL SERVER 2005中的组件REPORTING SERVICES报表工具,将客户端需要的信息完整、迅速而灵活地展现出来,完成数据前端展现任务。
在本例中,源数据来自于企业的ERP系统,8个事实表记录以每天几万条的数量级增加,目前均已累计达到百余万行。针对这样的系统特性,为了提高查询效率,我们在设计数据仓库的时候,需要注意如下几点:
1)为了加快数据查询的速度,提高数据仓库的执行性能,在每张维度表的主键列上建立聚集索引,在每张事实表的ID列上建立聚集索引,并在每个关联列上建立非聚集索引。
2)尽量将常用的计算固化成数据表中的字段列,并通过ETL过程进行处理。虽然这样会使数据仓库变得更加庞大,但是,却提升了前端查询、汇总和分析的效率。对于辅助领导决策的企业级BI系统来说,对于分析效率的需求远高于数据仓库的空间占有需求。
3)制造业的数据最大特点就是数据量极其庞大,会致Cube处理变慢,占用很多的系统资源。因此,在搭建数据仓库时,就必须提前采用一定的设计策略和调整办法。办法就是将维度表尽量制作的薄一点,同时,将事实表尽量制作的窄一点。这样,在Cube处理时,就会大大提高效率。
在数据仓库建模完成后,我们通过ETL过程将源系统中的数据导入到数据仓库。那么,在应用SSIS的过程中,我们需要注意如下几点:
1)数据格式不统一、不规整问题。本例中,在字段中含有“ ”、“\”等全角字符,SSIS在处理时就会报错,必须进行处理。解决方法就是在列名后加上collate Chinese_PRC_CI_AS_WS关键字,即可找到含有全角的字符,然后用Replace即可替换掉。
2)ETL的增量抽取问题。由于制造业数据量极大,更新速度快,且对数据更新的实时性要求极高,不可能每次都将全部数据进行抽取加载,因此,增量抽取问题就显的尤为重要了。解决方法为:1、在时间戳字段添加聚集索引; 2、设置变量获取最大值。
3)ETL包调度远程连接报错问题。在ETL包中,如果连接管理器连接的是远程服务器的数据库,手动运行ETL包没有问题,可是,如果在调度中运行该包,就会报错。解决方法为,在本地服务器和远程服务器使用同一用户名和密码。
之后,我们就可以为OLAP维度建模了。我们以数据仓库中的维度表为基础,建立维度。其中,比较值得一提的是地区维度的设计:Dim_Rigion,该维度共有3个属性,分别是Dim Region,AreaID,以及Parentrowid,其中Dim Region字段作为逻辑主键,并在此属性层次结构下,与其他2个属性层次结构分别建立了属性关系。一般项目中的地区维度会被建成标准的层次关系,但是在本例中,基于销售地区分布不平衡的特点,我们采用了父子维度关系,简练的表达了地区之间的从属关系。如图所示:Dim Region 字段和Parentrowid字段形成了父子维度关系。
(图一)
在将数据仓库建模和OLAP维度建模成功搭建好以后,现在,我们开始以数据仓库为基础创建多维立方体CUBE。在这里,我们建立了8个度量值组,分别为Fact_SalesOrder(采购订单度量值组),Fact_PosSales(门店销售明细度量值组),Fact_WaitOrder(销售下单度量值组),Fact_SalesContact(销售合同度量值组),Fact_PosStorageLog(门店明细度量值组),Fact_StorageLog(大仓库明细度量值组),Fact_PPODoc(订货会订单度量值组),以及Fact_SalesDetails(销售明细度量值组)。如图所示,整个多维模型成型了。
(图二)
为了方便对多维数据的分析和查询,我们使用多维数据库查询语言(MDX)建立了一个命名集[TimeSet]和多个计算成员。
值得一提的是,在ERP相关的BI分析中,客户普遍需要一个“任意期间”的参数范围,比如:“我想看某一起始日到某一截止日的库存数量”,该“起始日”和“截止日”由分析员在报表展现的时候任意指定。这样的分析需求在多维分析模型中需要特定的实现方法,我们采用命名集“[TimeSet]”来实现。该命名集的MDX表达式如下:
DESCENDANTS
(
[Dim Time].[FullHie],
[Dim Time].[FullHie].[FullTime]
)
DESCENDANTS函数返回成员在指定级别或距离上的后代集,可以选择包括或不包括其他级别上的后代。利用该函数,我们就可以轻松而方便地在浏览多维分析模型时任意选取某一时间段内的度量值进行查询和分析。
之后,我们还可以通过Reporting Services的参数动态的给这两个日期赋值,从而实现客户“任意期间”的分析需求。
另外,客户在ERP相关的BI分析中普遍需要的KPI指标有如下两种,我们可以通过计算成员来实现:
1)期初数量/金额。MDX表达式如下:
sum
(
{[Dim Time].[Full].FirstChild:
[Dim Time].[Full].CurrentMember.PrevMember},
[Measures].[入库数量/金额]
)
-
sum
(
{[Dim Time].[Full].FirstChild:
[Dim Time].[Full].CurrentMember.Prevmember},
[Measures].[出库数量/金额]
)
FirstChild函数返回成员的第一个子成员。CurrentMember函数返回迭代过程中指定的维度或层次结构的当前成员。PrevMember函数返回指定成员所在级别中的上一个成员。将当前成员的上一个成员的“总入库数量/金额”减去当前成员的上一个成员的“总出库数量/金额”,得出的结果即为“期初数量/金额”。
2)期末数量/金额。MDX表达式如下:
sum
(
{null:
[Dim Time].[Full].CurrentMember},
[Measures].[入库数量/金额]
)
-
sum
(
{null:
[Dim Time].[Full].Currentmember},
[Measures].[出库数量/金额]
)
CurrentMember函数返回迭代过程中指定的维度或层次结构的当前成员。将当前成员的“总入库数量/金额”减去当前成员的“总出库数量/金额”,得出的结果即为“期末数量/金额”。
然后,我们可以使用Analysis Services中的“浏览器”选项卡,可以将我们所关心的度量值和相关的维度信息拖拽到数据区域内,还可以在参数区域内进行SLICE操作。
(图三)
3、报表展现
多维分析模型搭建好以后,就可以使用Reporting Services工具实施RS报表流程,实现报表的创建、发布、展示和订阅。
在reporting services中的“数据”栏,将需要在报表中展现的数据,从量度和维度区域拖拽到数据区域内,还可以在参数区域设置需要在报表中展现的参数。
在reporting services中的“布局”栏,从左侧“工具箱”栏中选出所需要的适当的报表展现格式,拖拽到右侧“主体”区域内,并将需要展现的数据拖入格式框内。
图十是reporting services中的“预览”栏,可以预览报表中将要展现的数据,并可以在参数区域选择参数,根据客户的需要任意定制报表。
(图四)
报表建立好以后,就可以在网络上发布。发布成功以后,在地址栏菜单内输入http://localhost/reportserver”这个URL地址,就可以方便地在网络上查看报表。
点击已经发布成功的报表名称,就可以看到具有强大格式定制功能,且用户界面友好的报表,还可以随意设置筛选参数条件,方便灵活地定制自己需要的报表。
通过点击报表内的“+”号,可以轻松地实现对数据的Drill-Down。
另外,还可以使用REPORTING SERVICES自带的dundas插件,对报表效果进一步进行增强和美化,如图五。或者使用第三方前端展现工具,如ProClarity等,对客户端关心的数据进行专业、深入而灵活的分析,特别是可以根据客户的独特需求定制分析。
(图五)
上述内容选自《Windows IT Pro Magazine国际中文版》2007年第4期