【SAP BW】 多版本数据取最大版本号


需求

在财务、制造、营销这些模块常常会涉及到“xxx月xxx天目标”、“xxx年xxx月目标”的目标值录入,录入之后会再做修改,这样就需要用版本号去区分每次录入的目标,但是最终在BW中只需要用到最新的那版数据,即是去最大版本号的数据。常见的版本号都是取【当前系统时间】。

方案

BW中使用到的架构一般如图所示:
这里写图片描述


对录入表的版本号处理过程在处理1和处理2。

处理1

1,在建立抽取层DSO时,增加一个标识字段(后面在合并层使用到),在转换中设置为一个常量,名称随便取,类型为char(1)。
2,在转换中使用例程,用ABAP代码将版本号进行格式化,将时间格式的版本号转成字符串,方便后面处理。
3,直接将数据从数据源抽取到抽取层DSO中。

处理2

1,合并层的DSO根据实际需求建立,不需要添加【标识字段】。
2,在转换的开始例程中插入以下的ABAP代码:

"创建内表
 data: BEGIN OF LS_ZEFIO20,
*      Field: ZBBH 版本号.
        ZBBH           TYPE C LENGTH 20,
*      Field: ZBS ZBS.
        ZBS           TYPE C LENGTH 1,
       END OF LS_ZEFIO20.
DATA      LT_ZEFIO20 like TABLE OF  LS_ZEFIO20.
**从抽取层活动表 把数据写到内表中
    SELECT
     ZBBH
     ZBS
      INTO TABLE
      LT_ZEFIO20
      FROM /BIC/AZEFIO202.
      "根据年 标识 版本号 降序排列
      SORT LT_ZEFIO20  DESCENDING BY ZBS  ZBBH.
      "根据标识去除重复值
DELETE ADJACENT DUPLICATES FROM LT_ZEFIO20 COMPARING  ZBS.
      "根据版本号排序
      SORT LT_ZEFIO20   BY ZBBH.

LOOP AT SOURCE_PACKAGE  ASSIGNING <SOURCE_FIELDS> .
      "二分法查找 根据版本号取最大版本号的数据
             READ TABLE LT_ZEFIO20 INTO LS_ZEFIO20
        BINARY SEARCH WITH  KEY
        ZBBH = <SOURCE_FIELDS>-ZBBH.
      IF sy-subrc = 0.
      ELSE.
        DELETE source_package.
      ENDIF.
ENDLOOP.

3,执行DTP,验证是否取到最大版本号。

有问题请拍砖
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值