商务智能中例程的分析与研究
2017-03-24吴卫亮马一然范春迎
吴卫亮++马一然++范春迎
摘 要:ETL过程对是数据仓库的核心和灵魂,它包括数据的抽取,转换和装载三个过程,是实施数据仓库过程中的一个重要步骤。例程则是ETL过程中常用的一种采用编程的方式来解决图形化界面无法完成的复杂的数据转换的方法。本文主要归纳了针对SAP BI 7.0后的版本中ETL过程中数据转换时所有类型的例程,并结合唐钢SAP商务智能系统中用到的相关例程的实例对例程的如何运用做了详细的介绍及解析。
关键词:商务智能;ETL;例程
中图分类号:F713 文献标识码:A 文章编号:1671-2064(2017)02-0039-02
BI,是商务智能(Business Intelligence)英文的缩写,BI的概念最早在1996年就提出来了。确切的讲,商务智能并不是一项新技术,它是将数据仓库(DW)、在线分析处理(OLAP)、数据挖掘(DM)等技术与客户关系管理等应用系统结合起来应用于商业活动实际过程当中,及时服务于管理层决策的目的。SAP BI主要由企业数据仓库、商务智能平台和业务浏览器套件构成。商业智能的关键就是通过数据仓库系统从许多来自不同的企业运作系统的数据中提取出有用的数据并进行清理,以保证数据的正确性,然后经过抽取(Extraction)、转换(Transformation)和装载(Load),即ETL过程,合并到一个企业级的数据仓库里,从而得到企业数据的一个全局视图,在此基础上利用合适的查询和分析工具、数据挖掘工具、OLAP工具等对其进行分析和处理,最后将信息知识呈现给管理者,为管理者的决策过程提供支持。
1 例程与ETL过程
从引言中我们可以看到,企业数据仓库系统在商务智能中占据着十分重要的地位。数据仓库的架构大体可以三部分:后台是数据储存和计算引擎;前端是数据战线分析的用户界面;还有一个重要的部分就是ETL。ETL过程,即对数据的抽取,转换和装载的过程,它是数据仓库的核心和灵魂。ETL过程能够按照统一的规则集成并提高数据的价值,是负责完成数据从数据源向目标数据仓库转化的过程,是实施数据仓库的重要步骤。由于实际的源系统中可能会有多种完全不同的储存格式,甚至还有许多要求的数据在源系统中并不直接存在,而是需要根据某些公式对各部分数据进行计算才能得到。因此,这就要求ETL工具必须对所抽取的数据进行灵活的计算、合并、拆分等转换工作。例程则是ETL过程中常用的一种采用编程的方式来解决图形化界面无法完成的复杂的数据转换的方法。
2 例程及其应用
例程使用的是ABAP对象编程技术,由预置的定义部分和实现部分组成。例程的输入、输出以及方法的标签是在定义部分就确定的,方法的具体实现逻辑由实现部分完成。例程主要分为以下几种类型:
(1)开始例程:开始例程在每个数据包开始进行转换时运行。开始例程没有返回的值,它直接对数据包进行计算、修改或删除等操作,然后将操作的结果直接保存在数据包中进行后续的转换步骤。
(2)特性或关键值的例程:这种例程是作为一种规则类型出现的,它属于转换规则的一部分。它可以为一个关键值或一个特性定义一个单独的例程。
(3)结束例程:结束例程对经过转换规则转换后的数据进行操作,它操作的是一个与目标对象字段结构一致的表结构。与开始例程一样,它也是逐个数据包进行处理的。在结束例程中,可以进行各种数据的操作,比如,删除不需要的数据、进行数据质量检查等。
(4)专家例程:专家例程是系统提供的进行数据转换的另一个选项,这种类型的例程很少使用。一旦为一个转换创建了专家例程,系统会删除同一转换内已经定义好的其他转换规则。
此外,还有一种特殊的例程,在图一中没有标示,即反向例程。它将目标对象在运行报表时的选择条件和输出字段转化为源对象的选择条件和输出字段的要求。反向例程在实际应用中也是很少使用的。
下面我们以唐钢SAP BI系统中实际用到的一些例程作为实例来做详细的介绍:
先以一个由产品利润分析CUBE到销售CUBE的转换规则中的开始例程为例,我们在转换规则的编辑界面中单击“开始例程”就可以对开始例程进行编辑。
编辑界面中已有一些程序代码,代码用不同的颜色标示。其中灰色的代码是系统预定义的部分,用户是不能更改的;黑色的代码是用户可以修改的部分。例程中的代码分为全局部分和本地部分。在全局部分,声明的数据对所有例程都是有效的;本地的数据声明只对本例程有效。
在代码*$*$ begin of global。。。和*$*$ end of global。。。之间输入用户的数据定义。用户可以使用两种方式声明数据:
(5)使用语句“CLASS DATA”进行全局数据声明。用这一方法声明的数据在整个数据请求中都有效。
(6)使用语句“DATA”进行全局数据声明。用这一方法声明的数据只在当前的数据包中都有效。
全局数据声明使不同的例程之间共享数据成为可能。例如,可以在例程中使用其他例程的中间计算结果,或者在稍后再次调用例程时重用例程的数据。
代码的第二部分是例程类的实现部分,具体定义了各种方法的实现逻辑。用户可以在代码*$*$ begin of routine。。。和*$*$ end of routine。。。之间进行程序代码编写,完成编写后检查并保存代码,便完成了开始例程的编辑。
同样的,对结束例程编辑的方法与开始例程大同小异,点击“结束例程”,然后按照开始例程的编辑方法就可以实现。
对于某个特性或关键值的例程的编辑,在规则类型中选择例程选项,然后点击更改规则就进入了例程的编辑界面,界面与上述開始例程的大体一样。程序代码用CONCATENATE语句将源对象中的会计年度/期间FISCPER字段前4位和后2位字符组合起来赋值给RESULT字段,而RESULT字段就是目标对象日历年/月0CALMONTH字段,最终实现了源数据向目标数据的转换。
专家例程的结构与其他例程的结构是一样的。其输入参数是所有源字段,输出是所有的结果字段。不过一旦创建了专家例程,系统会删除同一转换内已经定义好的其他转换规则,也就是说,专家例程会替换整个转换。
对于上述的几种例程,在例程创建时,SAP BI自动生成了相应的反向例程。以开始例程为例,系统在开始例程中自动生成一个方法inverse_start_routine。用户同样在代码*$*$ begin of inverse routine。。。和*$*$ end of inverse routine。。。之间进行程序代码编写。运用反向例程会将在运行报表时目标对象选择条件和输出字段完全转化为对应源对象的选择条件和输出字段的要求。