SAP HANA计算视图
作者:互联网
越来越多的SAP用户正在将SAP HANA实施为现有SAP BW的基础和数据库。有些可能只是用现代SAP HANA数据库替换现有数据库,以提高查询执行和仓库管理的速度。当然,这是SAP BW中SAP HANA实施的关键目标,但不是唯一一个。
在我看来,使用 SAP HANA Studio 或 Eclipse 紧密集成 的SAP HANA 功能以设计新的数据仓库管理方式,至少与改善报表性能一样重要。
当可以动态计算新的报表数据时,为什么还要使用 SAP 应用程序层的旧习惯,在持久层中存储越来越多的数据? 使用基于 SAP HANA 的暂存(staging)来增强数据流,而无需在多个层(SAP staging layer [SLA])中对传入数据进行物理暂存,这是我正在客户现场进行的工作。
本文链接:https://www.cnblogs.com/hhelibeb/p/15371591.html
英文原文:SAP-HANA-Calculation-Views
我的方法可以帮助你在设计更改时更加灵活,因为当业务逻辑更改时,暂存层中不会卸载或重新加载数据。 它还可以将 SAP HANA 的运营成本保持在最低水平,因为 SAP HANA 数据库中的数据越少意味着许可费用越低。
(在由 SAP HANA 提供支持的现代 SAP BW 中,通过持久层切换到虚拟数据暂存、而不是老式数据暂存是明智的。针对复杂场景的SAP HANA计算视图和过程有助于动态计算数据,从而在涉及数据暂存或数据模型中的扩展/减少方面的业务相关更改时,将卸载和重新加载阶段减少到零。在使用SAP HANA Studio或Eclipse的SAP HANA环境中,SAP BW运维人员可以非常轻松地从老式模型切换到新的基于计算视图的建模,或者运行二者混合场景。)
SAP HANA过程是一个数据库存储过程,它通过SAP HANA SQL脚本提供编程功能,类似于ABAP函数。 现在,我将在计算视图(基于图形和 SQL 脚本的视图)的帮助下指导你创建 SAP HANA 数据流,包括你可能遇到的一些陷阱。
我的示例(下图)是一种简单的混合方法。
这意味着你使用现有的 SAP BW 入站数据(基于 DataStore 对象 [DSO],在 SAP BW 入口层中)。你还可以将SAP BW表信息(例如SAP数据字典[DDIC]表)合并到一个组合计算视图中,您可以与SAP HANA Composite Provider for BEx或Analysis for Office报告结合使用。 你还可以直接在Analysis for Office报告中使用计算视图(这里不涉及权限问题)。
(DataStore对象:DSO(数据存储对象)是以最低粒度级别保存清理和整合的事务或主数据的存储位置,并且可以使用 BEx 查询分析这些数据。 DataStore 对象包含关键指标和特征字段,数据可以使用增量更新或其他 DataStore 对象甚至从主数据进行更新。 这些 DataStore 对象通常存储在二维透明数据库表中。)
所有的截图都基于Eclipse。 我正在运行Eclipse Neon 3和最新的SAP BW和SAP HANA附加组件。 可以使用 SAP Note1944835 – SAP BW Modeling Tools – Delivery Schedule 1944835 – SAP BW Modeling Tools – Delivery Schedule 找到SAP BW建模工具集。
在以下说明和示例中,我使用基于外部SAP HANA视图的数据。 在我的示例中,我使用技术DSO内容数据在图形计算视图中提供数据和使用数据。 我将该数据与第三个图形计算视图中的SQL 脚本计算视图结合使用,以连接这两个数据。 我会解释在图形计算视图中通过常规联接访问数据与基于 SQL 脚本的计算视图相比的区别,并解释SQL 脚本计算视图的优点。 最后,你可以使用第三个计算视图,将所有视图连接到一个点,在 BEx 查询的帮助下或直接与Analysis for Office结合,为报表用户提供复合提供程序。
(本文假定读者熟悉Eclipse使用)
开始创建HANA计算视图
首先,切换到SAP HANA Development视图。 建议在SAP HANA开发的情况下使用这个视图。在所有其他视图,都无法创建 SAP HANA hdb 过程。
第一个计算视图是一个简单的图形视图。 右键单击开发包并选择 New,然后选择 Calculation View,如图所示。
操作后显示如下图,
(注意:如果屏幕看起来不同,请确保选择了Repositories选项卡)
接着输入所需的计算视图技术名称,例如 MY_NEW_VIEW(没图)。 保留默认类型,即Graphical,然后单击完成按钮。 默认情况下,系统会生成两个对象:语义和聚合对象。
在左侧,可以找到所有可用的设计对象。 从投影(Projection)选项开始。 将其拖放到场景的空白区域。 投影允许访问 SAP HANA 中的所有可用对象,例如 DDIC 表、信息提供者、主数据和现有的 SAP HANA 视图。
将鼠标移到投影对象上时,会看到一个绿色的加号。
单击加号图标(数据访问)打开一个对话框,可以在其中搜索所需的对象。 可以读取数据,然后将该对象添加到您的实际视图中。
单击加号图标后打开的对话框可以搜索所需的对象。 在我的示例中,我输入了 SAP BW 技术内容对象 WIS_C03(SAP technical cude集TCT_C03 的副本,它是一个InfoCube)的搜索字符串。 正如下图中展示的,搜索结果返回所有可用的 SAP HANA 对象,例如 InfoProvider 本身和所有现有的部分(例如,维度)表。
我选择了 InfoCube 本身,它由 Cxx 后缀(从顶部开始的第三项)表示,方法是双击条目或简单地选择条目并选择 OK 按钮。 我建议创建引用其类型的 ADSO(一种标准 DSO)技术名称,例如 C(用于类型 Cube)。
除了将选择添加到您的投影并显示名称之外,您还可以在编辑器详细信息窗格中看到所选对象的结构(在我的示例中是 InfoCube 结构),其中显示了 InfoObjects 以及cube SID 条目。
单击详细信息视图中的子弹形图标可将该特定 InfoObject 添加到该投影的输出(下图)并将其颜色更改为橙色(已选择)。 此选择类似于将表的字段添加到事务SE11中的自定义视图。 LED 形状的图标就像一个拨动开关。 灰色表示该字段已关闭(不使用),而橙色表示该字段已打开。
因为 InfoCube 使用 SID 以及 InfoObject 键,所以选择可能有点耗时。 为了更好地查看 InfoCube,我建议通过管理工作台中的更改视图激活该特定InfoCube的外部 SAP HANA视图。 或者自动激活所有cube/DSO。
如果已经激活了外部 SAP HANA 视图,可以直接从 Projection 搜索对话框中选择该视图(下图)。
选择这个外部 SAP HANA 视图可以让你更轻松地使用计算视图。 如下图,仅显示 InfoObjects 及其文本元素(如果存在)。 可以将它们添加到投影的输出中。
要将投影映射到场景窗格中的现有聚合对象,请单击 Projection_2 上方的圆圈图标。 按住鼠标,拖动一个连接(线)到聚合对象的底部图标,然后松开鼠标。 现在您的投影已连接(图 12)。
选择聚合对象将显示投影的所有字段的结构。 你可以按需决定显示所有字段还是只喜欢几个字段。 如果想要全部,最好的方法是右键单击标题区域(黑色标题)并选择 Add All To Output(下图)选项,它会自动将所有现有字段映射到输出,而无需逐个选择条目。
完成此步骤后,您可以通过单击 Eclipse 顶部菜单中的激活图标来激活计算视图。
激活后,可以通过右键单击对象(例如,投影)并选择数据预览来直接显示每个单独对象的数据。 (查询数据的细节不在本文的范围。)
为了用更多细节丰富我的示例,我添加了来自新 ADSO 的数据。 和以前一样,将Projection拖到场景中,单击加号图标,然后选择所需的对象(在我的例子中,InfoProvider被命名为WIS_D01,如下图 所示)。
可以看到两个投影。 第一个已经连接到聚合对象。 现在加入这两个表。 (这样就不会丢失所有现有的映射,将连接对象从右侧直接拖放到第一个投影和聚合对象之间的连接线上。这会自动添加连接而不破坏任何映射。之后场景如下图所示。)
最后一步是将第二个投影的输出拖到显示的连接的输入上。 由于现在在两个对象(WIS_C01和WIS_D01)之间建立了连接,你需要定义所需字段之间的连接条件。 只需通过单击橙色项目符号来选择输出字段,并在连接对象之间拖放一条线作为连接条件。 我通过从Projection_2传输数据并打开 Projection_1 的其他字段加入了 0CALDAY。 InfoObject 0CALDAY(下图 )现在是连接条件,但它不会传输到输出数据,因为否则将有两倍的0CALDAY字段。
右键单击联接连接会打开一个对话框,可以在其中交换左右表(对于外联接很重要)并显示“编辑...”选项(下图)。
当使用连接编辑模式时,会出现一个新对话框,可以在其中设置不同的连接条件和基数(下图)。 为了简单起见,保持标准连接条件(内部连接)处于活动状态。
如你所见,图形连接不允许您像在ABAP连接中那样定义复杂的连接条件(例如,使用WHERE语句或复杂的过滤器)。 要创建此类联接,需要基于SQL的计算视图。 在这些计算视图中,可以定义您喜欢的任何连接条件。 作为替代方案,可以将此类联接和表访问的编码传递给SAP HANA过程,以提高灵活性。 这些过程可以在系统范围内用于所有目的。 首先,必须创建一个新程序。 右键单击包并选择新建,然后选择其他...,如图下图所示。
在对话框中选择存储过程,
为新过程提供名称和目标schema (下图)。
现在输入SQL脚本代码。 我的示例是将SAP BW表RSREQDONE和RSMONICDP中的激活和请求信息添加到最终计算视图中。
1 PROCEDURE “JOEBOE”.“system-local.public.JOEBOE::P_GET_BW_MONITOR_DATA” 2 3 4 5 (OUT TABLE_OUT table 6 7 ( 8 9 “RNR” NVARCHAR (30), 10 11 “ICUBE” NVARCHAR (30), 12 13 “DP_NR” NVARCHAR (30), 14 15 “STATUS” NVARCHAR (4), 16 17 “QMSTATUS” NVARCHAR (4), 18 19 “REC_INSERT” INTEGER, 20 21 “REC_UPDATE” INTEGER, 22 23 “DATUM” NVARCHAR (8), 24 25 “UZEIT” NVARCHAR (6), 26 27 “TSTATUS” NVARCHAR (4), 28 29 “TDATUM” NVARCHAR (8), 30 31 “TUZEIT” NVARCHAR (6)) 32 33 ) 34 35 36 37 LANGUAGE SQLSCRIPT SQL 38 39 SECURITY INVOKER 40 41 42 43 DEFAULT SCHEMA “MY_SCHEMA” 44 45 READS SQL DATA AS 46 47 48 49 BEGIN 50 51 /***************************** 52 53 The upper table has to be defined exactly like the receiving SQL Script calculation View 54 55 56 57 *****************************/ 58 59 60 61 — Table out will receive all data in exactly the order as given by upper table from 62 63 — next SQL call. It should be aligned to the fields being used in SQL scipt calc view 64 65 table_out = 66 67 68 69 select distinct 70 71 TB1.”RNR” , 72 73 TB1.”ICUBE” , 74 75 TB1.”DP_NR” , 76 77 TB1.”STATUS”, 78 79 TB1.”QMSTATUS” , 80 81 TB1.”REC_INSERT” , 82 83 TB1.”REC_UPDATE”, 84 85 TB2.”DATUM”, 86 87 TB2.”UZEIT”, 88 89 TB2.”TSTATUS”, 90 91 TB2.”TDATUM”, 92 93 TB2.”TUZEIT” 94 95 96 97 from “SAPT04″.”RSMONICDP” as TB1 98 99 INNER JOIN “SAPT04″.”RSREQDONE” as TB2 100 101 on 102 103 TB1.”RNR” = TB2.”RNR” 104 105 WHERE TB2.”DATUM” > ‘20160101’ AND 106 107 TB1.”ICUBE” like ‘0TCT%’ AND 108 109 (TB1.”QMSTATUS” is NOT NULL AND TB2.”RECORDS” > 0) 110 111 order by TB1.”ICUBE” ASC; 112 113 114 115 116 117 END;SQL Script for Join
我的示例代码中的第一部分是连接条件中使用的表字段的声明。 那些声明的字段稍后会发送到计算视图(类似于 ABAP 中的内部表)。
SECURITY INVOKERf负责单个用户可能拥有的稍后运行该过程的授权。 table out 参数接收select语句的结果,并将信息传递给稍后使用的输出表 (table_out)。 使用Ctrl + F3或Eclipse菜单中的激活图标在编码无错误后激活程序。 下一步是在计算视图类型的SQL脚本中使用此过程。 (请记住,该过程不是强制性的;可以直接在基于 SLQ脚本的计算视图中使用代码。)右键单击包并选择新建,然后选择计算视图。 在熟悉的对话框(下图)中,确保选择类型SQL Script(默认为Graphical)并提供必需信息,例如名称。
下一个对话框显示了一个熟悉的场景视图,但只有两个简单的对象。
单击 Script_View 对象并查看显示的代码和输出窗格。 代码部分相当简单(如下)。 如你所见,只调用您刚刚创建的过程。
/********* Begin Procedure Script ************/ BEGIN –Call procedure that does Join and structure definition to return its value to calculation view call “MY_SCHEMA”.”system-local.public.JOEBOE::P_GET_BW_MONITOR_DATA”(:var_out); END /********* End Procedure Script ************/
过程中声明的表var_out现在必须连接到计算视图的输出字段。 字段的类型(下图)和确切的序列必须与过程中table_out定义的类型和序列对齐。
完成所有设置后,激活并测试(数据预览)基于 SQL 的计算视图。
最后一步是将此计算视图与前面的示例结合起来。 只需添加一个新投影,单击加号图标,然后搜索基于SQL的计算视图。
计算视图不仅允许你插入标准 SAP BW 对象,还允许插入所有SAP HANA对象(例如计算视图)。
在新添加的项目中打开所需的输出字段,如上所述。添加新的连接条件并使用新的基于 SQL 脚本的计算视图映射现有组件。 输出应该类似于我的示例。
你可以使用 SAP HANA 计算视图的介绍来帮助构建结合图形和基于SQL的计算视图的场景,用于各种用途。 在某些情况下,可以通过将此计算视图直接添加到复合信息提供者(Composite InfoProvider)以制作报表,完全绕过 DSO 和cube中的经典暂存。
使用 SAP HANA 计算视图的好处是,可以使用我刚刚在其他几个视图(可重用)的投影中创建的视图,就像我在本文中使用基于 SQL 脚本的视图一样。
标签:HANA,视图,BW,计算,SQL,SAP 来源: https://www.cnblogs.com/hhelibeb/p/15371591.html