BW:BW增量更新方法(假增量)

1 说说假增量

 


我们都知道,对于BW来说,很多ECC的标准数据源自带了增量更新功能,每天各种凭证产生的增量数据会自动堆积到增量队列里,然后BW端做一个增量信息包按天把这些增量抽取到数据仓库里,非常轻松自然,对于客户和顾问,都是透明的自动的容易实施的,这也是上过ECC的企业数据仓库采用SAP BW的一个优势所在。

 

但是对于非ECC的一般数据库或者ECC的自定义数据源,做增量更新就苦了。对于ECC的自定义数据源,SAP给了一种标准方案,我们看看这种方法:用一个时间字段或数字字段标记增量,当这个字段在表里的数值变化时,就认为是增量,把这条记录作为增量记录,增量信息包会挑出这些记录传送上去。这种方法的问题是显而易见的,不管是时间还是数字字段,我们都需要ABAP工作者额外编程去控制这个字段的变化,这样才能正确让系统选择出增量(用表中的凭证创建日期等字段作为时间字段去控制是不可行的,因为你不能保证今天不会修改昨天的数。)对于非ECC的一般数据库连接,SAP很干脆的说,不支持增量(06年是这么讲的,以后支不支持不晓得)

 

总结一下,在不同的数据源下,对增量的支持是这样的 :

 

 

 


因此,对于不支持或不好实现增量的情况,我们比较推荐的方法是,使用带选择条件的完全抽取信息包,每一次定期抽取之前N个月的数据(前提是客户保证,不修改N之前月的数据),然后上传到DSO中,如果这N个月的数据没有变化,则会被覆盖掉,系统当什么事都没发生;如果有变化,则会把变化部分覆盖DSO相同主键的数据,然后记录到DSO的更改日志表,再往CUBE中传变化部分(当然:DSO到CUBE的DTP要设置成增量DTP),这样,就以比较小的抽取时间的代价(每天只要抽最近N个月,N尽量小的数据),换来了增量抽取的几乎全部优点(每次抽取时间比较短,数据量小,传到CUBE也同样只传增量部分)。这种做法,SAP 官方教材极力推荐,见下图(取自教材350增量更新一章最后一节),BW江湖人送外号假增量即是此种方法。

 

 

 

 

比如说,每天抽取最近两个月的数据,在信息包里我们可以这么写例程去控制(时间选择字段为T_DATE):

data: l_idx like sy-tabix.
data: tmp_date type d.
read table l_t_range with key fieldname = 'T_DATE'.
l_idx = sy-tabix.
tmp_date = sy-datum - 60.
l_t_range-high = sy-datum.
l_t_range-low = tmp_date.
l_t_range-sign = 'I'.
l_t_range-option = 'BT'.
modify l_t_range index l_idx.
p_subrc = 0.

这样最近两个月的数据每天抽取,每天覆盖,再利用DSO的更改日志表,就实现了“假增量”。

如果数据源对应的不是DSO,是CUBE,那么就无法使用更改日志表,BW也给我们一种实现假增量的方式,见下图:

 

 

 

解释一下这个图,CUBE里的数据是不能覆盖的,所以,如果要每天抽取部分数据的话,必须要把上次相同抽取条件(比如:今年)的数(请求)给删掉,这个我们可以在处理链里设置:删除信息块中的重叠请求:

 

 

 

一般来说,数据源都是先把数传递到DSO再到CUBE,每次删除重复请求感觉上也不是很安全,所以上述方法使用的不多。

先到DSO再到CUBE,每一次用程序抽取最近N个月数据的这种假增量方法看似比较完美,其实背后隐藏了一个极大的问题,即用户在源系统物理删除的那部分记录如何在BW也每天自动删除掉。原系统物理删除掉的记录,BW在抽取过程中是无法自动识别的,在DSO的更改日志里当然也体现不出来,CUBE端肯定也不会自动删除掉,这个如何处理?放任不管是肯定不行的,在这次首钢项目的开始,项目组就提出了这个问题,要求给出合适的解决方案。

 

1 让客户最偷懒的,解决物理删除问题的假增量方案

 

解决方案经过研究,可以有以下两种主要思路。第一种,由开发源系统的客户方维护人员,在视图里增加一个删除标记,每一次数据删除了,都打上这个标记,BW抽取上来后,在报表里设置条件,凡是有这个标记的数据,就不显示出来。这种方案的问题在于客户必须要修改它那边源系统的代码,很多时候,客户想偷个懒,不太愿意改,这种方案需要客户配合,也不是标准的解决方案。第二种方法,在BW这边识别,并在抽取时自动进行处理,这样客户什么也不需要做,相当舒服,但是BW这边如何能尽量方便的处理,就得综合考虑一些问题了。

 

问题一: BW如何找出被物理删除的记录?

可以在开始例程里统一判断,即把开始例程的SOURCE_PACKAGE和DSO中相关记录进行比对,DSO中有,而SOURCE_PACKAGE找不到的记录,即可认为是删除,例程如下:

SELECT * FROM /bic/az3pp_o0900 INTO TABLE it_dso.

LOOP AT it_dso INTO st_dso.

READ TABLE SOURCE_PACKAGE INTO st_source WITH KEY STAT_DATE =

st_dso-calday.

IF sy-subrc <> 0.

“ 确认删除,此处开始处理问题二

ENDIF.

ENDLOOP.

 

问题二: 找到被删除记录后,怎么能让DSO的更改日志知道这条记录被删除了?

我们知道,DSO的更改日志会自动把这一次的数据和上一次的数据进行比对,把差异记录在日志表里,再传递到CUBE中,因此,我们可以考虑,手工把被删除数据的关键值统一设置为0,这样,假设原来关键值是15的话,DSO会被覆盖成0,DSO的更改日志表会变成-15,再传到CUBE中就是15 +(-15)= 0了。这样等于针对删除记录自动产生了反冲记录,可以同时保证DSO和CUBE数据的准确性了(DSO和CUBE该记录都为0了),例程如下:

LOOP AT it_dso INTO st_dso.

READ TABLE SOURCE_PACKAGE INTO st_source WITH KEY STAT_DATE =

st_dso-calday.

IF sy-subrc <> 0.

st_source-STAT_DATE = st_dso-calday.

st_source-L4_FACILITY_ID = st_dso-plant.

st_source-L4_WORKCENTER_ID = st_dso-workcenter.

 

st_source-EQPT_OUT = 0.

st_source-EQPT_SCRAP = 0.

st_source-SACRPT_HRM_INPUT = 0.

st_source-SALE_OUT = 0.

st_source-SALEMAT_HRM_INPU = 0.

 

 

st_source-record = tmp_record.

APPEND st_source TO SOURCE_PACKAGE.

ENDIF.

ENDLOOP.

注意,上述例程中非关键值要设置成和原先一样,关键值都要设置成0.

完整例程如下:

DATA it_dso TYPE TABLE OF /bic/az3pp_o0900.

DATA st_dso TYPE /bic/az3pp_o0900.

DATA st_source TYPE _ty_s_sc_1.

DATA tmp_record TYPE rsarecord.

 

SELECT * FROM /bic/az3pp_o0900 INTO TABLE it_dso.

READ TABLE SOURCE_PACKAGE INTO st_source INDEX 1.

tmp_record = st_source-record.

CLEAR st_source.

 

LOOP AT it_dso INTO st_dso.

READ TABLE SOURCE_PACKAGE INTO st_source WITH KEY STAT_DATE =

st_dso-calday.

IF sy-subrc <> 0.

st_source-STAT_DATE = st_dso-calday.

st_source-L4_FACILITY_ID = st_dso-plant.

st_source-L4_WORKCENTER_ID = st_dso-workcenter.

 

st_source-EQPT_OUT = 0.

st_source-EQPT_SCRAP = 0.

st_source-SACRPT_HRM_INPUT = 0.

st_source-SALE_OUT = 0.

st_source-SALEMAT_HRM_INPU = 0.

 

 

st_source-record = tmp_record.

APPEND st_source TO SOURCE_PACKAGE.

ENDIF.

ENDLOOP.

这样的方案,我们每一次都只需把数据源到DSO的转换增加一个类似的开始例程,所有物理删除的问题就可以得到统一的解决了。以后有少数字段调整,修改起来也比较方便。对源系统那端的开发人员,工作量=0,对BW顾问,工作量也很小:)

写了这么多,总结一下,用户物理删除(无删除标记的)的假增量方案,也就是如下两步而已:

1) 每次抽取最近几个月的数据到标准DSO再到CUBE,

2) 从数据源到DSO的转换增加一个开始例程,把每次传输源系统删除的数据找出来,以关键值为0的形式更新到后续的数据目标中。

 

2 备注:

关于这种场景,SAPBW350的标准教材里说到一种方法,好像就是我本文这个意思(写的非常简略,我这篇文章把它细节化了),还有一种可能是手工把RECORDMODE这个字段设置成D或者R(删除或反转映像?)的意思,教材没有提!我们这种做法经过实验是肯定可以的,手工设置RECORDMODE字段如果可行的话,应该更节约代码量….留待大家挖掘。。。

教材原文:

 

 

 

 

 

请关注最后两句!我是写这篇文章的时候去翻教材才发现的,具体方法应该就是本文这种或者备注猜测的那种。

本文说了那么多,教材这两句竟然给概括掉了,真牛!有的时候想想,SAP官方教材还真是有很多闪光点的,窝在一些无人关注的角

转载于:https://www.cnblogs.com/hanmos/archive/2012/08/08/2629082.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/274683.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

插图 引用 同一行两个插图_为什么插图是产品的重要组成部分

插图 引用 同一行两个插图“Hi, my name is Ludmila and I’m a UX/UI designer”“嗨&#xff0c;我叫Ludmila&#xff0c;我是UX / UI设计师” “Hi, Ludmila”“嗨&#xff0c;路德米拉” “Welcome”“欢迎” Not anonymously at all, I’ve been doing UX/UI design fo…

如果是你你会如何重新设计和定义维基百科(wikipedia)?

日期&#xff1a;2012-8-11 来源&#xff1a;GBin1.com 最近一家设计公司发布了一个关于如何重新定义和设计维基百科的网站&#xff0c;在这里网站里详细的刨析了如何重新设计维基百科的话&#xff0c;如何做品牌设计和网站设计&#xff0c;整个设计过程都使用非常详细的文档说…

祖父元素_帮助祖父母建立Skype帐户的UX经验教训

祖父元素“Empathy is a key part of a UX designers arsenal”, they say. It’s drilled into our heads that we need to be thinking about our user, about their journey, about what works best for them. And it does feel empowering to boast of empathy, inside vis…

ECSHOP批量添加商品到购物车

Ecshop是一款开源的网上商店系统&#xff0c;在我心目中可以算得上网上商城界的Wordpress了。 本文介绍如何实现在ecshop中批量添加商品到购物车。 大家都知道&#xff0c;默认的ecshop只能单件点击“添加到购物车”&#xff08;Add to Cart&#xff09;实现一件一件的添加商品…

2022年CSS的发展如何?

大家好&#xff0c;我是若川。持续组织了8个月源码共读活动&#xff0c;感兴趣的可以 点此加我微信ruochuan12 参与&#xff0c;每周大家一起学习200行左右的源码&#xff0c;共同进步。同时极力推荐订阅我写的《学习源码整体架构系列》 包含20余篇源码文章。历史面试系列。另外…

分布式实物实现方式_这是您完成实物产品设计任务的方式

分布式实物实现方式You’ve come to the last stages of an interview. There’s only one thing left to do: the dreaded take home design assignment.您已经到达面试的最后阶段。 只剩下一件事要做&#xff1a; 可怕的带回家的设计任务。 This is the hard part of any in…

TP-Link路由器下的多种接入模式

无线AP&#xff1a;把LAN转成WLAN 客户端&#xff1a;把WLAN转成LAN 中继&#xff1a;简单放大上一个无线路由器的WLAN信号&#xff0c;SSID与上一个无线路由器一样 桥接&#xff1a;与上一个无线路由器的WLAN信号连接&#xff0c;SSID与上一个无线路由器不同&#xff0c;又叫W…

type 和 interface 傻傻分不清楚?

大家好&#xff0c;我是若川。持续组织了8个月源码共读活动&#xff0c;感兴趣的可以 点此加我微信ruochuan12 参与&#xff0c;每周大家一起学习200行左右的源码&#xff0c;共同进步。同时极力推荐订阅我写的《学习源码整体架构系列》 包含20余篇源码文章。历史面试系列。另外…

上帝公式_感谢上帝的空白

上帝公式Do you ever walk into a room cluttered with discarded papers and leftover takeout and feel comfortable?您是否曾经走进过乱七八糟的房间&#xff1f; Yes, you might if you’re a sophomore at college. That’s just dorm life. Back in the late 90’s to …

POJ 1325 Machine Schedule(二分图最小点集覆盖)

题目链接&#xff1a;http://poj.org/problem?id1325 题意&#xff1a;A机器有n个模式&#xff0c;B机器有m个模式&#xff0c;有k个任务&#xff0c;第i个任务可以用A机器的ai模式或者B机器的bi模式&#xff0c;换模式需要重启&#xff0c;开始两个机器都在模式0&#xff0c;…

figma下载_在Figma上进行原型制作的各种触发选项

figma下载Prototypes are model versions of digital products. They’re used to measure usability by testing with potential users of a product. When making prototypes with Figma, it is necessary that the actions that trigger reactions aren’t strangers and th…

通过动画让你深入理解 ES modules

大家好&#xff0c;我是若川。持续组织了8个月源码共读活动&#xff0c;感兴趣的可以 点此加我微信ruochuan12 参与&#xff0c;每周大家一起学习200行左右的源码&#xff0c;共同进步。同时极力推荐订阅我写的《学习源码整体架构系列》 包含20余篇源码文章。历史面试系列。另外…

海量数据处理之倒排索引

前言&#xff1a;本文是对博文http://blog.csdn.net/v_july_v/article/details/7085669的总结和引用 一&#xff0c;什么是倒排索引 问题描述&#xff1a;文档检索系统&#xff0c;查询那些文件包含了某单词&#xff0c;比如常见的学术论文的关键字搜索。 基本原理及要点&#…

ux和ui_如何为您的UX / UI设计选择正确的原型制作工具

ux和uiAll UX/UI designers might encounter the situation of creating prototypes for wireframes or visual designs. In some cases, you may also receive the need to craft motion designs, for instance, animating icons or illustrations.所有UX / UI设计人员都可能遇…

Vue 性能指标逐渐开始反超 React 了!

大家好&#xff0c;我是若川。持续组织了8个月源码共读活动&#xff0c;感兴趣的可以 点此加我微信ruochuan12 参与&#xff0c;每周大家一起学习200行左右的源码&#xff0c;共同进步。同时极力推荐订阅我写的《学习源码整体架构系列》 包含20余篇源码文章。历史面试系列。另外…

制作Ubuntu U 盘启动盘在ubuntu12.04中

制作U盘启动盘&#xff0c;这样就可以通过U盘来装系统了&#xff0c;简单便携。 在Ubuntu下&#xff0c;从dash home中找到Startup disk creator&#xff0c;当然之前把U盘插好&#xff0c;然后很简单的两个选择就好了。 转载于:https://www.cnblogs.com/allenzhaox/archive/20…

figma下载_我如何使用Figma,CSS Grid和CSS Flexbox构建登录页面

figma下载I enjoy looking at website designs that are on platforms like Behance, Dribble, etc. as they are visually very pleasing to the eye. While scrolling through these designs, I always wonder about one thing, that is, how difficult would it be to expre…

2022年Web平台的新动态

大家好&#xff0c;我是若川。持续组织了8个月源码共读活动&#xff0c;感兴趣的可以 点此加我微信ruochuan12 参与&#xff0c;每周大家一起学习200行左右的源码&#xff0c;共同进步。同时极力推荐订阅我写的《学习源码整体架构系列》 包含20余篇源码文章。历史面试系列。另外…

【原创】ABAP动态编程之功能实现

根据名字获取结构 DATA: STRUCTTYPE TYPE REF TO CL_ABAP_STRUCTDESCR. STRUCTTYPE ? CL_ABAP_TYPEDESCR>DESCRIBE_BY_NAME( SPFLI ). 根据变量获取结构 DATA: DATATYPE TYPE REF TO CL_ABAP_ELEMDESCR,W_CHAR TYPE CHAR5. DATATYPE ? CL_ABAP_TYPEDESCR>DESCRIBE_BY_D…

【逃离一线】被裁后的面经与感慨

大家好&#xff0c;我是若川。持续组织了8个月源码共读活动&#xff0c;感兴趣的可以 点此加我微信ruochuan12 参与&#xff0c;每周大家一起学习200行左右的源码&#xff0c;共同进步。同时极力推荐订阅我写的《学习源码整体架构系列》 包含20余篇源码文章。历史面试系列。另外…