虽然我们到现在才介绍DSO和CUBE,因为在BW中应用的重要性,其实前面已经提到很多了。然后我们就DSO、CUBE本身做以下介绍。
1. DSO
下面我们以总账发生额(对应GLFUNCT)为例,介绍DSO的用法:
首先创建DSO,一般我们都是用BIcontent中提供的DSO复制后,再进行修改,如下图,我们可以设置被复制的DSO:
DSO共有3中类型:
标准:对应后台3个表,NEW TABLE/LOG TABLE/ACTIVE TABLE,即保存了DELTA增量的CHANGE LOG数据。一般通过DTP来更新数据。这种DSO也是我们用的最多的类型。
直接更新:一般用来做一定的应用,如APD。是通过BW中的业务平台,将数据通过API的方式,直接写入的。其后台只对应ACTIVE TABLE。
写入优化的:这种DSO类型,用来处理大量的数据,但后台也只对应ACTIVE TABLE。通过DTP来更新数据。
下面是3中类型DSO的对比图表:
下面是标准DSO的设置选项:
激活后生成主数据标识:在激活数据后,生成主数据的SID,可以提高报表查询的速度。如果DSO不直接用于报表的需求,或用的比较少,此选项一般不选择。
唯一数据记录:当激活“激活后生成主数据标识”后,此选项才可以选择。标识上载的数据都是主键唯一。这样做,可以提高激活的速度,上载的数据只做INSERT操作,不考虑排序和前镜像的情况。如果我们要对数据进行DELTA抽取,并且数据可能会涉及到修改,此选项选择的话会有错误发生。一般建议,如果标准DSO选择了“唯一数据记录”,使用写优化类型代替。
自动将状态设置为’好’:激活数据后,如果没有错误发生,自动将状态设置为OK,即:绿灯,一般我们选择此选项。
自动激活数据/自动更新数据:标识自动激活数据并将数据更新到目标(如CUBE等)。为了能在处理链中处理异常情况,这里我们一般不选择。
关于标准数据源更新的具体步骤,请参考我的DELTA管理文章:
http://community.kingdee.com/pages/chunguangz/blog/archive/2010/03/21/401977.aspx
DSO的数据结构就是普通的透明表结构,在SE11中,通过搜索描述DSO的技术名称可以查找到对应的3个后台表。由于其设计的原理,所以DSO的结构设置也比较简单,如下图,此处就不做过多介绍了,只要你对SAP中对应的业务表熟悉,相信对应的DSO你也一定可以建好。
然后再说一下导航属性。在DSO中如果要让导航属性起作用的话,需要勾选:
2. CUBE
谈到CUBE之前,先要解释一个技术名词:星型架构。星型架构是一种关系数据库结构,该结构中在位于架构中心的单个事实数据表中维护数据,其它维度数据存储在维度表中。每个维度表与事实数据表直接相关,且通常通过一个键列联接到事实数据表。星型架构用在数据仓库中。更细节描述大家可以到网上查,下面只介绍SAP实现的逻辑。
SAP也采用了星型架构的概念,并将其应用到了CUBE中,我们从BI CONTENT复制总帐余额表(Copy form 0FIGL_C02 to ZMCUBE01),SE11中,在表名中输入*ZMCUBE01*关键字,可以找到对应生成后台数据表。也可以通过TCODE:LISTSCHEMA查看CUBE的星型架构。
如果我们依次查看每个表,会发现,事实表与维表间是通过维表的SID进行关联的,
维表又是通过SID与主数据进行关联的:
需要注意的是维的设计方式,本身维是为了提高CUBE的系能存在的,但如果维度设计不好,很可能会降低查询的速度。一般的原则是维表数据不要再短时间内迅速增长。
具体的关联关系,大家可以自己到系统中查看,因为在CUBE的开发、维护中,并不涉及到后台表的直接操作,我们下面还是以CUBE的几种类型进行解释。
1) 标准CUBE:只能通过DTP批量上载数据,不能将数据直接写入。在读取方面,系统为CUBE进行了读取优化。
2) 实时CUBE:支持平行的写访问功能。同时也支持数据的读取,但效率会比标准CUBE低。实时CUBE既支持DTP的批量上载,也支持业务模块的直接写入,可以在实时CUBE的上下文菜单中更改。一般用于计划业务的写入,如BPS、BPC等。
3) 虚拟CUBE:在系统中没有实际的数据存储实体,而是通过访问其他的数据源或系统为应用提供数据,一般不建议使用。
a) 基于数据传输过程和数据源:可以访问其他源系统的数据
b) 基于BAPI:使用BAPI访问外部系统的数据。
c) 基于功能模块:使用系统中的FUNCTION MODULE 作为数据源
3. MULTI-PROVIDER
通过多信息提供者,我们能将几个关联的CUBE(或DSO)联合显示,为报表的开发提供方便,我们可以定义每一行或列的信息提供者(即:由哪个CUBE提供数据)。多信息提供者本身并不存储数据,只是定义了一个合并后的视图,下面说明多信息提供者是如何为应用提供数据的。
我们现将两个CUBE集合到一个多信息提供者下:
选择需要集合的CUBE:
将特性和关键值拖拽到多信息提供者的维中,也可以直接拖拽一个维到其下:
分别在特性和关键值上右击,选择参考CUBE,或选择“全部按钮”,系统提供了所有的建议参考:
下面我们看看多信息提供者的数据存储方式(实际并不存储数据,通过显示数据,可以模拟数据存储方式,让我们做报表的时候更清晰数据定义),在多信息提供者上右击,选择“显示数据”:
从下图中,我们看出,多信息提供者将两个CUBE的数据组合到了一个表中,并自动添加了“信息提供者”字段,其值为CUBE的技术名称。通过这种方式将数据提供给报表,那么在具体的应用中,就仁者见仁智者见智了。