- 浏览: 473533 次
- 性别:
- 来自: 北京
-
文章分类
最新评论
-
yuan_bin1990:
您好,请问下demo如何运行啊,准备研究研究,但不知道入口啊。 ...
ssh2(struts2+spring2.5+hibernate3.3)自动生成代码程序 -
luyulong:
[b][/b][i][/i][ ...
jQuery进度条插件 jQuery progressBar -
txin0814:
mark..
读取文件目录 -
vurses:
[align=center][color=red][size= ...
include 与 jsp:include区别 -
Roshan2:
http://lijiejava.iteye.com/blog ...
Spring AOP 入门实例
1 说说假增量
我们都知道,对于BW来说,很多ECC的标准数据源自带了增量更新功能,每天各种凭证产生的增量数据会自动堆积到增量队列里,然后BW端做一个增量信息包按天把这些增量抽取到数据仓库里,非常轻松自然,对于客户和顾问,都是透明的自动的容易实施的,这也是上过ECC的企业数据仓库采用SAP BW的一个优势所在。
但是对于非ECC的一般数据库或者ECC的自定义数据源,做增量更新就苦了。对于ECC的自定义数据源,SAP给了一种标准方案,我们看看这种方法:用一个时间字段或数字字段标记增量,当这个字段在表里的数值变化时,就认为是增量,把这条记录作为增量记录,增量信息包会挑出这些记录传送上去。这种方法的问题是显而易见的,不管是时间还是数字字段,我们都需要ABAP工作者额外编程去控制这个字段的变化,这样才能正确让系统选择出增量(用表中的凭证创建日期等字段作为时间字段去控制是不可行的,因为你不能保证今天不会修改昨天的数。)对于非ECC的一般数据库连接,SAP很干脆的说,不支持增量(06年是这么讲的,以后支不支持不晓得)
总结一下,在不同的数据源下,对增量的支持是这样的 :
解释一下这个图,CUBE里的数据是不能覆盖的,所以,如果要每天抽取部分数据的话,必须要把上次相同抽取条件(比如:今年)的数(请求)给删掉,这个我们可以在处理链里设置:删除信息块中的重叠请求:
请关注最后两句!我是写这篇文章的时候去翻教材才发现的,具体方法应该就是本文这种或者备注猜测的那种。
本文说了那么多,教材这两句竟然给概括掉了,真牛!有的时候想想,SAP官方教材还真是有很多闪光点的,窝在一些无人关注的角落等待你突然发现……
一般来说,数据源都是先把数传递到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字段如果可行的话,应该更节约代码量….留待大家挖掘。。。
教材原文:
比如说,每天抽取最近两个月的数据,在信息包里我们可以这么写例程去控制(时间选择字段为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也给我们一种实现假增量的方式,见下图:
因此,对于不支持或不好实现增量的情况,我们比较推荐的方法是,使用带选择条件的完全抽取信息包,每一次定期抽取之前N个月的数据(前提是客户保证,不修改N之前月的数据),然后上传到DSO中,如果这N个月的数据没有变化,则会被覆盖掉,系统当什么事都没发生;如果有变化,则会把变化部分覆盖DSO相同主键的数据,然后记录到DSO的更改日志表,再往CUBE中传变化部分(当然:DSO到CUBE的DTP要设置成增量DTP),这样,就以比较小的抽取时间的代价(每天只要抽最近N个月,N尽量小的数据),换来了增量抽取的几乎全部优点(每次抽取时间比较短,数据量小,传到CUBE也同样只传增量部分)。这种做法,SAP官方教材极力推荐,见下图(取自教材350增量更新一章最后一节),BW江湖人送外号假增量即是此种方法。
发表评论
-
在 Message Broker中使用 SAP JCO 连接 SAP 系统
2011-08-10 11:02 2162http://www.ibm.com/developerwor ... -
在Java中调用BAPI或RFC(转)
2011-08-10 10:55 2816JCo是一个高性能的,基于JNI的中间件,它实现了SAP的RF ... -
Java和SAP的三种数据通信方式 RFC IDOC XI
2011-08-10 10:38 3892JAVA与SAP数据交互的方式总结RFC方式:Java程序直接 ... -
BW增量更新的理解(时间戳)
2011-08-09 17:53 1793在BW中,存在两种数据抽取方式,完全更新与增量更新,完全更 ... -
SAP BW 邮件发送监控策略
2011-08-09 17:53 1647SAP BW 邮件发送监控策略 ... -
BW与ECC系统连接设置
2011-08-09 17:51 2416第一步:分配逻辑系统 SCC4先查看逻辑系统->S ... -
如何查找DataSource和table的mapping?
2011-08-09 17:48 1602相信,大家在使用BI Content的时候,经常需要查找Dat ... -
Delta中不得不看的几个表
2011-08-09 17:47 929Delta中不得不看的几个表: RODELTAMT 说明每 ... -
BW中如何进行数据监控?
2011-08-04 19:12 1142这周轮到我值班,要凌 ... -
总结InfoCube的优势分析及维度选择技巧
2011-08-04 17:58 809一直以来,infocube都是一个很纠结的东西。 作为 ... -
总结InfoCube的优势分析及维度选择技巧
2011-08-04 17:55 1123一直以来,infocube都是一个很纠结的东西。 作为 ... -
BW:监控 TCODE
2011-08-04 17:38 1142SM21: 检查系统日誌 ST22: abap DUMP ... -
BW:对于非法字符的控制
2011-08-04 17:35 1149其实这也是个老生常 ... -
BW学习——权限
2011-08-02 21:32 1412根据顾问的要求,学习了BW权限。要点如下: 1,BW的权 ... -
偶尔会被人问到的Cube的几个数字
2011-08-02 21:05 9141. 事实表:最多能够容纳233个key figures ... -
SAP学习日志--SAP中常用且重要的数据库表
2011-08-02 21:00 1602MARA - Material Master: General ... -
BW数据源深入研究【转自WKingChen的博客】
2011-08-02 19:21 1675DataSource是BW中非常重要的部分,一个合格的BW顾问 ... -
SAP BW 例程(Routine)【开始例程、关键值或特性的例程、结束例程】
2011-08-01 13:42 3951定义 可以使用例程定义关键值或特性的复杂的转换规则. ... -
BW之R3数据源及PSA
2011-07-31 15:23 2505BW数据源主要有R3、文件 ... -
理解BW数据模型 - DSO模型
2011-07-31 13:55 2212DSO的用法有很多,比 ...
相关推荐
### 增量调制详解 #### 一、概述 增量调制(Delta Modulation,简称DM或ΔM)是一种将模拟信号转换成数字信号的方法,最初由法国人DeLoraine于1946年提出。这种方法的主要目标是简化模拟信号的数字化过程。与脉冲...
增量更新部署是 Jenkins 提供的一种优化策略,它能够显著提高部署效率,避免每次部署时传输大量未变动的文件。下面将详细介绍 Jenkins 增量打包配置以及实现增量部署的过程。 1. **理解增量部署**: 增量部署是指...
eclipse插件 可打包增量文件,可一键将增量文件更新至测试环境且自动重启 一、使用条件 1、eclipse (eclipse 4.0以上) 2、版本管理用的svn 二、使用方法 1、将下载的jar 放入eclipse\dropins下 2、重启eclipse ...
增量式PID控制算法是一种在工业自动化领域广泛应用的控制策略,它是传统比例-积分-微分(PID)控制算法的一种优化变形。与传统的连续PID算法相比,增量式PID控制算法具有节省存储空间和提高运算速度的优点,尤其适用...
### Oracle 增量恢复详解 #### 一、Oracle RMAN 增量备份概述 在Oracle数据库管理系统中,RMAN(Recovery Manager)是一种强大的工具,用于执行数据库的备份与恢复操作。其中,增量备份作为一种高效的方式,在实际...
### 增量编译方法在Quartus II 11.0中的应用 #### 一、增量编译概述 增量编译是一种高效的编译策略,它能够在项目的部分修改后只重新编译改动的部分,而不是整个项目。这种方法显著减少了编译时间,提高了开发效率...
Kettle增量同步,里边包含项目文件可能需要你新建数据库。源数据为Oracle,目标数据库为PostgreSQL. 增量记录表.SQL 用来生成 edp_etl_record 表 记录每次更新数据的执行记录过程。 更新时先取出edp_etl_record 表...
Java 使用 DataX 进行增量同步是大数据领域中常见的数据迁移任务,DataX 是阿里开源的一个强大、高效的数据同步工具,它可以实现不同数据存储之间的数据迁移。本篇将详细讲解如何在 Java 项目中利用 DataX 实现增量...
不过,增量备份的恢复过程较为复杂,需要按照一定的顺序依次恢复所有的增量备份。如果过程中任何一次备份遗失,就会影响到整个数据恢复的链路,导致无法完成完整恢复。 差异备份在全备份的基础上进行,它备份的是自...
SAP中的增量机制及提取方式 SAP中的增量机制是指在数据处理过程中,对数据的变化进行跟踪和记录,实现在数据抽取和加载过程中的高效和准确性。增量机制可以根据不同的需求和场景,采用不同的增量类型和提取方式,以...
人工智能-项目实践-增量学习-基于半监督密度聚类+增量学习的故障诊断 在工业系统中,机械设备在运行过程中会产生数据流,不断变化且缺乏标签,使得基于深度学习的故障诊断方法难以在这种环境下有效工作。增量学习是...
Oracle数据库逻辑增量备份是数据库管理中的重要组成部分,它允许管理员以高效的方式备份和恢复数据,尤其是在数据频繁更新的环境中。本文将深入探讨Oracle数据库中使用exp/imp工具进行逻辑增量备份的方法及其恢复...
增量算法的定义:每一步都是根据前一步进行增量计算。这种算法通常被称作数值微分(DDA)算法。DDA(Digital Differential Analyzer algorithm)是用数值方法解决微分方程的一种手段 。 请注意如果|m|>1,则x的步进会...
增量式PID控制器是一种在工业控制领域广泛应用的反馈控制算法,相比传统的位置式PID,它具有计算量小、响应速度快等特点。在Simulink环境中实现增量式PID,可以帮助工程师更好地理解和优化控制系统性能。以下是对...
增量型PID控制是一种在工业自动化领域中常见的控制方法,尤其在PLC(可编程逻辑控制器)程序中应用广泛。PID代表比例(Proportional)、积分(Integral)、微分(Derivative),是控制算法中的三个基本组成部分。...
增量调制(Delta Modulation,简称DM)是一种模拟信号到数字信号的转换方法,属于脉冲编码调制(Pulse Code Modulation, PCM)的一种简化形式。它通过比较输入模拟信号与前一时刻的信号差值,根据差值是否超过某个...
标题中的“根据提交日志增量发布包”是指在软件开发过程中,通过跟踪代码库(如Git或SVN)中的提交历史,识别出自上次发布以来发生变化的代码文件,然后只打包这些变化的部分,形成一个相对较小的更新包,用于部署到...
"JAVA增量包打包工具"就是针对这一需求而设计的专业桌面应用程序,旨在帮助开发者实现自动化、高效的Web项目增量打包和发布。这款工具支持多种版本控制系统,包括Gitee(国内的Git托管平台)、Git和SVN,为多模块...
标题中的“一种优化变步长电导增量法matlab的MPPT控制”涉及的是太阳能电池的最大功率点跟踪(Maximum Power Point Tracking, MPPT)技术,其中使用了变步长电导增量法作为优化策略,并通过MATLAB进行实现。...
使用电导增量法实现最大功率点跟踪,有定步长和变步长两种程序。主要是通过MATLAB/Simulink来实现的