zoukankan      html  css  js  c++  java
  • SAP BW 顾问靠手 — 传输方式之Transformation转换

    基本介绍

    对 数据进行转换就是对数据的合并、清理和整合。通过转换,可以实现不同的源数据在语义上的一致性。SAP BI 的转换(Transformation) 定义的就是对数据进行处理的规则。当数据从一个BI 对象加载到另一个BI 对象时,数据是经过转换的。在源对象和目标对象之间创建一个转换,转换将源对象的字段格式转变成目标对象的字段格式。从前面的章节可以看出转换在SAP BI 数据流中的地位和作用,其中信息提供者是信息对象、数据存储对象、信息立方体和信息集等对象的统称。

    接着,我们来创建一个转换。首先右键对应的数据源,点击“创建转换”。弹出下面的窗口。在Object Type中可以选择要传输的目标对象,然后填写目标名称。源数据的信息是系统自动填充的。这时点击继续。

    clip_image001

    下面我们来定义转换规则。

    clip_image003

    一个转换可以包含多个转换例程与转换规则组。每个转换规则组可以有多个转换规则。

    通常系统根据数据源的情况来自动关联一些字段,但是我们还是需要做继续的修改才能达到我们的目标。上面的图示中左侧的表格是代表数据源,右侧的代表对应字段的转换规则,也就是说要想把数据从开始的数据源转换为最后我们想要的格式化后的数据,就需要在右侧表格中进行规则化。

    我们来详细阐述下怎么创建和编辑规则。当你把对应字段拖动完成后,你可以双击此线,然后会弹出下面的窗口。请重点看规则类型中的规则。

    clip_image005

    (1) 常数。直接为目标字段指定一个常数值,而不是使用源字段。

    (2) 直接分配。直接使用所选的源字段的值填充目标字段。这是最常用的一种赋值方式。

    (3) 公式。选择公式后会弹出一个窗口,在里面可以进行对字段的加减乘除等等公式计算。

    (4) 初始值/无转换

    对于关键字段,即目标对象的键值,系统提供的选项是"初始值"系统自动为根据目标字段的类型赋予一个初始值。对于非关键字段,系统提供的选项是"无转换"系统不在目标对象中更新目标字段,这使得目标字段保存原来的值成为可能。

    (5) 读主数据

    这里的主数据指的是信息对象中含有属性的特性。源字段是特性的键值,通过源字段读取特性里的属性,用属性的值更新目标字段。因此,源字段必须包含特性的键值,而特性必须包含目标字段对应的信息对象作为属性。

    (6) 例程

    例程就是我们可以自己定义的程序代码。我们可以自己编程定义转换例程,为目标字段赋值。如果更新的目标字段是具有单位的关键值,如收入或数量,我们还可以使用规则类型"具有单位的例程"。在例程的返回参数中,除了目标字段,还有单位字段。

    (例程详细请参见SAP顾问靠手BW篇 — SAP中的例程)

    转换例程应用:

    在数据传输过程中需要补充物料前导零,则在信息对象例程中加入以下代码即可。

    *$*$ begin of routine - insert your code only below this line
    CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT'
    EXPORTING
    INPUT = SOURCE_FIELDS-MATNR
    IMPORTING
    OUTPUT = RESULT.
    *$*$ end of routine - insert your code only before this line

    (7) 时间更新

    由于时间字段的特殊性,系统提供了3 种不同的时间更新的方式。

    1 )直接更新。系统直接将源字段的值赋予目标字段的值。这适用于源字段和目标字段

    类型相同的情况,比如都是日历年。

    2) 时间转换。系统会自动辨别源字段与目标字段的类型,可使用相应的时间转换函数。

    比如从日历天到日历年的转换,系统会自动使用时间转换。

    3) 时间分配。用于从大的时间单位向小的时间单位赋值。系统会自动将源对象的数据

    字段,即关键值,按比例分给目标字段的数据字段。

    注意:

    上面我们讲到的转换通常在不同的信息体中是有略微的差别,看下面图例,我们来介绍下。clip_image006

    图中多了一个集合(Aggregation)的选择框。

    1) 如果目标对象是信息立方体,可能的选项有: 合计、最大值和最小值。

    2) 对于信息对象,即特性,只有"覆盖"这一选项。对于主键相同的记录,后面的记录的

    值会直接覆盖以前的记录。

    3) 对于数据存储对象,根据数据和数据源的不同,可能的选项有4 种。

    ①合计:当数据源支持加总的增量更新时才可用。对于数据类型字符、日期、时间、货币、单位等不能使用汇总选项。

    ②最大值。

    ③最小值。

    ④覆盖:当数据源支持增量更新时才可用。

    对 于数值型的字段,系统使用特性ORECORDMODE 来表明更新的类型。如果数据源只提供残留图像,系统会建议使用"覆盖"选项。当然,我们也可以根据应用情景改变这一设置。比如我们想统计记录变化的次数, 可以设置一个计数器字段,在更新规则中,将它的值设置为常数"1 ,并将更新类型设置为"合计"。

    特性ORECORDMODE 用于标志从SAP 源系统的增量更新记录。如果不是将增量请求更新到数据存储对象,或者只是以文本文件作为数据源,可以不必使用特性

    ORECORDMODE 。

    规则组

    学习完转换类型后,我们再看学习下什么叫规则组,这也是转换中一个很重要的东西。

    顾名思义,规则组是转换规则的组合。一个转换可以包含多个规则组。每一个转换至少包括一个规则组,称为标准组。其他的规则组都以标准组为参照。就是说,如果标准组发生

    了变化,其他规则组可以选择自动进行与标准组同样的变化。当对标准组进行修改时,系统会弹出对话框询问是否将变化应用到所有规则组或者只是改变标准组。

    从 转换规则,特别是集合类型的介绍中我们可以看出,所有的关键值〈数值字段〉的更新都是与特定的特性(关键字段)相关的。关键值也只有与系统的特性相联系, 才具有具体的业务含义。但是,对于有些关键值而言,需要同时更新不同的特性的组合。这时候,就需要多个规则组来实现关键值对不同特性组合的更新。

    我们可以根据上面的一张图来找到Rule Group。点击后可以看到新建规则组,然后我们输入规则组名称,这样就可以新建一个规则组了。然后我们对规则进行编辑以达到我们的需求。

    使用多个规则组的一个例子

    某公司在计算销售人员的奖金时是以销售额作为计算基数的。对于一线的销售人员,他们取得的销售额就是计算基数。对于经理人员,他们手下的销售人员的销售额的10% 计入经理人员的奖金计算基数。

    在系统实现时,源对象存储了销售的原始数据,目标对象存储奖金计算基数。这时,我们可以使用两个规则组实现,如图下所示。

    clip_image008

    看下图,绿色的图标就是创建的转换。

    clip_image009

  • 相关阅读:
    Java中类与类的关系
    谈谈spring
    mybatis和hibernate的区别
    微信小程序文档解读(一)--api提供支持有哪些
    nodejs问题整理--fs.exists无法正确判断文件的问题
    微信小程序-多级联动
    react
    [微信小程序] 终于可以愉快的使用 async/await 啦
    [Node] 逃离回调地狱
    单例模式
  • 原文地址:https://www.cnblogs.com/hanmos/p/2590599.html
Copyright © 2011-2022 走看看