BW十日谈之DSO

时间:2021-11-14 03:25:40

现在社会,都很喜欢炒作名词,就是俗话说的换汤不换药,纵观计算机的发展历史,也难免俗,而DSO就是这样一个产品,DSO原称ODS,即营运数据存储,现称为数据存储对象,概念改变但是实质不变,不管SAP认为他是企业营运数据的存储空间,还是单纯的所有数据存储对象,从技术的层面说,DSO就是一个用来存储数据的地方,也就是说从PSA的数据过来后,我们应该需要把数据加载到的一个可信赖的存储地,即使以后PSA数据包被删除,我们在DSO中应该也能够看到这些数据的存在。

       DSO的设计也是恰恰能够满足这样的要求,DSO本身就是一张二维表,只是现在用信息对象来表示了字段而已,实质没有根本改变,DSO本身也存在主键概念即关键字字段,而非主键字段则为数字字段,见下图:

 

BW十日谈之DSO

进入“信息提供者目录下”,创建信息范围,并在右键点击信息范围,即可创建数据存储对象(DSO,DSO结构如下:

 

BW十日谈之DSO

其中第一个标签页“内容”包含了DSO精髓所在,首先是构成DSO的信息对象;在结构的下方,就是包含了若干个按钮项,其中包含了构成DSO最基本的三张表:新数据、有效数据及更改日志;其中的新数据表就是最初从数据源或者其他DSO加载进来的数据,这些数据在没有被激活前都会存储在新数据表中,存放在新数据表中的数据也是无法使用的,如果要使新数据生效,则必须激活新数据;激活后的数据存放在有效数据表中,即双击“有效数据”按钮可以查看;另外一张表即为更改日志,更改日志为加载的新数据激活成有效数据进入有效数据表后与原来有效数据之间差异的存放表,所以在很多时候,更改日志可以用来作为一种增量的数据作为向上一层CUBE加载的依据;

 

BW十日谈之DSO

第二个标签页“请求”页中存放的为数据加载标识(DTP),即每个DTP的加载记录,在DTP执行完成后,可以选中DTP,然后点击“激活数据”将新数据激活成有效数据;也可以选择某个DTP进行删除,删除DTP执行包后,在DSO中此DTP加载的相应数据也被会同步删除。

第三个标签页“重新建造”为向3.5的兼容,已经基本不在使用;

 

在对DSO有了基本的认识后,可以尝试加载数据进来看看了。首先右键点击“创建转换”,找到对应的数据源,然后将数据源与信息对象中的字段一一对应,则就是一个基本的转换了;所谓转换的概念,就是数据源传输到目标所要遵循的规律,即某个或某几个字段赋值到某个字段,然后可能需要做一个什么样的变更等等;进入转换,其界面如下:

 

BW十日谈之DSO上图就是一个最基本的转换,即数据源的目标字段对应到DSO Z_MATE字段,而销量对应Z_SALES;点击中间的连线,选择规则组,可以看看传输的具体规则,如下图:

 

BW十日谈之DSO

其中红色圈部分是key figure更新DSOCUBE的最大不同所在,DSO可以覆盖可以合计,而CUBE中只有合计,不支持覆盖;SAP之所以有这样的机制,其有着自己的解释,可以通过下图窥一斑而见全貌:

 

BW十日谈之DSO上图的业务场景需求如下,现在CUBEDSO中现在有一条记录,其KEY值为10,现在想将其更改为8,那我们该怎么做呢?或者又有新需求,直接需要删除10这条记录,又该怎么做呢?

对于业务场景一由108,按照我们自己的思维来说,由10变到8的方法很多,10+-10+8 = 8没问题 10 -2 = 8亦可、甚至直接把10擦掉,改写成8也是可以;针对这些方法,来尝试更新CUBEDSO看看结果如何;

第一种方法是生成一个前映像,一个后映像,前映像的值是-10,后印象的值是8,则对于CUBE来说,可以将这两个映像先后加入,则-1010在维度完全相同的情况下10+-10=0,再加入后印象8即反应了实际的值,能够达到我们想要的效果,而由于CUBE是多张表构成,没有主键的概念,所以OVERWIRTE之法行不通;对于DSO来说,因为其二维表的机构特征,有着自己的主键,所以先加入一个-10,再加入一个8,根据相同的主键不管是累加还是覆盖,都可以得到相同的效果;

第二种方法是生成一个附加映像,由10变到8可以通过给出一个-2的差异值记录来尝试实现,直接加入一条与10相同维度的-2记录,在展现数据时候完全在相同维度下把10-2都拉出来,得到的结果就会是8,结果完全正确,OVERWRITE同上,不可行!对于DSO来说,也只能选择累加了,因为覆盖的话,则得到的结果为-2,不能满足需求;

第三种方法即为擦除修改法,由于CUBE结构决定,OVERWRITE直接行不通,而对于DSO来说,是可以的,所以如果采用这种方法,CUBE无法更新;

 

对于业务场景二,由10变成0或者说无,我们的思维方式应该是,直接10 - 10 = 0;或者直接将10擦除,一了百了也OK;那看看SAP又要如何来应付呢?

先传入一个-10的反映像,并且在映像的结尾打上一个翻转标记,对于CUBE来说,在相同维度下,与原先的10会产生综合累计效应,得到的结果肯定为0,没有问题;而对于ODS来说,不管是累加上-10还是直接覆盖成-10,则因为有一个翻转标记,都可以考虑成0,所以也没有问题;

而对于直接擦除法,由于CUBE无法应用,所以直接打回不予采纳,而对于DSO,则此法可行;

综上不难看出,为什么对于CUBE的更新与对于DSO的更新,会有不同的更新方法,选择她是因为她最懂我的心,所以无怨无悔!