SAP HANA-Based Transformations(New way of write Routines)
由于我们大多数人都在SAP BW上工作,服务器,并且在BW的转换中编写了ABAP例程来派生业务逻辑,因此在将数据加载到DSO时,我们经常注意到性能问题,信息立方体或主数据信息对象。
可能有很多原因:
编码错误内存瓶颈数据库系统性能有限的资源基于行的记录处理方法及更多。
基于ABAP的BW转换将数据包从源对象逐包加载到应用层(ABAP)。BW转换逻辑在应用层内执行,转换后的数据包被发送回数据库服务器,数据库服务器将结果包写入目标对象。因此,数据在应用层和数据库层之间传输两次
在基于ABAP的BW转换处理过程中,源数据包被逐行处理
但是在基于HANA的BW转换中,数据可以在一个处理步骤内直接从源对象传输到目标对象。这消除了数据库层和应用层之间的数据传输。
完整的处理在SAP HANA中进行**。
**注意:转换中的一些自定义公式可能会阻止代码下推到HANA。
关键区别:
如何创建SAP HANA转换:
步骤1:创建一个ADSO say ZSOURCE with在Eclipse的BW建模工具中激活数据并更改日志
步骤2:创建aDSO和数据源之间的转换。从
编辑菜单->例程->专家例程中创建专家例程。
弹出窗口要求确认以专家例程替换标准转换。点击"是"按钮。
系统将要求ABAP例程或AMDP脚本。点击AMDP脚本
将生成一个AMDP类,默认方法-过程,默认接口-IF\u AMDP\u MARKER\u HDB
步骤3:在ABAP透视图中打开Eclipse中的ABAP development tools with BW on HANA system来更改HANA SQL脚本
需要注意的要点:
编写自定义代码语句:
方法程序按数据库程序为HDB语言SQLSCRIPT选项只读。
Intab和OutTab分别在SAP HANA转换中导入和导出参数。它类似于SAP ABAP例程中的Source\u包和result\u包。不需要在SQL脚本中定义内部表类型和结构。系统将在内部定义它。如果您想访问其他ABAP字典表或视图或其他AMDP过程,云服务器促销,您必须在方法的USING子句中提及表。
例如:如果我们想查找另一个DSO、主数据表或读取目标表,我们需要在方法的USING子句中提及DSO、主数据表。请参阅下面的示例。
方法过程按数据库过程
对于使用/BIC/AZSOURCE2的只读HDB语言SQLSCRIPT选项。
为了更好地理解,我解释了3个场景(真实世界场景),以便更好地理解以及如何在AMDPs中创建和编写代码:
在下面的代码中,我们从intab和AMDPs中选择字段分配给导出参数outTab(转换中没有附加逻辑)。
代码:
输出:
如果我们在ABAP中构建此逻辑,我们需要将所有数据包的目标记录(逐个)与源对象数据匹配,如果源对象中没有记录,智能物联网,则用X更新删除标志。如果记录量大,SQL脚本逻辑比ABAP写逻辑简单得多,这可能会导致性能问题。
在SQL中,我们可以通过使用SQL函数来实现:
在此基础上,我们将构建我们的逻辑。
对于第一次数据加载,LV\ U计数值的值将为零。在这种情况下,我们需要将所有源数据原样传输到目标DSO,删除标志为空,因为我们不需要更新标志。
对于连续的数据加载,我们需要将目标DSO中的现有记录与来自源系统的最新记录进行比较,并相应地更新删除标志。
第一次加载后的目标DSO内容:
**即第一次加载后,从源系统中删除了字段1=500的记录。在这种情况下,返利购物,我们需要用值=X来更新标志。
我们可以使用declare语句来声明变量。
declarevarchar(3);
2。对于连续加载,我们需要将目标中的现有记录与上述源中的记录进行比较。
这里lv\u count是变量,/BIC/AZSOURCE2是目标DSO,我已经复制了临时表中的内容–It\u Target。
对于这种情况,政务大数据,我已经计算了目标DSO中的记录数,并将其放入lv\U count变量中。
**it\U Target是声明用于存储目标DSO内容的临时表,将用于复制源包中的记录
如果lv\U count>0,则
/*将最新记录从源复制到临时表it\U zsource1*/
it\U zsource1将有:
信息技术资源1和信息技术资源2的联合
信息技术资源3将有如下所示的数据,这将是我们需要加载到输出表中的最终输出:
这将是我们需要并分配给它的最终输出到outTab:
下面的else语句是在lv\u count=0时首次加载,并将记录按原样从源传输到目标。
下面的示例代码:
键1、键2、字段3应保留源表中的值
字段4x应保留基于日期的查找表中字段4的最新值。
字段5x应保留总和在基于相同键的字段5的所有值中,
字段6x应保留最新事务的先前值。
解决方案:
在ABAP例程中,读取先前事务和更新字段值将非常复杂。但是在SQL脚本中,我们可以使用windows函数,用它可以以更简单的方式完成复杂的计算。
SAP HANA SQL脚本中有许多windows函数:
还有更多的函数。
在我的场景中,我将使用windows函数Rank()和Lead()来实现所需的输出。
定义It\u lookup临时表并从lookup DSO复制记录。
这样It\u lookup将有数据:
然后,我使用RANK()窗口函数按日期降序排列记录,并使用窗口函数LEAD()在最近一次交易后获取下一个值。
它的tab1将有:
对于requirement field5x:我们需要对相同键的值字段5x求和。
内部连接It tab1和It tab2如果rank=1
它的tab3将有:
这是所需的输出。因此,将字段从It tab3分配到Outtab:
结论: