zoukankan      html  css  js  c++  java
  • 数据转换

     

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

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

    clip_image001

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

    clip_image003

    一个转换能够包括多个转换例程与转换规则组。每一个转换规则组能够有多个转换规则。

    通常系统依据数据源的情况来自己主动关联一些字段,可是我们还是须要做继续的改动才干达到我们的目标。上面的图示中左側的表格是代表数据源,右側的代表相应字段的转换规则,也就是说要想把数据从開始的数据源转换为最后我们想要的格式化后的数据,就须要在右側表格中进行规则化。

    我们来具体阐述下怎么创建和编辑规则。当你把相应字段拖动完毕后,你能够双击此线,然后会弹出以下的窗体。请重点看规则类型中的规则。

    clip_image005

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

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

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

    (4) 初始值/无转换

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

    (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 。

    规则组

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

    顾名思义,规则组是转换规则的组合。一个转换能够包括多个规则组。每个转换至少包括一个规则组,称为标准组。其它的规则组都以标准组为參照。就是说,假设标准组发生

    了变化,其它规则组能够选择自己主动进行与标准组相同的变化。当对标准组进行改动时,系统会弹出对话框询问是否将变化应用到全部规则组或者仅仅是改变标准组。

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

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

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

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

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

    clip_image008

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

    clip_image009

  • 相关阅读:
    hdu 1042 N!
    hdu 1002 A + B Problem II
    c++大数模板
    hdu 1004 Let the Balloon Rise
    hdu 4027 Can you answer these queries?
    poj 2823 Sliding Window
    hdu 3074 Multiply game
    hdu 1394 Minimum Inversion Number
    hdu 5199 Gunner
    九度oj 1521 二叉树的镜像
  • 原文地址:https://www.cnblogs.com/zfyouxi/p/4033468.html
Copyright © 2011-2022 走看看