SAP HANA 计算视图:类型及创建方法

什么是计算视图?
SAP HANA 计算视图是一个强大的信息视图。
SAP HANA 分析视图度量只能从一个事实表中选择。当信息视图中需要更多事实表时,计算视图就会出现。计算视图支持复杂计算。
计算视图的数据基础可以包括表、列视图、分析视图和计算视图。
我们可以创造 加入、数据源上的联合、聚合和投影。
计算视图可以包含多个度量,并且可以用于多维报告或无度量(用于列表类型报告)。
的特征 SAP HANA 计算视图如下 –
- 支持复杂计算。
- 支持OLTP和OLAP模型。
- 支持客户端处理、语言、货币转换。
- 支持 Union、Projection、Aggregation、Rank 等。
SAP HANA 计算视图有两种类型 -
- SAP HANA 图形计算视图(由 SAP HANA Studio 图形编辑器)。
- SAP HANA 基于脚本的计算视图(由 SQL 脚本创建) SAP HANA 工作室).
图形化计算视图与脚本化计算视图
这两种风格都能产生同一种类型的对象,但其构建和维护方式却截然不同,而且一旦视图投入生产,选择就很难逆转。
| 参数 | 图形 | 基于脚本 |
|---|---|---|
| 内置 | 在编辑器中拖放节点 | CE_ 或 SQL 块中的 SQLScript |
| 优化 | 引擎可以在运行时修剪未使用的节点。 | 按原样执行,优化空间较小。 |
| 可读性 | 场景图本身就是一个文档。 | 完全取决于作者 |
| 能力 | 满足大多数要求 | 处理任何节点组合都无法表达的逻辑 |
| 维护 | 任何模型制作者都可以遵循这个方法。 | 需要具备 SQLScript 技能 |
| 推荐 | 默认选择 | 只有在图形确实无法做到的情况下才会这样做。 |
性能是决定性因素。图形视图允许 HANA 丢弃查询不需要的输出列的节点,因此未使用的连接不会产生任何开销。而基于脚本的视图则会无条件地运行其包含的每个语句。建议先使用图形视图,仅在必要时才将单个节点迁移到脚本视图。
SAP HANA 图形计算视图
In SAP HANA 分析视图,我们只能从一个表中选择一个度量。
因此,当需要一个包含来自不同表的度量的视图时,它不能通过分析视图来实现,而只能通过计算视图来实现。
因此在这种情况下,我们可以对每个表使用两个不同的分析视图,并在计算视图中将它们连接起来。
我们将通过连接两个分析视图“AN_PURCHASE_ORDER”和“AN_FI_DOCUMENT”来创建一个图形计算视图“CA_FI_LEDGER”。
CA_FI_LEDGER 将显示与采购订单相关的财务文件详细信息。
步骤1) 在此步骤中,
- 转到包(此处建模)并右键单击。
- 选择新选项。
- 选择计算视图。
将显示计算视图编辑器,其中场景面板显示如下 -
场景面板的详细信息如下 -
调色板: 本节包含以下节点,这些节点可用作构建计算视图的数据源。我们有 5 种不同类型的节点,它们是:
- 加入: 此节点用于连接两个源对象并将结果传递到下一个节点。连接类型可以是内连接、左外连接、右外连接和文本连接。 注意: 我们只能将两个源对象添加到连接节点。
- 联盟: 用于在多个源之间执行 union all 操作。源可以是 n 个对象。
- 投影: 这用于选择列、过滤数据并创建附加列,然后我们在下一个节点(如联合、聚合和排名)中使用它。 注意: 我们只能在投影节点中添加一个源对象。
- 聚合: 这用于根据所选属性对特定列执行聚合。
- 排名: 这是 SQL 中 RANK 函数的精确替代品。我们可以根据需要定义分区和 order by 子句。
步骤2)
- 从调色板单击 Projection 节点,然后将其从采购订单分析视图拖放到场景区域。将其重命名为“Projection_PO”。
- 从调色板单击 Projection 节点,然后将其拖放到 FI 文档分析视图的场景区域。将其重命名为“Projection_FI”。
- 将分析视图“AN_PURCHASE_ORDER”和“AN_FI_DOCUMENT”从内容文件夹分别拖放到“Projection_PO”节点和“Projection_FI”节点。
- 从调色板中单击“加入节点”,然后将其拖放到场景区域。
- 将 Projection_PO 节点连接到 Join_1 节点。
- 将 Projection_FI 节点连接至 Join_1 节点。
- 从调色板单击聚合节点并将其拖放到场景区域。
- 将 Join_1 节点加入到 Aggregation 节点。
我们添加了两个分析视图,用于创建计算视图。
步骤3) 单击聚合下的 Join_1 节点,您可以看到显示了详细信息部分。
- 从 Projection_PO 节点中选择所有列进行输出。
- 从 Projection_FI 节点中选择所有列进行输出。
- 将 Projection_PO 节点连接到 Projection_FI 节点,连接依据是列 Projection_PO.PO_Number = Projection_FI.PO_NO。
步骤4) 在此步骤中,
- 单击“聚合”节点,详细信息将显示在窗格右侧。
- 从详细信息窗口右侧显示的Join_1中选择用于输出的列。
步骤5) 现在,单击语义节点。
详细信息屏幕将显示如下。定义列的属性和度量类型,并标记此输出的键。
- 定义属性和度量。
- 将 PO_Number 和 COMPANY 标记为关键。
- 将 ACC_DOC_NO 标记为关键。
步骤6) 从窗口顶部栏验证并激活计算视图。
- 单击验证图标。
- 点击激活图标。
计算视图将被激活,并将显示在建模包下,如下所示 -
选择计算视图并右键单击 -> 数据预览
我们添加了两个分析视图,并从两个分析视图中选择度量(TAX_AMOUNT,GROSS_AMOUNT)。
数据预览屏幕将显示如下内容 -
基于脚本的视图中的 CE 函数
⚠️ 版本说明: 计算引擎计划运算符(如下所述的 CE_ 函数)已被弃用。 SAP这些函数仍然保留在此处,因为大量现有代码都使用了它们,但新的开发应该使用标准 SQL,优化器现在至少可以很好地处理标准 SQL。在同一条语句中混合使用 CE_ 函数和 SQL 也是导致执行计划不佳的已知原因。
CE 函数也称为计算引擎计划 Opera托尔(CE Opera语法树)是 SQL 语句的替代方法。
CE 功能有两种类型 –
数据源访问函数
此函数将列式表或列式视图绑定到表变量。以下是一些数据源访问函数列表——
- 列表
- CE_JOIN_VIEW
- OLAP_VIEW 视图
- CE_CALC_VIEW
相关的 Operator 函数
通过使用关系 Opera用户可以绕过 SQL 在评估过程中,处理器直接与计算引擎通信。以下是一些关系型处理器。 Operator 函数列表 –
- CE_JOIN(用于在两个数据源之间执行内连接,并读取所需的列/数据。)
- CE_RIGHT_OUTER_JOIN(用于在两个数据源之间执行右外连接,并将查询到的列显示到输出。)
- CE_LEFT_OUTER_JOIN(用于在源之间执行左外连接,并将查询的列显示到输出)。
- CE_PROJECTION(此函数显示源数据中的特定列,并应用筛选器来限制数据。它还提供列名别名功能。)
- CE_CALC(用于根据业务需求计算附加列。这与图形模型中的计算列相同。)
下面是一个列表 SQL 使用 CE 函数和一些示例-
| 查询名称 | SQL查询 | CE-内置功能 |
|---|---|---|
| 选择列表的查询 | 从“COLUMN_TABLE”中选择C,D。 | CE_COLUMN_TABLE(“COLUMN_TABLE”,[C,D]) |
| 在属性视图中选择查询 | 从“ATTRIBUTE_VIEW”中选择 C、D | CE_JOIN_VIEW(“ATTRIBUTE_VIEW”,[C,D]) |
| 在分析视图上选择查询 | 从“ANALYTIC_VIEW”中选择 C、D、SUM(E),按 C、D 分组 | CE_OLAP_VIEW(“ANALYTIC_VIEW”,[C,D]) |
| 在计算视图上选择查询 | 从“CALCULATION_VIEW”中选择 C、D、SUM(E),按 C、D 分组 | CE_CALC_VIEW(“CALCULATION_VIEW”,[C,D]) |
| 哪里有 | SELECT C, D, SUM(E) FROM “ANALYTIC_VIEW” WHERE C = 'value' | var1 = CE_COLUMN_TABLE(“COLUMN_TABLE”); CE_PROJECTION(:var1,[C,D],'”C” = ”值”') |
计算视图类型:维度、立方体和带星形连接的立方体
电流 SAP HANA 版本在创建计算视图时会要求指定数据类别,该选择决定了视图的功能以及报表工具如何处理它。
| 数据类别 | 包含措施 | 星形联盟现已开放 | 替换 |
|---|---|---|---|
| 维度 | 没有 | 没有 | 属性视图 |
| 鱼块 | 是 | 没有 | 简单的分析场景 |
| 带星形连接的立方体 | 是 | 是 | 分析视图 |
这就是为什么当前项目通常只构建计算视图的原因。类别维度视图可以完成计算视图的工作。 属性视图,而带有星形连接的立方体则完成了一个 分析视角因此,一种对象类型即可涵盖整个模型。现有的属性视图和分析视图继续有效,并且这些概念直接映射到上述类别。
计算视图性能提示
计算视图的灵活性足以使其构建得很糟糕,同样的场景运行时间可能从一秒到一分钟不等,具体取决于节点的排列方式。六条规则涵盖了大部分差异。
- 尽早筛选。 在最接近数据源的投影中添加过滤器。聚合后进行过滤意味着先对整个数据集进行聚合,然后丢弃大部分数据。
- 尽可能先聚合后连接。 将两个大型详细信息集合并后再进行聚合,比先聚合每一侧要移动更多的行。
- 只选择你需要的列。 节点中承载的每一列都会在整个执行过程中保存在内存中,未使用的列会阻止节点修剪。
- 对于合并类似数据,建议使用 union 而不是 join。 将实际值和计划值堆叠起来进行的是并集运算。如果用连接运算来表示,则会增加行数,因此需要使用过滤器来消除这种影响。
- 注意连接基数。 如果数据为 1..N,则声明为 1..1 会导致重复行,并使每个度量值膨胀,这是导致总计错误最常见的原因。
- 避免视图堆叠过深。 在分析视图上嵌套计算视图是合法的,但很难优化,也更难调试。通常两层就足够了。
请使用编辑器中的性能分析工具,而不是靠猜测。制定计划Viz 显示哪个节点消耗了时间,而答案通常是过滤器放置得太晚,晚了一个节点。更广泛的方法在……中进行了描述。 SAP HANA建模 教程和程序替代方案 SQL脚本.








