一、主要 SAP HANA 建模对象
SAP BW/4HANA 是 SAP BW 的演变,针对 SAP HANA 进行了完全优化和定制。它是 SAP 的下一代数据仓库解决方案和新产品,完全基于当今最先进的内存平台之一 -- SAP HANA 构建。
SAP BW/4HANA 还删除了其他传统 SAP BW 功能。
SAP BEx 查询设计器不再受支持;您必须使用 Eclipse 中 BW 建模工具中的 SAP BW 查询设计器。也不支持在 SAP GUI 中建模;所有建模都应在 Eclipse 中的 BW 建模工具中执行。
1.1 BW/4HANA
BW/4HANA 提供了一个全新的建模平台,为开发人员带来了众多好处:
- 简化建模,使用四个建模对象而不是九个
- 关注并显着扩展虚拟化能力
- 现代、易于使用、基于 Eclipse 的建模环境
- BW/4HANA 建模工具的统一 UI(SAP GUI 不再用于建模,SAP BEx 查询 设计器已替换为基于 Eclipse 的查询设计器)
- BW 和 HANA 建模的单一环境
SAP HANA 中的两个主要建模对象是计算视图 和表函数。计算视图使用 SAP HANA 建模器视角的图形界面进行建模,因此不需要深入的 SQL 知识。表函数是使用 SAP HANA 开发视角创建的,纯粹基于 SQL 脚本。
- 图形计算视图 (CV) 使用 SAP HANA 建模器视角进行建模。它们用于对业务逻辑进行建模并返回所需的数据集作为输出。使用 CV,您可以执行数据操作功能,例如联接、并集、聚合和排名,以及应用过滤器和创建计算列。逐节点构建方法可以轻松实现和维护复杂的业务逻辑。
- 表函数 (Table functions,TF) 是基于 SQL 的建模对象,每当图形 CV 的功能不足以满足业务需求时就会使用表函数。 TF 的用法与 CV 类似,但主要区别在于整个逻辑是使用 SQL 脚本而不是图形编辑器来开发的。另外,用于 TF 开发的 Eclipse 透视图也不同。与 CV 不同,TF 是使用 Eclipse 工具的 SAP 开发视角创建的。TF 用于实现业务逻辑,但是,从报告的角度来看,它们不能用作独立对象。创建表函数后,需要通过在顶部创建的计算视图公开它,然后才能在报告层上使用它。
1.2 HANA 建模对象
1.2.1 计算视图 Calculation View
要开始使用计算视图,请转到 SAP HANA 建模器透视图,右键单击包,然后选择新建 ➤ 计算视图
选择"计算视图"选项后,将打开用于定义 CV 常规设置的窗口:
创建计算视图后,您将能够随时更改数据类别类型,而无需重建整个视图逻辑。
提供计算视图详细信息后,下一步是在图形设计器中对业务逻辑进行建模。计算视图是使用称为节点的构建块构建的。图形视图支持以下节点类型:
join
:连接操作用于根据特定列链接两个数据源。链接数据集时,您可以选择连接类型(referential, inner, left outer, right outer, full outer, or text join),并可以指示连接基数(1..1、1..n、n. .1,n..m)。
Union
:这些操作用于组合两个或多个数据源。 SAP HANA 是一个列式数据库,因此只要有可能,使用联合节点总是比使用联接更好。
Projection
:这是从目标源对象检索数据的节点。它允许您选择字段、应用过滤器或创建计算。投影节点可以使用以下源对象:表、虚拟表、视图、计算视图、表函数或模型中的任何其他节点。
Aggregation
:这允许您根据选定的属性聚合数据,并对选定的度量应用基本聚合函数(Sum、Min、Max、Count、Avg、Var、StdDev)。
Rank
:在此节点内,可以根据排名定义过滤数据。此外,该节点允许您自动生成排名列。
最常用的节点是 Projection
,它只是从底层表中读取数据。通过从面板中拖放节点将其添加到模型中:
添加所有其他节点类型是相同的。将节点添加到模型后,下一步我们需要定义源表(或任何其他对象,如其他计算视图、表函数或数据库视图)。通过单击"添加对象(Add Objects)"按钮,您可以搜索所需的视图或表。
搜索对象时,应输入其名称(图 1-4)。找到并显示在"匹配项目(Matching items)"部分后,选择它并单击"确定"继续。添加源对象的另一种方法是将它们从左侧显示窗格直接拖动到节点上(节点上显示的"将元素拖放到此处"部分)。
下图显示了一个示例计算视图,该视图在凭证编号列 (EBELN ) 上连接采购凭证抬头 (EKKO ) 和采购凭证项目 (EKPO) 的两个标准 ERP 表。
如图 所示,该视图由四个节点组成:两个 Projections 从两个 Purchasing 表(EKKO 和 EKPO)查询数据,Join 节点组合这两个表,Aggregation 节点是计算视图的默认节点。 CUBE 数据类别。语义节点始终设置为所有类型计算视图的最后一个默认节点,并且无法删除。
与大多数 BW/4HANA 对象一样,在执行视图之前,需要激活视图。要检查是否存在任何错误,您可以首先单击"验证"按钮来验证视图。验证通过后即可激活:
有多种方法可以执行计算视图来显示结果。第一个选项是右键单击"Semantics"节点并选择"Data Preview"选项。然后系统将打开一个新选项卡(如图),您可以在其中看到"Raw Data"选项卡上视图的输出(默认情况下显示 200 条记录):
第二个选项是在左窗格("系统"选项卡上)的包树中右键单击计算视图的名称。您有两个选项来运行视图:数据预览 Data Preview 和生成选择 SQL(Generate Select SQL)。数据预览选项的工作方式与语义节点上的预览相同.
生成选择 SQL 选项打开 SQL 控制台并在计算视图顶部生成 SQL SELECT 语句。当您想要将视图的输出与其他源对象(如其他计算视图或表)相结合来执行临时分析时,此选项非常有用。当对计算视图 CV_PURCHASE_ORDERS
使用此选项时,会生成以下 SQL 代码:
sql
SELECT
"EBELN",
"EBELP",
"AEDAT",
"MATNR",
"MEINS",
sum("MENGE") AS "MENGE"
FROM "_SYS_BIC"." BW4HANA/CV_PURCHASE_ORDERS"
GROUP BY "EBELN",
"EBELP",
"AEDAT",
"MATNR",
"MEINS"
计算视图的限制:
- 无法使用图形视图来实现循环函数(
WHILE <condition> DO
等)。 - 窗口函数(LAG、LEAD、DENSE_RANK 等)不可用。
- 复杂的 SQL 函数(STRING_AGG、WORKDAYS_BETWEEN 等)不可用。
- 不支持应用程序函数库。
1.2.2 表函数
幸运的是,还有第二个建模对象,称为表函数,它支持更复杂的场景,但需要 SQL 编程知识。
现在让我们创建一个表函数,其逻辑与上一节中创建的计算视图相同。计算视图被创建为采购凭证抬头 (EKKO) 和采购凭证项目 (EKPO) 的表的联接。对"文档编号"列 (EBELN) 执行了联接。
在 SQL 控制台中构建整个代码。运行代码并验证结果后,我将 SQL 脚本复制到 TF 对象并应用所需的调整。通过这种方法,如果出现任何问题,可以更轻松地调试代码,并预览该代码的结果。您可以在此处找到用于连接 EKKO 和 EKPO 表的 SQL 代码:
sql
SELECT EKPO."EBELN", EKPO."EBELP", EKKO."AEDAT", EKPO."MATNR", EKPO."MEINS", EKPO."MENGE"
FROM "TEST_SCHEMA"."EKKO" EKKO
JOIN "TEST_SCHEMA"."EKPO" EKPO ON EKKO."EBELN" = EKPO."EBELN";
下图显示了 SQL 控制台以及执行前面代码的结果:
如果以前没有使用过此透视图,则第一步是从"存储库 repository"选项卡创建存储库工作区,如图所示:
提供工作区的名称和物理路径后,即可使用。在创建的工作区下的树中,我将搜索要在其中创建表函数的包。要打开向导,请右键单击特定包并选择"新建"➤"其他"。将弹出一个选择向导。输入Table Function查找正确的对象,如图所示:
选择表函数后,为表函数提供名称。继续后,将打开表函数编辑器。这里是粘贴实际 SQL 查询的位置。图 1-14 显示了用于连接 EKKO 和 EKPO 表的表函数的最终定义。
- 创建新表功能时,编辑器默认使用本地模式。请考虑将此值更改为其他用户可访问的模式。我认为最合适的模式是
_SYS_BIC
,这也是计算视图生成的所有列视图的模式。
sql
FUNCTION "_SYS_BIC"."BW4HANA::TF_PURCHASE_ORDERS" ( )
- 表格值应设置为 TF 输出类型。
sql
RETURNS TABLE
- 在本节中,您需要列出在实际 SQL 代码中返回的所有列。需要保留列顺序和列名(区分大小写)。此外,还要确保数据类型与查询中返回的源列的所有数据类型一致。
sql
(
"EBELN" VARCHAR(10),
"EBELP" VARCHAR(5),
"AEDAT" DATE,
"MATNR" VARCHAR(18),
"MEINS" VARCHAR(2),
"MENGE" INT
)
- 本部分为可选项;但如果要使用模式中的表,而模式在生产环境中的命名不同(例如,在开发环境中,模式被命名为
TEST_SCHEMA
,但在生产系统中,同一模式被命名为PROD_SCHEMA
),则应始终在 TF 定义中提供此参数。如果在表函数定义中提供默认模式,那么在传输到下一个环境时,该模式将自动被目标系统的模式(基于模式映射定义)替换。
arduino
DEFAULT SCHEMA "TEST_SCHEMA"
- 在最后的 SELECT 语句前添加 RETURN 短语。
sql
RETURN
- 在实际 SQL SELECT 查询后添加分号(
;
)。如果在表函数定义中使用了DEFAULT SCHEMA
参数,则应删除查询中的所有模式名称(使用 "EKKO "而不是 "TEST_SCHEMA"。 "EKKO" )
sql
SELECT EKPO."EBELN", EKPO."EBELP", EKKO."AEDAT", EKPO."MATNR", EKPO."MEINS", EKPO."MENGE"
FROM "EKKO" EKKO
JOIN "EKPO" EKPO ON EKKO."EBELN" = EKPO."EBELN"
要测试表函数,请转到 SQL 控制台并编写一条 SELECT 语句,并在 FROM 子句中提供 TF 的全名。
sql
SELECT * FROM "_SYS_BIC"."BW4HANA::TF_PURCHASE_ORDERS" ( ) ;
下图显示了 SQL 语句的结果,该语句从表函数中查询数据。
创建并激活表函数后,为了使其输出可用于报告,我需要创建一个计算视图,该视图将使用 TF 作为源。尽管此计算视图是在表函数之上创建的,但其属性与常规计算视图相同。唯一的区别是该视图将由单个投影节点组成,该节点指向作为源的表函数对象。下图显示了从表函数查询数据的计算视图:
表函数的缺点:
- 容易出错:表函数中编写的SQL代码需要遵循严格的规则。您需要始终记住保留列顺序,显式提供正确的数据类型,并在每个代码块后面使用分号。
- 维护:对复杂的 SQL 查询进行增强比对图形视图进行增强要困难得多。
- SQL 知识:开发人员需要很好地了解 SQL 才能实现复杂且性能良好的查询。
- 传递多值可选输入参数存在限制。
1.2.3 虚拟表
借助智能数据访问 (Smart Data Access ,SDA) 功能,HANA 能够从外部系统引入数据,而无需将其复制到 SAP HANA 数据库中。使用 SDA,开发人员可以轻松建立远程连接,这允许您创建虚拟表并访问这些对象,就像它们是本地 HANA 表一样。
在 BW/4HANA 环境中,SDA 在创建非 SAP 数据模型或将外部数据集成到 SAP 数据模型中可以发挥重要作用。将来自多个系统(如 Oracle、SQL Server、Hadoop 等)的数据集成到单个 SAP 企业数据仓库中,可实现新的分析功能。
SDA 的另一个好处是它是一种经济高效的解决方案。首先,您不需要复制数据并支付存储费用。当然,对于大数据集和复杂模型,由于性能原因,仍然可能需要将外部数据持久化在BW/4HANA层。其次,无需设置和维护复制系统。此外,通过 SDA 访问的数据是实时的。借助虚拟表,您可以创建使用外部数据的查询,并将其与 SAP HANA 系统中的数据相结合。
要开始访问远程数据源,您需要首先设置连接。最简单的方法是使用 Eclipse GUI 创建新的远程源(作为创建远程源的替代方法,您也可以使用 SQL 脚本)。要建立远程连接,请打开 SAP HANA 建模器透视图并展开配置目录。然后右键单击"Remote Sources"文件夹,选择"新建远程源",如图所示:
提供所有连接属性后,远程源对象将在远程源目录下可用。每个远程源将包含数据库名称以及所有可访问模式和表的列表:
如上图所示,有一个名为 MSSQL 的远程连接,连接到名为 RMA 的数据库。此 RMA 数据库包含一个名为 dev 的架构,并且在该架构内有一个名为 dev_table 的表。此时您将无法从该表中查询数据。
要开始从远程源表查询数据,您需要首先创建一种称为虚拟表的 HANA 对象类型。需要为您以后想要访问的每个远程表创建虚拟表。
在创建虚拟表之前,一个好的做法是创建专用于远程表的 SAP HANA 数据库架构。这样,所有虚拟表都将驻留在一个地方。
与远程源一样,有两种创建虚拟表的方法:使用 GUI 或使用 SQL 脚本。下图展示了创建虚拟表的图形方式。
Note:对于每个远程源,您需要拥有创建虚拟表的授权。以下 SQL 查询授予此权限:
GRANT CREATE VIRTUAL TABLE ON REMOTE SOURCE <SOURCE_NAME> TO <USER_NAME>
选择添加虚拟表的选项后,下一步您需要输入虚拟表的名称和目标架构。提供并确认此信息后,将在给定架构下创建虚拟表。您可以开始在 SQL 控制台中使用虚拟表,或者如果它是常规 HANA 表,则可以在图形视图中使用它。