




已阅读5页,还剩10页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
Chunguangz-技术人员参考 /pages/chunguangzBW提供了在R3端,自定义数据源的功能,与FILE和WEBSERVICE相比,可以方便ABAP人员开发维护,并且,轻松实现了DELTA的功能。自定义的数据源的数据提取方式分为3种:数据库/视图:SAP提供的这种提取方式,系统为你定义好了提取程序,通过在数据库中,设置增量相关字段(如:时间戳、日期、数字),来轻松实现DELTA(增量)抽取,是BW中最常用的自定义数据源,一般是通过程序将数据写入表中。信息集:即:SAP QUERY。可以设置表间相关的逻辑,相当于JOIN语句,把关联的字段作为数据源。FUNCTION MODULE:通过程序控制数据的提取,可以设置增量字段,也可以不设置,通过一定逻辑将数据抽取,可以实现前两种方式的自定义开发。这是最灵活的自定义数据源。下面,我们以数据库和FM的方式为例,介绍自定义数据源的应用:数据库/视图:1. 创建用于数据源的数据表:(SE11将允许表维护勾选,方便测试)其中,UPT_TIMESTAMP是我们设置的增量相关字段:2. 创建自定义数据源:(RSO2)创建ZRSO01数据源,点击“创建”:按以下参数输入,提取结构不允许输入,激活后,系统会为数据源自动创建,点击“一般增量”按钮:按以下屏幕输入参数,并保存:增量字段名:这个字段在数据库中存放了录入时间戳(或日期或数字),数据抽取程序会按照BW请求的时间参数从数据库中抽取数据。时间标记:通过时间戳方式实现增量,即:YYYYMMDDhhmmss格式。日历天数:按照天为单位实现增量。数字指针:按照数字增量抽取。安全间隔上限:如果“时间标记”或“日历天数”勾选,那么此次可以设置,表示将请求时间戳 减去 上限设置的间隔后的时间戳作为数据抽取条件。举例如下:BW最后一个抽取时间戳为 20100101120000,下次抽取时间为20100101123000,用户在12:25分做了一个记录,直到12:35才保存。这样,这个记录将不被抽取到BW中。我们设置的间隔上限,就是为了防止这样的情况,如我们设置3600,表示在123000抽取的时候,将1小时之前的记录再次抽取一遍,这样防止数据的遗漏。重复抽取的数据只能将对DELTA抽取有影响,我们只能使用通过DSO上载的方式才能保证上载的数据正确。具体的解释将在DELTA抽取原理文章中介绍。同理,对于数据指针,我们不是设置上限,而是设置下限,请根据您的需求具体设置。实时的激活:SAP解释是是否适用于RDA方式的数据源。更改记录的新状态/附加增量:更改记录的新状态即表示使用后镜像(AIE)的方式上载数据。附加增量表示以ADD方式上载数据。也是DELTA原理的内容,以后在介绍,我们这里选择AIE的方式上载。(简单说就是以最后更改的记录为准上载。ADD即将改变的差额上载)3. 执行数据源:接下来,我们要在BW数据源中复制目录下的元数据,并激活数据源,然后创建信息包,此处不再赘述。其中,初始化信息包公司代码被限制为1003。向数据库中手工添加数据(SE16):执行初始化信息包:我们会在RSA7中,查看多了ZDSO01的初始化记录和统计信息点击,查看统计记录:从中,我们可以看出BW系统请求的时间戳为20100318002659。查看数据源的请求记录,生成以下记录:表示数据源中,1003的4条记录被抽取到BW中:接下来,我们在数据库中在录入2条记录,如下:然后执行增量抽取信息包,结果如下,只将一条记录上载我用的版本比较低,在这里,安全间隔没有起作用。在上载前可以使用RSA3测试,可以在FM RSA3_GEN_GET_DATA上设置断点,查看SELECT语句:* Open Cursor for dynamical SELECT open cursor with hold g_cursor for select * from (g_s_oltpsource-extractor) where (l_t_dynamic_select). endif.* Fetch first data package fetch next cursor g_cursor appending corresponding fields of table e_t_data package size g_s_interface-maxsize.使用FM抽取数据:基本与以上步骤相同,我们以提取上例中的表数据为例,在数据源设置FM:下面介绍FM的创建:到SE80中复制FUNCTION GROUP RSAX,到新的FG:选择RSAX_BIW_GET_DATA_SIMPLE,选择复制,复制到我们自己的FM Z_GET_DATA_FM对FM进行修改,要点如下:1)将TABLES中的E_T_DATA的参考值,改为我们的数据源表。2)修改源程序:程序中,注明MY COMMENT的地方是需要我们修改的位置。大家可以通过RSA3测试跟踪下效果,此处不再赘述,其他与数据库数据源是一样的。FUNCTION Z_GET_DATA_FM.*-*Local interface:* IMPORTING* VALUE(I_REQUNR) TYPE SRSC_S_IF_SIMPLE-REQUNR* VALUE(I_DSOURCE) TYPE SRSC_S_IF_SIMPLE-DSOURCE OPTIONAL* VALUE(I_MAXSIZE) TYPE SRSC_S_IF_SIMPLE-MAXSIZE OPTIONAL* VALUE(I_INITFLAG) TYPE SRSC_S_IF_SIMPLE-INITFLAG OPTIONAL* VALUE(I_READ_ONLY) TYPE SRSC_S_IF_SIMPLE-READONLY OPTIONAL* VALUE(I_REMOTE_CALL) TYPE SBIWA_FLAG DEFAULT SBIWA_C_FLAG_OFF* TABLES* I_T_SELECT TYPE SRSC_S_IF_SIMPLE-T_SELECT OPTIONAL* I_T_FIELDS TYPE SRSC_S_IF_SIMPLE-T_FIELDS OPTIONAL* E_T_DATA STRUCTURE ZZC_TEST02 OPTIONAL* EXCEPTIONS* NO_MORE_DATA* ERROR_PASSED_TO_MESS_HANDLER*-* Example: DataSource for table SFLIGHT* tables: sflight. MY COMMNET TABLES: ZZC_TEST02.* Auxiliary Selection criteria structure DATA: L_S_SELECT TYPE SRSC_S_SELECT.* Maximum number of lines for DB table STATICS: S_S_IF TYPE SRSC_S_IF_SIMPLE,* counter S_COUNTER_DATAPAKID LIKE SY-TABIX,* cursor S_CURSOR TYPE CURSOR.* Select ranges* RANGES: L_R_CARRID FOR SFLIGHT-CARRID, MY COMMENT* L_R_CONNID FOR SFLIGHT-CONNID. MY COMMENTRANGES: L_R_BUKRS FOR T001-BUKRS.RANGES: L_R_TIMES FOR ZZC_TEST02-UPT_TIMESTAMP.* Initialization mode (first call by SAPI) or data transfer mode* (following calls) ? IF I_INITFLAG = SBIWA_C_FLAG_ON.* Initialization: check input parameters* buffer input parameters* prepare data selection* Check DataSource validity CASE I_DSOURCE.* when 0SAPI_SFLIGHT_SIMPLE. MY COMMENT WHEN ZRSO02. WHEN OTHERS. IF 1 = 2. MESSAGE E009(R3). ENDIF.* this is a typical log call. Please write every error message like this LOG_WRITE E message type R3 message class 009 message number I_DSOURCE message variable 1 . message variable 2 RAISE ERROR_PASSED_TO_MESS_HANDLER. ENDCASE. APPEND LINES OF I_T_SELECT TO S_S_IF-T_SELECT.* Fill parameter buffer for data extraction calls S_S_IF-REQUNR = I_REQUNR. S_S_IF-DSOURCE = I_DSOURCE. S_S_IF-MAXSIZE = I_MAXSIZE.* Fill field list table for an optimized select statement* (in case that there is no 1:1 relation between InfoSource fields* and database table fields this may be far from beeing trivial) APPEND LINES OF I_T_FIELDS TO S_S_IF-T_FIELDS. ELSE. Initialization mode or data extraction ?* Data transfer: First Call OPEN CURSOR + FETCH* Following Calls FETCH only* First data package - OPEN CURSOR IF S_COUNTER_DATAPAKID = 0.* Fill range tables BW will only pass down simple selection criteria* of the type SIGN = I and OPTION = EQ or OPTION = BT.* MY COMMENT* loop at s_s_if-t_select into l_s_select where fieldnm = CARRID.* move-corresponding l_s_select to l_r_carrid.* append l_r_carrid.* endloop.* loop at s_s_if-t_select into l_s_select where fieldnm = CONNID.* move-corresponding l_s_select to l_r_connid.* append l_r_connid.* endloop.* LOOP AT S_S_IF-T_SELECT INTO L_S_SELECT WHERE FIELDNM = BUKRS. MOVE-CORRESPONDING L_S_SELECT TO L_R_BUKRS. APPEND L_R_BUKRS. ENDLOOP. LOOP AT S_S_IF-T_SELECT INTO L_S_SELECT WHERE FIELDNM = UPT_TIMESTAMP. MOVE-CORRESPONDING L_S_SELECT TO L_R_TIMES. APPEND L_R_TIMES. ENDLOOP.* Determine number of database records to be read per FETCH statement* from input parameter I_MAXSIZE. If there is a one to one relation* between DataSource table lines and database entries, this is trivial.* In other cases, it may be impossible and some estimated value has to* be determined. OPEN CURSOR WITH HOLD S_CURSOR FOR* SELECT (S_S_IF-T_FIELDS) FROM SFLIGHT MY COMMENT* WHERE CARRID IN L_R_CARRID AND* CONNID IN L_R_CONNID. SELECT * FROM ZZC_TEST02 WHERE BUKRS IN L_R_BUKRS AND UPT_TIMESTAMP IN L_R_TIMES. ENDIF. First data package ?* Fetch records into interface table.* named E_T_Name of extract structure. FETCH NEXT CURSOR S_CURSOR APPENDING CORRESPONDING FIELDS OF TABLE E_T_DATA PACKAGE SIZE S_S_IF-MAXSIZE. IF SY-SUBRC 0. CLOSE CURSOR S_CURSOR. RAISE NO_MORE_DATA. ENDIF. S_COUNTER_DATAPAKID = S_COUNTER_DATAPAKID + 1. ENDIF. Initialization mode or data extraction ?ENDFUNCTION.SAP中的增量机制,可以有助系统提高数据抽取效率,在初始化执行后,每天只更新新增和修改了的记录。在我们正常的使用或开发中,这些东西并不需要知道,只要数据正常上载,就好了,此处所介绍的内容之为大家参考用。在介绍DELTA机制之前,先介绍下DSO和CUBE:DSO:一般DSO用来存储明细数据,其结构比较简单。对于值的转换(决定了可用的DELTA类型),既可以使用合计,也可以使用覆盖的方式。激活DSO后,其在后台对应3个数据表:A表,存放了最后激活的数据。即存放了汇总后的数据。LOG表:存储了数据变化的数据记录N表,NEW表,临时存放更新的数据,待激活后,将数据转入A表和LOG表以上数据表,可以通过在SE11中,描述中搜索DSO技术名称找到CUBE:典型的星型架构。CUBE只支持数据值的合计上载。建立了CUBE之后,可以到SE11中,通过在表名中搜索CUBE的名称,找到对应的维表和事实表。同样都是数据模型,而DSO更多用于存储明细数据,星型架构的CUBE更适合作为分析数据源。关于具体的DSO和CUBE,我们以后再介绍下面给大家介绍两个表,是定义DELTA类型的基本表,如下:ROOSOURCE:定义了每个数据源的属性,大部分属性我们在创建自定义数据源时已介绍,请参考/pages/chunguangz/blog/archive/2010/03/18/401671.aspx,其中,DP列定义了增量类型。RODELTAM:定义了每种增量提取方式的方法,即:DP的属性DP:增量处理名称T: 标识是否为 仅全量更新NIM:标识是否为传输 新镜像(即:新数据的状态)BIM:标识是否为传输 前镜像(即:更新前的状态)AIM:标识是否为传输 后镜像(即:更新后的状态)ADD:标识是否为传输 差额镜像(即:更改的差额状态)DID:标识是否为传输 删除镜像(即:删除状态)RIM:标识是否为传输 反转镜像(即:冲销的状态)SER:标识为 哪种序列化方式,即:数据的排序1.无所需序列化2.所需的请求序列化3.所需的数据包序列化类型:DELTA处理的类型。标识何种数据抽取方式。BW中的增量机制就是围绕RODELTAM表设置来进行的,首先介绍增量类型的定义,我们假设有一笔业务创建100,而后更改为80,然后删除,对于以上设置,会产生什么样的影响: ORDER NOSTATUSQTYRECODE TYPE创建订单100000000CREATED100N将带有记录类型为的新建记录上载到BW,BW以N载入DSO更改 100-80100000000CHANGED-100X前镜像生成100000000CHANGED80“”后镜像生成100000000CHANGED-20A差额镜像生成标志删除100000000DELETED0R反转镜像生成100000000D删除镜像生成创建100的业务:此为创建操作,传输新镜像,在R3端,以表示新镜像更改100-80:如果前镜像设置:以X表示前镜像传输。如果后镜像设置:以表示后镜像传输如果差额镜像设置:以A表示差额镜像传输我们下面用两种类型来说明DELTA在R3和BW端的处理步骤:ABR:MM中采购用到这种类型,我们可以看出ABR存在新镜像、前镜像、后镜像和反转镜像,我们创建一采购订单,并查看,R3数据源给BW提供的数据。根据ABR的定义,对于采购订单操作,应按以下顺序传输数据:ORDER NOSTATUSQTYRECODE TYPE创建订单100000000CREATED100“”将带有记录类型为的新建记录上载到BW,BW以N载入DSO更改 100-80100000000CHANGED-100X前镜像生成100000000CHANGED80“”后镜像生成标志删除100000000DELETED0R反转镜像生成通过RSA7查看统计的待传输数据:首先创建采购订单:订单号为4510000010查看RSA7的统计数据:将100改为80:将10项目标志位删除: 关于在BW中的数据上载步骤: 对于存在多种镜像属性的数据源,系统会自动为其增加ROCANCEL字段,作为传输镜像属性值用。我们这里的采购订单数据源,就是这样的类型。我们知道,CUBE只能合计数据,DSO既可以做合计,也可以做覆盖的汇总,所以,ABR的DELTA类型是既适合CUBE又适合DSO直接更新的。用上面的数据说明,订单传输到合计的更新模式(CUBE或DSO),因为连带着前镜像一起传输,所以,汇总后的结果就是最后的结果0。如果为覆盖的话(DSO),那么序列化后的最后状态为“R”的记录,这样也实现数据的成功上载。这种方式需要数据源的序列化,对于ABR设置为2。因此,这种方式既可以直接上载到DSO也可以直接上载到CUBE。但我们一般都会经过DSO,保证数据模型中,存储了所有的明细数据。接下来,我们再对FI的数据源和自定义的数据源做一下分析:首先说明一下,自定义的数据源默认都是AIE的增量处理方式,即:只提供后镜像的数据源,而且没有提供更改增量处理的方法。与FI的数据源相似。这样就说明,这些数据源只能首先上载到DSO,然后在进行分析。以我们前面做的自定义的数据源为例:AIE只支持后镜像,即:所有的新建或修改后,都只将最后的状态传输到BW,并且只支持一种传输方式的数据源不建立ROCANCEL字段,默认为空。执行初始化,并将数据上载到DSO,不激活DSO数据,我们在后台数据表中,
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年安庆桐城市安徽安桐城乡发展集团有限公司招聘17人考前自测高频考点模拟试题及答案详解(名师系列)
- 2025年宁夏吴忠同心县公开招聘社区工作者133人模拟试卷及答案详解一套
- 2025-2030中国啤酒消费季节性特征与库存管理优化方案分析报告
- 2025-2030中国啤酒消费代际差异对鲜啤产品研发的指导意义
- 2025-2030中国啤酒定制化生产趋势及柔性制造技术应用前景报告
- 2025-2030中国啤酒原材料价格波动对行业影响及应对策略研究报告
- 2025-2030中国啤酒博物馆文化传播功能提升与体验式营销创新报告
- 2025-2030中国啤酒包装创新设计与环保材料应用及市场前景预测报告
- 2025-2030中国啤酒企业跨国经营税务筹划与合规风险管理分析报告
- 2025-2030中国呼吸道病原体多重检测试剂集采应对策略与新品开发方向报告
- 资阳产业投资集团有限公司第三轮一般员工市场化招聘笔试参考题库附答案解析
- 2025年淮南市大通区和寿县经开区公开招聘社区“两委”后备干部30名笔试备考题库及答案解析
- 《文献检索与科技论文写作入门》课件(共八章)
- 2025云南红河红家众服经营管理有限公司社会招聘工作人员8人笔试参考题库附带答案详解
- 2025双11大促商家一站式指南
- 助理医师考试题库及答案
- 电梯管理安全试题库及答案解析
- 2.2 6、7的加减法(课件)数学青岛版一年级上册(新教材)
- DL-T 794-2024 火力发电厂锅炉化学清洗导则
- 消防战斗服穿戴培训课件
- 天津市受问责干部管理办法
评论
0/150
提交评论