数据流中有很多段路,每一段路都有一个起点,一个终点。
在起点和终点之间,有数据转换(Transformation)。
实现数据转换这样的功能,我们需要一位细致、认真的修路人。
在一马平川的原野上,修路人可以提供快速推进的作业方法。在崇山峻岭之间,修路人也要具备遇山开山、遇水搭桥的作业能力。修路人必须是一个多面手。
BW/4HANA数据转换正是这样一位修路人,它既提供了图形化的快速字段匹配、公式计算、单位换算、规则分组等定义转换规则的方法,也提供了嵌入式编程的增强开发方法。
01
通向目标字段的7种方式
数据转换定义的是源对象与目标对象之间的连接关系。而具体的转换逻辑是在字段层面进行定义的,我们需要定义源对象的每一个字段与目标对象的每一个字段的映射和转换的逻辑,这就是转换规则。
打开转换编辑界面,编辑界面包含了“常规(General)”“规则(Rules)”“技术规则(TechnicalRules)”等选项卡。切换到“规则(Rules)”选项卡,如图 1所示。
“规则”选项卡中列出了数据源和数据存储对象的字段。如果转换的数据源的某个字段与转换目标的某个字段使用同一个信息对象,系统会自动生成字段映射的建议。我们可以手工指定字段之间的映射关系或者对系统建议的映射关系进行调整。
双击代表转换规则的连接线,在属性窗口可以看到规则的明细。
图1. 转换编辑界面-规则属性
在规则属性窗口中,即如图 1屏幕的下方,可以设置目标字段赋值方式多种选项,我们称之为规则类型。常见的规则类型有以下选项可用:
一、常数
直接为目标字段指定一个常数值,而不是使用源字段。
二、直接分配
直接使用所选的源字段的值填充目标字段。这是最常用的一种赋值方式。
三、公式
通过公式的结果更新目标字段。用户可以使用图形化的公式编辑窗口,为目标字段赋值。
四、初始值/不更新
对于主关键字,即目标对象的键值,系统提供的选项是“初始值(Initial)”。对于非主关键字,系统提供的选项是“不更新(No Update)”。
五、读取数据对象
这里可以读取的数据对象包括带属性的信息对象(特性)和数据存储对象。将源字段作为查询依据,将查询结果值赋予目标字段。
六、例程
例程就是我们可以自己定义的程序代码。根据转换设置不同,这里的例程可能是ABAP例程或者HANA SQL脚本例程。
七、时间更新
由于时间字段的特殊性,系统提供了自动的时间转换或时间分配算法。
此外,对关键值的更新,系统还提供了关键值的聚集类型设置,以及货币和其他计量单位的自动转换功能。
02
开启立体交通模式
从起点到终点,可以修建多条道路。这就好比从源对象到目标对象,可以同时存在多个数据转换。
在BW/4HANA的一个数据转换当中,也会有立体交通模式存在。一个数据转换中可以有多个不同的规则组。
顾名思义,规则组是转换规则的组合。每一个转换至少包括一个规则组,称为标准组。其他的规则组都以标准组为参照。就是说,如果标准组发生了变化,其他规则组自动发生与标准组同样的变化。
例如,某公司在计算销售人员的奖金时是以销售额作为计算基数的。对于一线的销售人员,他们取得的销售额就是计算基数。对于经理人员,他们手下的销售人员的销售额的10%计入经理人员的奖金计算基数。
在系统实现时,源对象存储了销售的原始数据,目标对象存储奖金计算基数。这时,我们可以使用两个规则组实现,如图 2所示。
图2 规则组示例
对于一线的销售人员,可以直接使用相应的字段更新目标对象的奖金计算基数。同时,对于销售经理,使用另一个规则组计算出的经理的奖金计算基数,并同时更新到目标对象中。
从示例中可以发现,规则组的使用可以方便也解决由源对象的一条数据记录生成多条数据记录,并同时更新到目标对象的问题。
03
修路人的终极必杀技
在前面的介绍中,修路人尽显儒雅的风度,通过图形化界面的配置选项,就可以实现丰富的数据加工处理的功能,满足绝大部分业务需求。如果这些图形化的界面还是不能满足数据处理的需求怎么办呢?修路人自有妙计。
SAP BW/4HANA数据转换规则的定义除了提供图形化的界面外,也提供了各种编程的方法。例程就是ETL过程中最常用的一种编程的方法。例程使用HANA SQL脚本或者ABAP对象编程技术实现,由预置的定义部分和实现部分组成。例程的输入、输出参数以及方法的标签是在定义部分就确定的。方法的具体实现逻辑由实现部分完成,用户可以自行定义方法实现的逻辑。在方法中可以进行对象声明。
在转换规则里,用户可以使用例程来定义用图形化界面无法完成的复杂的单个目标字段的数据转换规则。同样对于整个转换而言,SAP BW/4HANA也提供了相应的例程类型,允许用户定义自己的转换。图3说明了这些例程在数据流中的位置。
图3 转换中的例程
图3中显示转换包含了4种不同类型的例程。
1)开始例程:开始例程在每个数据包开始进行转换时运行。
2)特性或关键值的例程:这种例程前面介绍过了,属于转换规则的一部分。
3)结束例程:结束例程对经过转换规则转换后的数据进行操作。
4)专家例程:使用专家例程可以编写系统提供的规则类型以外的任意转换。
此外,还有一种特殊的例程,即反向例程。在上图中没有标识出来,它用于将目标对象在运行报表时的选择条件和输出字段转化为对源对象的选择条件和输出字段的要求。
-End-
本文作者:陈永杰
著有《SAP大数据完全解决方案》等多本有影响力的SAP图书