3.3 分析视图
前面介绍的属性视图提供了从客户主数据、供应商主数据、部件主数据角度进行业务分析的维度。那么如何将这些可用的分析维度和实际需要的分析指标关联起来呢?答案是:通过分析视图(Analytic View)。下面介绍分析视图的主要作用和操作步骤。
1)加入事实表,提供分析指标的数据基础:与前面的两个属性视图相关的事实表(Fact Table)需要加到分析视图的“Data Foundation”中。对应到本书所用的TPC-H模型, Orders、LineItem这两个数据库表中保存着销售订单的具体信息(金额、折扣、销售数量、总价等),这些信息都是业务人员关心的分析指标,所以,这两个数据库表都需要加进来,并且两个表之间要进行关联,然后设定哪些字段为“Data Foundation”的输出字段。
2)将分析指标(事实表)和分析维度(属性视图)关联起来:将事实表加到“Data Foundation”之后,需要在“Logical Join”(只有分析视图才有)中加入所需的两个属性视图。然后,将属性视图和事实表关联起来。如果有需要,也可以创建新的计算列(Calculated Columns)。
3)设定分析指标和分析维度:在“Semantics”中可以定义哪些字段为分析属性,哪些字段为分析指标。
步骤1:创建分析视图
创建一个新的视图,选择“Analytic View”作为类型,输入“CUSTOMER_ORDER”作为该分析视图的名称,其他的基本信息如图3-32所示。
图3-32 创建CUSTOMER_ORDER分析视图
然后,单击“Finish”按钮完成分析视图的创建,此时SAP HANA工作台的建模视图如图3-33所示。
图3-33 分析视图的Scenario窗口内容
分析视图的工作界面和属性视图类似,只是多了一个“Logical Join”操作面板。
步骤2:添加事实(Fact Table)表
接下来,单击“Data Foundation”,在HANA_TPCH中找到所需要的ORDERS表和LINEITEM表,然后将其拖拽到右边的面板中,如图3-34所示。
图3-34 在Data Foundation中添加表
然后,对ORDER表和LINEITEM表进行关联,使用的是O_ORDERKEY字段,具体的Join Type、左表和右表可以参考图3-35。
图3-35 订单标题与行项目表之间的连接
在完成上述两个事实表的连接之后,需要设定输出哪些字段。图3-36所示,将两个事实表中的很多字段都添加为输出列(Add to Output)。
图3-36 定义分析视图Data Foundation的结构
注意事项:
1)在图3-36所示的Data Foundation中,笔者使用了两个事实表,并且将两个表中的很多字段添加为输出列,这些字段有数值、金额、字符等类型。但是,只有数值类型数据库字段可以被设置为分析指标(Measure)。
2)在同一个分析视图中,所有的“原始”分析指标字段只能来自同一个事实表,否则,在激活这个分析视图时,SAP HANA会报错。
例如,Order表提供了总金额字段O_TOTALPRICE, LineItem表提供了L_QUANTITY字段,如果在Senmantics中直接将这两个字段设定为Measure,然后激活,系统会报错。
如果一定要输出两个事实表的字段作为Measure,可以在Logical Join中定义一个新的Calculated Columns字段(类型必须相同),然后将O_TOTALPRICE直接赋予这个新字段列,最后再将这个新创建的Calculated Columns字段设为Measure,再次激活这个分析视图,这样就能达到在同一个分析视图中同时输出两个事实表的字段作为分析指标的目的。
步骤3:添加属性视图作为分析维度的来源
事实表已经添加完,并且输出了很多所需的字段列。现在需要将事实表和属性视图关联起来。单击“Logical Join”,此时显示的建模视图如图3-37所示。
图3-37 Logical Join的Details窗口
在Logical Join的Details窗口中可以看到其中也有一个“Data Foundation”,这里看到的其实是前面“Data Foundation”所定义的输出字段,它将两个事实表关联成一个平面的结构,然后进行输出。
在图3-37所示窗口的空白处右击,在弹出的快捷菜单中选择“Add”命令,或者直接将前面创建的两个属性视图“SUPPLIER_PART”和“CUSTOMER”拖拽到这个界面中,完成之后的效果如图3-38所示,还没有在这3个对象之间创建任何关联关系。
图3-38 在分析视图中添加属性视图
接下来,将供应商属性视图和Data Foundation关联起来。在Data Foundation中将L_PARTKEY字段拖拽到供应商属性视图的PS_PARTKEY字段上,并且将L_SUPPKEY字段拖拽到PS_SUPPKE字段上,从而建立起两者之间的关联关系。
这4个字段之间的Join Type可以选择“Left Outer”,这样可以确保即使在供应商主数据缺失的情况下,依然可以通过事实表中的供应商数据进行统计分析,结果如图3-39所示。
图3-39 定义Data Foundation与供应商部件视图的连接
接下来,需要将客户主数据视图和Data Foundation进行关联,将属性视图中的C_CUSTKEY字段拖拽到Data Foundation的O_CUSTKEY上,从而建立起一个连接。同样,这里也使用“Left Outer”作为Join Type,结果如图3-40所示。
图3-40 定义Data Foundation与客户视图的连接
最后,分析视图的“Logical Join”的Details窗口将显示图3-41所示的结果,这表示两个属性视图和事实表已经关联起来了。
图3-41 分析视图实现TPC-H的模型
到这里为止,TPC-H模型已经通过分析视图实现了。
步骤4:为视图添加新列
在Logical Join部分添加属性视图,视图中所有字段默认就会成为分析视图的字段。在3.2节的步骤4中,可以在Data Foundation部分为属性视图添加计算列字段。对于分析视图来说也是一样,但是需要在Logical Join部分才能进行这类操作。
在分析视图的Data Foundation中有订单日期字段(O_ORDERDATE),接下来会从该字段中解析出年和月,相应地在分析视图中添加计算列字段O_YEAR和O_MONTH,如图3-42所示。
图3-42 分析视图中的计算列字段
图3-42所示为计算列字段O_YEAR的定义,此对话框和属性视图中相应对话框一样,因此,这里就不再赘述该对话框中每个字段的作用。但是还需要注意O_YEAR的表达式,这次没有判断语句,而是使用了两个系统函数。
- component(date, int):其中int参数在1~6之间取值,这6个数字分别对应年、月、日、小时、分、秒,此函数会根据int参数截取日期的一部分作为返回结果。
- string(arg):其中arg是任意类型的参数,此函数会在数据类型转换之后,把字符串类型的结果返回。
因此,年的计算公式如图3-43所示。
图3-43 计算列字段—年
因为年和月(O_MONTH)两个计算列字段的定义大致相同,后者数据类型占位两个字符。为了保证月计算列字段中的值没有空白位(当为1至9月时),月的计算表达式中还会使用rightstr(string)函数,必要时在数字前补零,如图3-44所示。
图3-44 计算列字段—月
O_YEAR和O_MONTH都是视图中的分析维度,因此,需要在上述对话框的“Column Type”下拉列表框中选择“Attribute”选项。在实际应用中,也可以创建作为分析指标的计算列字段。接下来会对视图中的分析维度和指标进行更多讨论。
步骤5:指定分析指标
SAP HANA分析视图是Cube结构,因此存在两种字段类型:Attribute即是前面谈到的分析维度,Measure等同于分析指标。分析视图中的所有字段初始都会作为Attribute存在,因此,需要手工指定哪些是Measure。
在分析视图的Semantics部分可以把需要作为分析指标存在的字段设置为Measure,图3-45所示为CUSTOMER_ORDER的建模视图,在其中选择Semantics。
图3-45 分析视图的建模视图
在Semantics部分,Column窗口中存在两个选项卡,其中,“Local”选项卡中列出了Data Foundation中的所有字段,默认所有字段都是Attribute。我们会选择LINEITEM表中的4个字段 —L_QUANTITY、L_EXTENDEDPRICE、L_DISCOUNT、L_TAX作为分析指标,如图3-46所示。单击字段前的图标 (在“Type”列),在下拉列表框中将L_QUANTITY字段的类型从“Attribute”更改为“Measure”,即分析指标。
图3-46 为分析视图指定分析指标
在“Local”选项卡中只能找到Data Fooundation中的字段,要查看那些添加到属性视图中的字段,需要切换到“Shared”选项卡,如图3-47所示。
图3-47 查看分析视图中的属性视图字段
到这里为止,在激活该分析视图之后,就在SAP HANA中实现了围绕销售订单的分析模型。
最后,读者可以使用3.2节中步骤6所介绍的数据预览功能来选择Cube中的分析维度和指标,使用不同的组合进行数据分析。