学习SAP InfoCube首先要了解什么是星形连接。下面图示说明了什么是基本的星型链接,具体详细信息请到BW310去查看。
经典星型模式的优势和劣势
• 优势:
– 由于只有少量的联合操作(只有数据表和相关维度表之间的联合操作),因此能相当好地执行数据访问。
• 劣势:
– 维度表中存在冗余的条目。
– 与事实数据(通过时间维度表含蓄提供时间参考)的历史记录(如何对时间建模)不同,维度(缓慢更改的维度)的历史记录不易于建模。
– 繁琐的多语言能力。
– 对维度中的一些层次结构类型(例如,不平衡的并行层次结构)进行建模可导致出现异常。
– 由于集合和基本事实数据存储在相同表(数据表)中,因此降低了查询性能。
SAP BI 中的多维模型是基于SAP BI 星形结构的,而SAP BI 的星形结构是为了解决传统的星形结构存在的问题研发而成的。在SAP BI 星形结构中,事实表中的事实指的是关键值,维度属性指的是特性,这与前面介绍的内容是一致的。维度表通过外键或主键关系连接到中心的事实表。与传统的星形结构相比特性不是维度表的组件,也就是说,特性值没有存储在维度表中。维度表中存储的是SID ,这里SID 代表替代ID C 替代性的键值),这些键值冠以前缀SID ,如"SID 客户"是客户的SID 。
每一个维度表有一个系统自动生成的数值型的关键值,称为维度键值。主数据信息存储在独立的表中,和信息立方体无关,称为主数据表。其中,属性、文本和层级是分开存储的。
在SAP BI 中,把事实表及与其连接的维度表称为信息立方体。一个信息立方体包含一系列的关系型表格,这些表在多维的基础上结合起来。换句话说,信息立方体包含一个中心的事实表和几个围绕着的维度表。主数据表通过SID 的方式连接到信息立方体(到事实表的关键指标)。
信息立方体的分类
(1) 基本信息立方体
具有物理数据存储的,我们称为基本信息立方体。基本信息立方体又分为标准信息立方体和实时信息立方体。
1 )标准信息立方体。标准信息立方体的数据只能通过转换或更新规则批量加载,在使用信息时它是只读的,不能实时地对其进行写操作。在技术处理上,对标准信息立方体进行了读取访问方面的性能优化。标准信息立方体不能用于计划数据的写入,只用于需要读存取数据的场景,可以为计划提供参考数据。
2) 实时信息立方体。实时InfoCube 几乎专门用于BI 集成计划的工具集。实时信息立方体可以支持平行的写访问功能。当创建计划数据的时候使用实时信息立方体,支持多个用户同时将数据写入信息立方体。
InfoCube 正好包含一个数据表*,在这个表中存储了关键值的值。数据表最多可以包含233 个关键值。
InfoCube 通常最少包含4 个维度表,最多包含16 个。这些维度表中有13 个是客户创建的,3 个是SAP 提供的:单位维度表; 数据包维度表;时间维度表。
客户维度包含SID,这些SID 最多与248 个特性InfoObject 相链接。
提示: 如果您拥有一个包含13 个维度表,每个维度表又有248 个特性的InfoCube,那么您将得到一个超乎想象的业务流程或者不好的建议!
只有在至少有一个关键值属于“金额”或“数量”类型时,才会出现单位维度表。在这种情况下,固定/可变的单位/货币需要与关键值一起输入。 维度表不包含特性/特性值,但是包含相应的SID 键/值。
下面我们来看看怎么在BW中创建一个简单的信息立方体。
1 在你指定的InfoArea上面右键,点击创建信息立方体(Create InfoCube),然后出现下面的对话框。
输入对应的名称和描述;如果勾选Real Time则为实时信息立方体。然后点击左下角的新建按钮,这时你的信息立方体既被创建。
2 在下图的左边,是构成CUBE的信息对象目录,右边则是一个信息块的结构。首先注意的是左图上方的几个小按钮,分别表示“信息源”、“信息对象”、“信息(CUBE)”、“信息对象目录”及“所有信息对象”,一般来说根据需要选择自己需要的信息对象,如果我选择了某一目录后,则其下所有的信息对象会在左边呈现。然后你可以右键维度或者关键值来添加或修改相应的信息对象。
当对维度进行创建或对象输入时后,出现下面图示。然后我们来解释一下什么是Line Item Dimension(行项目维),High Cardinality(基高基数)。
(1) 行项目维度
我们知道在一般的情况下,信息立方体的维度表存放的是维度ID 和多个特性的SID 的对应关系,通过SID 再连接到主数据。这种设计提高了模型的灵活性。但是在某个别情况下,这种设计不是最优的。
例如,用户希望将订单编号作为一个特性进行分析,因而在信息立方体中每一个订单编号对应着一个或几个事实表中的事实数据。这意味着包含订单编号信息对象的维度表与数据表相比将很大。这样又会导致查询处理的问题,因为这些订单编号的使用会创建大表间的连接,不仅是数据表和订单编号维度表之间,而且也在订单编号信息对象的维度表和主数据表之间创建连接,这样的设计会导致特性表、维度表和事实表三个大表之间的多重连接,不利于性能的提高。如果上述情况出现在信息立方体中,这意味着,该信息立方体的维度表与数据表几乎一样大。这时,不能再使用星状连接技术连接这些大表。BI 提供了"行项目维度"选项。就是说,将维度标识为行项目维度,并且该维度表仅分配一个信息对象,即行项目信息对象。激活信息立方体时,系统不会对行项目维度创建新的维度表,而是将信息对象的SID 直接保存到信息立方体的事实表中,该字段直接指向信息对象的主数据标识符表。换句话说,系统忽略了使用维度表的路线。从星状结构图表中的"信息块→维度→信息对象"变成了行项目维度中的"信息块→信息对象"的连接方式。信息立方体的事实表直接与主数据表的SID关联,而没有维度表,在该行项目维度中只有一个特性。常见的应用场景还有销售订单,发票号等。
这样的设计使得在报表运行中,无需进行大数据量的连接(Join) 处理,在数据上传时,
也无需通过维度表来确定维度ID 。不足之处是由于没有维度表,在进行维度选择时,无法使用F4 帮助的功能。
(2) "基数高度"选项
SAP BI 提供的另一个维度性能优化的选项是"基数高度"选项。"基数高度"标记是维度的一个可以设置的属性。当一个维度包含很多条目(记录),或者说具有很高的基数高度时,设置这一标识可以提高性能。一般而言,维度的记录数至少是事实表的记录数的20% 时,可以设置这一标识。如果设置此标记,那么生成信息块的数据结构时,系统会自动调整表的物理格式。例如,选择合适的索引类型(据特定数据库而有不同),从而保证在读取维度中的记录时具有良好的性能。
添加导航属性和关键值的操作如同添加维度。
以上如果一切搞定,则可以检查激活CUBE,这样CUBE就算建立成功了。
接下来,可以仔细端详一下CUBE中有哪些需要机关了,那么就要让“管理”这个管家一同带我们走入。先粗略了解一下CUBE的表结构,其中CUBE中首先存在的两张事实表F表与E表,其中F表为数据初始加载时候的数据,这样的数据中存在着加载的时候的数据包(DTP包)信息,正是由于这个数据包(P)维度的存在,会导致F表中的数据量很大,所以当我们确认每包数据没有问题后,我们就可以做压缩的动作,压缩后系统将数据包维度去掉,这样大大减少了Fact表的数据量,并且将数据从F表转移到E表;而对于CUBE每个维度,BW会建立一个Dimension表,Dimension表中包含DIMID及组成信息对象的SID,最后事实表与信息对象通过DIMID关联。
下面通过实际来看看CUBE中数据的奥妙,选中CUBE右键点击“管理”,首先看到的“内容”标签页。
其中上方即为CUBE所包含的信息对象,其中的“维”栏指的是每个信息对象数据哪个维度。而信息块内容则是指当前CUBE中的数据,他包含压缩前和压缩后的所有数据;实际表格指的就是F表,点击实际表格后,就可以看到如下:
其中表名即为/BIC/F+CUBE名称;第三个按钮“选择性删除”,就是根据某些条件删除数据,例如某一些数据是不需要的数据,可以通过此办法删除,但是一般需要慎重,因为删除后即不可恢复。
第二标签页为“性能”,顾名思义,这一屏是为CUBE性能考虑而设计的,如下图
其中上半部分为创建和删除索引,下半部分为创建统计。其中第一部分检查、删除及创建、修正索引为对F表中的数据进行索引创建,索引可以提升查询速度,所以很重要,但是在加载数据的时候,请务必先删除索引再添加索引,否则很容易在大量数据加载时候产生死锁(Dead Lock);所以在处理链中向CUBE加载数据时候,一般都是加载前删除CUBE索引,而加载成功后再创建索引;第二部分为压缩后的聚集索引,即为E表的索引。而其中的数据库统计,按照SAP的解释,即为系统做一个统计以便了解CUBE、信息对象以及查询等的使用频率等,为系统的优化做一个依据,见其解释如下:
BW statistics provides you with the following options that allow you to evaluate data from both the OLAP processor and warehouse management. You are able to
· get an overview of how InfoProviders, InfoObjects, InfoSources, source systems, queries, and aggregates are used
· determine the system performance and improve it
· improve the way in which aggregates are selected and used and reduce the cost of updating them
CUBE的第三个标签页“请求”,此页主要记录了数据加载的信息,包括每个信息包的执行时间以及数据量等信息,而其中被压缩的数据包在“信息块的压缩状态”中会打上√,如果“聚集”被压缩,则在“汇集的压缩状态”中也会打上相应的√;在“请求的数据集市”栏下,如果该CUBE被作为数据集市(即作为其他信息提供者的数据源)且该信息包数据被抽走,则会标记上一个“方块按钮”,如果是加载后的数据包没有做压缩等处理,则可以选中点击删除将一整包数据删除。
接下来的屏幕为“滚动”(rollup)界面,这个界面目前我所知道的作用为点击集合生成聚集(Aggregate),在生成聚集后,系统会根据相应维度生成一个数量相对CUBE事实表数据量比较小的表,当查询访问CUBE时候,系统会先判断聚集中维度是否满足条件,如果满足则直接访问聚集而不用再次访问CUBE,提升查询速度。
“折叠”,这一屏的作用就是前文多次提到的压缩的概念,在“请求标识”中输入标识序列,则将该序列前所有的数据包都压缩,如果勾选“使用零排除”,则会将关键值为0的记录排除,但是这个功能只对累计的关键值有效,而对于非累计的,由于是根据其他信息对象流入流出计算而得,所以并没有作用;执行压缩后的数据会自动存入E表,并且将原先的数据包序列全部变为0,这样如果再想删除已经压缩的请求包数据,是不可能实现了,这样实现了数据的固化,也大大提高了查询的效率。
最后一栏“重新建造”是3.5的遗留产物,不了解也不必要在继续了解了,所以不谈。