SAP HANA平台应用开发
上QQ阅读APP看书,第一时间看更新

3.2 属性视图

步骤1:创建视图

如图3-1所示,选择“demo”并右击,在弹出的快捷菜单中选择“New→Attribute View”命令,会在SAP HANA工作台中弹出图3-3所示的“New Information View”对话框。

图3-3 “New Information View”对话框

图3-3所示的对话框中提供了多个字段,用户可输入或选择所建视图的基本属性。

  • Name:视图名称,比如当前示例的名称为CUSTOMER。
  • Description:视图描述,通常输入有意义的文本,用于说明视图的功用。
  • Package:视图所在的Package,默认绑定为创建视图时选择的Package。
  • View Type:视图类型,在下拉列表框中有两个选项—Attribute View及Analytic View。当前示例自动设置该字段为Attribute View。
  • Subtype:子类型,在其下拉列表框中有三个选项。

• Standard类型是默认值,项目中创建的大多数属性视图都是这种类型,比如本章示例的“CUSTOMER”和“SUPPLIER_PART”都属于这种类型。

• Time类型可用于生成OLAP中常见的时间维,帮助用户方便地实现时间或日期的转换,比如计算某日是该年度的第几周。

• Derived类型比较特殊。以销售订单为例,订单上有付款方和收货方,这两者实际上都是系统中的客户主数据,因此,通常会“重用”已有的客户主数据视图,以此为基础衍生出付款方视图和收货方视图。

在当前示例中,只需要在“New Information View”对话框中输入Name和Description即可,单击“Finish”按钮关闭对话框,与此同时在SAP HANA工作台中会出现新的窗口,即图3-4中所示的新建属性视图的工作区域。

图3-4 新建属性视图的工作区域

图3-4中所示的工作区域可分为以下4个部分。

1)Scenario窗口中的“建模视图”主要由两部分组成。

  • 选择Data Foundation,用户可在右侧的窗口中实现视图的“内在”,即指定构成视图的数据库表、表间的连接关系等,也就是图3-4中所示的窗口布局。
  • 选择Semantics,会在右侧展现不一样的窗口布局,此时用户可以装饰视图的“外表”,即设置哪些字段需要显示或隐藏起来、必要时变更字段的描述等。

2)Details窗口是操作视图的主要地方。示例的大部分工作都是在这个窗口中完成的,比如为属性视图选择基础表、定义这个视图的输出(结构)等。

3)Output窗口中显示了构成视图的所有字段。对于属性视图而言,这些字段包括基础数据库表的字段及新添加的计算列(Calculated Column)。

4)Properties窗口可用来查看和编辑视图中不同对象的属性,比如构成视图的基础数据库表的字段,或者两表之间的连接关系等。

到目前为止,所创建的属性视图还只是一个“空壳”,接下来,会在图3-4所示的工作区域中定义视图的实体部分。

步骤2:添加数据库表

前面介绍了定义属性视图的工作界面,现在开始定义视图的实体部分。实际上,在SAP HANA中定义属性视图并不神秘,也不复杂,这与过去在其他数据库产品中创建普通数据库视图的过程非常相似,其中最基础也是最重要的步骤就是选择构成视图的数据库表(有时也称为基础表),并且使用连接(Join)定义表间的关系。

在Details窗口中右击,在弹出的快捷菜单中选择“Add”命令,弹出“Find”窗口,如图3-5所示,该窗口可用来查找SAP HANA系统中现有的、当前用户账号拥有访问权限的任意表。

SAP HANA工作台在打开“Find”窗口时默认以清单的形式显示所有数据库表。我们可以用浏览清单的方式查找需要的数据库表。当数据库表数量较多时,还可以通过输入关键字的方式进行精确定位。

以图3-5为例,在“Type object name to search for”下方的字段中输入客户主数据表名称的前两个字母,会显示数个名称中包含关键字的表(不区分大小写),选择CUSTOMER表再单击“OK”按钮,即可在视图定义中添加该表。

图3-5 在属性视图中添加数据库表

在图3-1所示的TPC-H模型中,可以看到客户属性视图由三张数据库表组成:CUSTOMER(客户主数据)、NATION(国家)、REGION(地区)。

因此,还需要像添加客户主数据表一样,把其他两张表加进来,最终会在Details窗口中显示三张数据库表的结构,如图3-6所示。

图3-6 CUSTOMER属性视图中使用的三张表

在属性视图中有多个表,这就要求我们声明表与表之间的连接关系。以客户和国家两个表为例,可以在客户主数据的“国家编码”(C_NATIONKEY)上或者Details窗口中的任意空白位置右击并在弹出的快捷菜单中选择“Create Join”命令,将会出现用于定义数据库表连接的同名对话框,如图3-7所示。

图3-7 定义CUSTOMER和NATION表之间的连接关系

以下是Create Join对话框中的字段,基于这些字段信息的组合可以实现多种连接。

  • Left Table:又称左表。两表何为左表,何为右表,对外连、参考连接等特别重要,会对最终生成的结果集产生影响。
  • Left Column:用于连接左表中的字段。
  • Right Table:与Left Table相对应的、需要进行关联的数据库表,因此称为右表。
  • Right Column:与上述Left Column对应的字段,创建连接时通常都会选择关键字段进行表和表之间的关联。
  • Join Type:连接类型,既包括大家熟知的内连(Inner Join)、左外连(Left Outer Join)、右外连(Right Outer Join),还包括一些独有的参考连接(Referential Join)和文本连接(Text Join)。
  • Join Cardinality:描述了两表中记录之间的对应关系,有1..1(1对1)、n..1(多对1)、1..n(1对多)、n..n(多对多)等。

在对话框中完成必要的输入后,单击下方的“Create Join”按钮即可创建连接。

在Details窗口中,会在所连接的两张数据库表之间显示箭头,方向为从右表指向左表。图3-8所示为客户主数据表与国家表之间的连接,单击该线条可以在Properties窗口中查看相关属性,也能在此进行修改。

图3-8 查看连接的属性

在创建了客户与国家表之间的参考连接后,同样还需要创建国家与地区表之间的参考连接,所有的操作步骤可以参照之前的介绍,在此就不再赘述了。图3-9所示为在Details窗口中完成上述操作后最终的显示效果。

图3-9 CUSTOMER属性视图中的表连接关系

到目前为止,我们已经为这个属性视图添加了多个数据库表,并且声明了其中必需的连接关系,可以说视图的数据来源已经定义好了。接下来,需要从这些数据库表的字段中挑选一些需要的,作为视图的字段暴露出来。

提示信息

在Details中可以一键实现图形元素的自动排列,单击右下角的“Auto Arrange”按钮 ,即可美化窗口中的显示效果。

在创建表和表之间的连接时,除了使用上面介绍的右键“Create Join”功能之外,还可以直接用鼠标选中数据库中的表某个字段,然后将其拖拽到目标表的某个字段上,从而创建连接,其功能和“Create Join”相同。单击创建完成的连接,用户还可对这个连接的属性进行修改。

步骤3:定义视图结构

在ROLAP多维数据模型中,如星形、雪花形等,会把维度表的主键连接到事实表的外键上。在SAP HANA模型中,属性视图等同于维度表。因此,这里挑选数据库表中的部分或全部字段作为视图的字段,并为视图定义主键。

在Details窗口中,通过查看数据库表字段前圆圈的颜色,可以一目了然地了解有哪些字段用作视图的字段。如图3-10所示,默认数据库表字段前的圆圈为灰色,这意味着不会用做视图字段,此时选中客户表主键“C_CUSTKEY”并右击,在弹出的快捷菜单中选择“Add To Output”命令,即可将其设置为属性视图字段。

图3-10 把表字段添加为输出

在Details窗口中为视图添加客户表的主键“C_CUSTKEY”后,字段前的圆圈会立即变为橘黄色。此外,该字段还会出现在Output窗口的Columns文件夹下。图3-11所示为了上述两种查看属性视图的字段的方法。

图3-11 查看属性视图的字段

站在数据分析的角度看,属性视图不可能只有一个主键,因此,还需要从客户维度进行分析,添加更多字段。图3-12所示为笔者为客户属性视图添加的数据库表字段,读者在练习时可以完全参照笔者的示例,也可以增加或删减视图中相关字段。

图3-12 在客户属性视图中输出的所有字段

前面在Details窗口中把多个数据库表的字段添加为视图的字段,实际上这些都只是视图中的“普通”字段。这里所谓的“普通”都是相对于视图主键而言的。尽管字段“C_CUSTKEY”是客户表的主键,但并不会因此自动成为视图的主键,还需要在字段的属性中进行相关设置。

如图3-13所示,在Output窗口中选择“C_CUSTKEY”字段,在Properties窗口中会显示所选字段的属性。其中,Key Attribute属性可编辑,默认为False,从下拉列表框中选择“True”选项即可把该字段设置为属性视图的主键。

图3-13 为属性视图设置主键

前面的三个步骤为新建视图添加了表,设置了字段及主键,实际上这些就已经构成了一个完整的属性视图。但是,到现在为止,视图的所有字段都使用了数据库表中的字段,实际上还可以为属性视图添加一些新的、并不来自数据库表的字段。接下来的步骤将介绍Calculated Column(以下译为计算字段,也可译为计算列)。

步骤4:为视图添加新列

对前面创建的客户属性视图进行扩展:在TPC-H模型中客户主数据表提供了账户余额信息(字段“C_ACCTBAL”),笔者会以此为基础,在客户属性视图中添加新的计算字段,即为视图中的客户记录设置“欠债账户”标记。

Output窗口可以分为两个区域,在步骤3中选择的数据库表字段都会出现在Columns文件夹中,而视图中的新字段,即当前介绍的计算字段,会陈列在Calculated Columns文件夹中。如图3-14所示,选择Calculated Columns文件夹并右击,在弹出的快捷菜单中选择“New... ”命令来新建计算字段。

图3-14 新建计算字段(列)

选择“New... ”命令后,将弹出Calculated Columns对话框,在该对话框中即可一步完成计算字段的定义。如图3-15所示,针对当前示例的“欠债账户”标记字段,需要在对话框中输入下列信息。

  • Name:计算字段的(技术)名称,可以由字母、数字、下划线(_)构成。
  • Label:计算字段的短文本描述。
  • Data Type:HANA数据库中提供的标准数据类型。
  • Length:计算字段的数据长度,针对“欠债账户”会使用一个字符长的数据类型。
  • Expression:计算字段值的表达式,可以从Elements Operators Functions窗口中选择不同元素来构造非常复杂的表达式。

图3-15 计算字段示例—欠债账户标识

Elements窗口与工作台区域的Output窗口非常相似,都会列出属性视图现有的字段,当然Elements无法显示所有的字段,缺少的就是新建或正在修改的计算字段。Operators窗口提供了一些常见的数据计算符号。组合两个窗口中的“内容”(双击选择),可以构造相对简单的表达式。

在有复杂需求时,还可以利用Functions窗口中提供的功能,该窗口提供了一些非常实用的函数,如数据类型转换、字符串处理、数据计算、日期转换等,甚至还可以在表达式中实现逻辑判断等流程控制。图3-15中显示的“欠债账户”表达式正是使用了if()对“账户余额”进行判断,当余额为负时,会将计算字段中设置为“Y”值,否则设置为“N”值。

在“Expression Editor”选项卡中输入计算字段的表达式,单击其中的“Validate”按钮,即可完成对表达式的语法检查。当表达式语法正确时,单击“Validate”按钮,会弹出Valid expression对话框进行提示,如图3-16所示。

图3-16 检查表达式的语法

在Calculated Columns对话框中输入所有信息,单击右下角的“OK”按钮即可创建计算字段,此时会在Output窗口的Calculated Columns文件夹中显示该计算字段的技术名称。如图3-17所示,选择该计算字段,可以在Properties窗口中查看甚至修改计算字段的属性。

图3-17 查看计算字段的属性

必须再次说明,创建计算字段不是属性视图的必要步骤。笔者在客户属性视图中添加的“欠债账户”标记字段,仅仅是为了向读者介绍相关的步骤及操作,读者在练习时可以假想一些需求来完善这个客户属性视图。

步骤5:检查和激活视图

在步骤1中,对Scneario窗口中的Data Foundation及Semantics分别进行了介绍,在分别选择两者时,右边显示的工作区域界面也不相同。

在此之前所有的操作步骤都是在与Data Foundation对应的工作区域完成的,在定义完视图后,切换到与Semantics对应的工作区域,如图3-18所示。在此仍可对视图的显示效果进行调整,如隐藏部分字段。

图3-18 选择Semantics时的工作区域

在传统RDBMS中会用SQL语句创建数据库视图,实际上在SAP HANA中创建数据库视图的过程也与此比较相似。前面的步骤等同于撰写复杂的SQL语句,如果SQL语句需要执行,当前新建的属性视图就需要进行激活,最终在SAP HANA中生成对应的列视图。如图3-18所示,在工作区域右上角的工具栏中有两个按钮: Save and Validate(保存并检查)、 Save and Activate(保存并激活)。

单击“Save and Validate”按钮,会检查属性视图的定义是否正确,比如检查是否为属性视图定义了主键,在SAP HANA工作台的Job Log窗口中可以查看对应的作业日志,图3-19所示为验证完成时的成功信息。

图3-19 检查属性视图的作业日志

不只是在前面工作区域中可以检查或者激活属性视图,在SAP HANA工作台的导航区域选择属性视图并右击,然后在弹出的快捷菜单中选择“Activate”命令同样可以开启视图的激活操作,如图3-20所示。

图3-20 激活CUSTOMER属性视图

在Job Log窗口中同样可以找到激活属性视图而产生的作业日志,如图3-21所示。当激活操作出现错误时,还可以双击该窗口中相应的记录来显示更详细的错误信息。

图3-21 激活属性视图的工作日志

从图3-20和图3-21中可以发现,在SAP HANA工作台的导航区域,可以通过查看属性视图前方的图标来获知视图是否处于激活状态。

如果视图是新建的或是修改了却没有激活,则前方图标上会出现灰色菱形;而在视图被激活后,前方图标上的菱形会消失。

步骤6:预览数据

尽管在步骤5中有检查视图的操作,但那实际上只是确保视图本身不存在语法错误,可以激活并在SAP HANA中成功生成对应的列视图。在生成列视图(Column View,存在于_SYS_BIC这个Schema中)后,我们最关心的就是该视图是否能够提供所期望的数据,尤其是当在属性视图中添加了计算字段时。

检查HANA属性视图的数据并不一定需要使用外部软件(比如SAP BI商务智能套件等),实际上,在HANA工作台中已经集成了数据预览工具,可以采用多种分析方法从不同的角度来验证数据是否正确。

如图3-22所示,在导航区域中选择CUSTOMER属性视图并右击,在弹出的快捷菜单中选择“Data Preview”命令,即可打开数据预览工具。

图3-22 选择预览属性视图的数据

SAP HANA中的数据预览功能集成了3个工具,分别位于工作区域的3个选项卡中。

(1)Analysis选项卡

如图3-23所示,从左往右看,首先是“Analysis”选项卡中的数据分析工具。该工具的用户界面分为如下4部分:

  • Available objects窗口中会显示视图的所有字段,并且会根据字段的数据类型自动分成字符串和数字两组。通常,字符串那组的字段可用做分析时的维度,而数值那组的字符作为指标。
  • Labels axis窗口用来放置用户为数据分析而选择的维度。
  • Values axis窗口用来放置用户为数据分析而选择的指标。
  • 最右侧区域显示了分析的结果。用户可以根据分析的需求或个人的喜好,挑选不同的样式来显示结果,如柱图、饼图、趋势图等。

图3-23 数据预览的Analysis视图

在图3-23中,尽管客户属性视图不是Cube结构,但该视图中的“C_ACCTBAL”字段是数值类型,记录了客户的账户余额,因此,可以把这个字段作为指标,然后再选择需要进行分析的维度,比如添加“R_NAME”(地区名称)作为分析的维度。默认显示出来的结果是用柱状图展现了五大地区的账户余额的汇总值。

(2)Distinct Values选项卡

“Distinct Values”选项卡用来分析视图的单个字段有哪些值,以及这些值出现的频率,相当于执行下列SQL语句来做分析:

    SELECT DISTINCT <字段>, COUNT(<字段>) FROM <视图> GROUP BY <字段>

图3-24所示为“R_NAME”字段上的分析结果,Available objects窗口中列出了视图的所有字段,当前已双击选中了“R_NAME”字段。当前页面会用多种样式向用户呈现分析结果,可以是表格(在中间窗口),也可以是更直观的柱图(在最右侧窗口)。

图3-24 数据预览的Distinct values视图

(3)Raw Data选项卡

最后是“Raw Data”选项卡,此时会在表格中显示视图的数据,实际的展现样式可参考图3-25所示的客户属性视图的数据。这种方式更加便于验证计算字段的值,例如,验证计算字段“CC_DUN_ACC”(即欠债账户)的值是否正确,比较字段“C_ACCTBAL”(即账户余额)中的数值来确认计算字段的值符合预期。

图3-25 数据预览的Raw Data视图

查询属性视图的数据,不仅可以使用前面介绍的集成在SAP HANA工作台中的工具,还可以自己编写并执行相关SQL语句。

在激活属性视图以后,系统会在“_SYS_BIC”这个Schema中生成对应的列视图,读者可以展开Schema→Column View,然后会看到所有生成的列视图,同时该列视图的名称遵循下列命名规范:

    <Package>/<Package>/.../<属性视图名称>

Package允许多层,因此,在列视图的命名中,会把所有Package层级都列出来并用“/”分隔。

在本例中,“CUSTOMER”属性视图存放在“demo”这个package根目录下,因此,对应的列视图的名称为“demo/CUSTOMER”,图3-26所示为查询客户属性视图的结果。

图3-26 使用SQL语句查询客户属性视图

提示信息

当前步骤介绍了在SAP HANA工作台中主要使用的数据查询方法,这些方法不仅适用于属性视图,同样适用于查询SAP HANA中任意建模对象的数据。特别是使用SQL语句查询列视图的方法,可以帮助读者了解如何在SAP HANA中找到“能够真正提供数据的”建模对象,从而为读者使用外部数据访问工具访问SAP HANA中模型提供了便利。

到此为止,已经介绍完了在SAP HANA中搭建属性视图的通用步骤,相信读者在此过程中已对属性视图的主要特性有所了解了。

接下来再看看属性视图中一些不常用的特性,比如Filter(过滤条件),从而让读者能够对属性视图有更加全面的掌握。

在SAP HANA项目中,通常直接使用OLTP数据库表,并在此基础上搭建Cube。很多时候,表中部分数据与建模实现的分析主题并无关系,此时就需要在SAP HANA模型(比如属性视图)中使用Filter(过滤条件)来屏蔽模型中不要的数据,而且这种方法对性能提升的作用也是显而易见的。

接下来仍以前面创建的客户属性视图为例,在“R_NAME”字段上设置过滤条件,使得属性视图仅仅显示位于美洲的客户。

这个示例的操作步骤非常简单,在工作台中打开“CUSTOMER”属性视图,所有操作在图3-27所示的Details窗口中进行即可。选择“R_NAME”字段并右击,在弹出的快捷菜单中选择“Apply Filter”命令。

图3-27 在字段R_NAME上设置过滤条件

选择“Apply Filter”命令后会弹出Apply Filter对话框,该对话框中的Operator(操作符)、Value(值),也就是常量与前面选中的字段联合起来可以构造过滤条件的实质,也就是单个的关系表达式。

对当前示例而言,这个关系表达式为:R_NAME = “AMERICA”。如图3-28所示,需要在“Operator”下拉列表框中选择“Equal”选项,并且在“Value”文本框中输入“AMERICA”,单击“OK”按钮即可创建过滤条件。

图3-28 设置过滤条件(地区=AMERICA)

在Apply Filter对话框中还可以查询当前所选字段中出现的所有值,单击“Value”文本框右侧的按钮,会弹出“Value Help Dialog”对话框,其中会自动显示出该字段的所有值,选择任意一个值并单击“OK”按钮后,会把该值传到“Value”字段中。

图3-29显示了在“R_NAME”字段右侧出现的小漏斗图标,这个小漏斗图标代表已为该字段设置了过滤条件。有了这个漏斗标记,在“Details”窗口中就能对在哪些字段上设置了过滤条件一目了然。

图3-29 标记设置了过滤条件的小漏斗

再次激活视图并打开数据预览工具,可以在“Distinct values”选项卡中检查视图中“R_NAME”字段在设置了过滤条件后的数据。

如图3-30所示,当前过滤条件明显已经生效,在客户属性视图中只能看到“AMERICA”的数据。

图3-30 查询客户属性视图中R_NAME列的值

在一些特殊情况下,在属性视图中设置过滤条件可能是一个过渡性的方案,因此,可能最终并不需要长久地使用过滤条件,使用后就需要对过滤条件进行删除。

如图3-31所示,删除过滤条件很简单,在“Details”窗口中选中相应字段并右击,在弹出的快捷菜单中选择“Remove filter”命令即可。

图3-31 删除过滤条件

注意事项

SAP HANA中的过滤条件是否还可以用于对用户数据访问权限进行管控?实际上,这不是最佳的方案,过滤条件一旦应用,任何账号访问这一属性视图都会得到同样的结果,除非复制出多个视图。

因此,SAP HANA中提供了分析权限(Analytic Privilege),可以使用关系表达式来控制维度上的值,也可以使用存储过程动态控制,笔者会在10.2.1节通过一个项目实例来对分析权限进行更为详细的介绍。