BW顾问进阶:BW建模例程-开始,转换,结束例程详解,使用套路,实战场景示例

22 篇文章 8 订阅
7 篇文章 0 订阅

本文不涉及具体abap语法,只是讲个大概,abap上B站看看视频,足以应对BW大多数使用场景了

(后面有新的经验会慢慢在这个里面补充,有兴趣可以收藏一下)

转换过程:BW的转换过程,可以理解成一系列存储过程,数据从数据源或是来源模型,经过DTP执行触发,会经历如下过程。

数据来源(数据源或来源模型)---执行DTP(触发上数,DTP可设置筛选条件)---source_package(开始例程处理source_package数据)---转换---result_packge(结束例程处理result_packge数据)---转换结束

场景解说及示例:

开始例程

执行次数:转换开始时,执行一次

使用场景:

1.用于对source_package的过滤,减少source_package的数据量,提高之后转换,结束例程处理的效率。

2.逻辑较为复杂,需要先在source_package对来源数据进行逻辑处理,再进入之后的转换,结束例程处理。

示例:

删除不符合条件的数据,进行过滤,在开始例程里更为灵活,可对筛选条件进行一些逻辑判断

 一般套路:1.定义内表,取数据库表需要用到的数据插入内表

                   2.套用loop at source_package assigning <SOURCE_FIELDS>.

                             。。。。。。。。

                             endloop.

                     进行逻辑判断,处理,能应付百分之八九十场景

转换例程

执行次数:一条条执行,有多少数据执行多少次

使用场景:简单的逻辑处理,如日期的截取,加减乘除等

(本人习惯,较为复杂的在开始或结束例程处理,转换例程是多次执行,千万不要涉及select数据库表等操作,会把数据库跑死)

示例:

如图,已经是我在转换过程中做的比较复杂的逻辑了,对单条数据处理判断取值 

结束例程

执行次数:转换结束时,执行一次

使用场景:个人习惯,如果逻辑在开始例程和结束例程里做,效率一样,都在结束例程里处理复杂逻辑,因为是经历过开始例程,转换例程的,数据取得更方便,处理复杂逻辑更顺手。

示例:

使用套路跟开始例程差不多,就是指针换成RESULT_PACKAGE,一样能应付百分之八九十场景

注意点及个人经验:

1.千万别在转换例程select 数据库表,不然容易丢工作!因为转换例程会执行多次的。读个大表随随便便跑死生产环境。

2.做过滤,在结束例程也不是不可以,但多在开始例程处理,会提高转换效率

3.能用二分法就用二分法,性能提高的不是一点点

4.如果不是全量上数,写例程读取数据,增量可能会有问题,要多考虑,是不是可以做到主数据里,而不是用例程读表。

以上,大多个人经验,如有问题欢迎纠错。

  • 2
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论
在信号处理领域,DOA(Direction of Arrival)估计是一项关键技术,主要用于确定多个信号源到达接收阵列的方向。本文将详细探讨三种ESPRIT(Estimation of Signal Parameters via Rotational Invariance Techniques)算法在DOA估计中的实现,以及它们在MATLAB环境中的具体应用。 ESPRIT算法是由Paul Kailath等人于1986年提出的,其核心思想是利用阵列数据的旋转不变性来估计信号源的角度。这种算法相比传统的 MUSIC(Multiple Signal Classification)算法具有较低的计算复杂度,且无需进行特征值分解,因此在实际应用中颇具优势。 1. 普通ESPRIT算法 普通ESPRIT算法分为两个主要步骤:构造等效旋转不变系统和估计角度。通过空间平移(如延时)构建两个子阵列,使得它们之间的关系具有旋转不变性。然后,通过对子阵列数据进行最小二乘拟合,可以得到信号源的角频率估计,进一步转换为DOA估计。 2. 常规ESPRIT算法实现 在描述中提到的`common_esprit_method1.m`和`common_esprit_method2.m`是两种不同的普通ESPRIT算法实现。它们可能在实现细节上略有差异,比如选择子阵列的方式、参数估计的策略等。MATLAB代码通常会包含预处理步骤(如数据归一化)、子阵列构造、旋转不变性矩阵的建立、最小二乘估计等部分。通过运行这两个文件,可以比较它们在估计精度和计算效率上的异同。 3. TLS_ESPRIT算法 TLS(Total Least Squares)ESPRIT是对普通ESPRIT的优化,它考虑了数据噪声的影响,提高了估计的稳健性。在TLS_ESPRIT算法中,不假设数据噪声是高斯白噪声,而是采用总最小二乘准则来拟合数据。这使得算法在噪声环境下表现更优。`TLS_esprit.m`文件应该包含了TLS_ESPRIT算法的完整实现,包括TLS估计的步骤和旋转不变性矩阵的改进处理。 在实际应用中,选择合适的ESPRIT变体取决于系统条件,例如噪声水平、信号质量以及计算资源。通过MATLAB实现,研究者和工程师可以方便地比较不同算法的效果,并根据需要进行调整和优化。同时,这些代码也为教学和学习DOA估计提供了一个直观的平台,有助于深入理解ESPRIT算法的工作原理。
SAP BW系统中,转换例程是用于转换数据的自定义ABAP代码。转换例程可以用于实现各种数据转换需求,例如数据分摊。 下面是一个简单的数据分摊例子,演示如何在转换例程中实现数据分摊。 假设您有一个数据源,其中包含销售数据和销售成本数据。您希望根据销售数据分摊销售成本数据。您可以使用以下步骤来实现此目标: 1. 在SAP BW中创建一个转换,并将销售数据和销售成本数据源添加到转换中。 2. 在转换中创建一个数据包,并将销售数据和销售成本数据源映射到该数据包中。 3. 在数据包中创建一个转换例程,并在该例程中添加以下代码: ``` DATA: lt_sales TYPE TABLE OF zsales_data, ls_sales TYPE zsales_data, lt_costs TYPE TABLE OF zcost_data, ls_costs TYPE zcost_data, lv_total_sales TYPE f, lv_cost_share TYPE f. " 从销售数据源中选择销售数据 SELECT * FROM zsales_data INTO TABLE lt_sales. " 从成本数据源中选择成本数据 SELECT * FROM zcost_data INTO TABLE lt_costs. " 计算总销售额 LOOP AT lt_sales INTO ls_sales. lv_total_sales = lv_total_sales + ls_sales-sales_amount. ENDLOOP. " 分摊成本数据 LOOP AT lt_sales INTO ls_sales. lv_cost_share = ls_sales-sales_amount / lv_total_sales. LOOP AT lt_costs INTO ls_costs WHERE product_id = ls_sales-product_id. ls_costs-cost_amount = ls_costs-cost_amount * lv_cost_share. MODIFY lt_costs FROM ls_costs INDEX sy-tabix. ENDLOOP. ENDLOOP. " 将更新后的成本数据写回到转换中 CLEAR: lt_costs. SELECT * FROM zcost_data INTO TABLE lt_costs. ``` 在此转换例程中,我们首先从销售数据源和成本数据源中选择数据,并将其存储在内部表中。然后我们计算总销售额,并使用循环遍历销售数据,以便计算每个产品的成本分摊比例。最后,我们在内部表中更新成本数据,并将其写回到转换中。 请注意,上述代码仅供参考,并且可能需要根据您的具体需求进行修改。此外,您还需要确保您的转换例程正确地映射到数据包中,并且您已正确设置源系统连接和目标系统连接。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Idan Lian

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值