DSO

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

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

 

 

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

 

 

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

 

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

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

 

 

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

 

 

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

 

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

 

 

上图的业务场景需求如下,现在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的更新,会有不同的更新方法,选择她是因为她最懂我的心,所以无怨无悔!

传统的Cube:星型结构,由事实表和维度表组成,事实表存放的是业务数据以及它本身独有的信息和指向周围维表的外键,事实表的主键由维度键值组成;维表中存放的是特性值,由一个维度键值和多个维度属性组成. 改进的Cube:星型结构,由事实表、SID表(存放的是由系统自动为每个特性生成的SID码(4位整型值)和维度键值(4位整型值),其中SID码是主数据表中的主键)和主数据表组成;SID表中存放的不再是特性值,它存放的是SID码和维度键值(由系统自动生成),特性值存放在主数据表中.此时的维表包含SID表和主数据表,其中SID表中只存放了该维表的维度键值和它包含的特性的SID. 改进的Cube相比传统的Cube的优点: 1、主数据跨信息立方体的使用(共享维度) 2、可以对关键值进行聚集 3、查询性能更高 DSO:简单的二维表结构,有关键字字段和数据字段组成,可分为3种类型: :标准数据存储对象 由有效数据(已激活数据)、更改记录和新数据(待激活数据)3张二维数据表组成.数据通过DTP进入到DSO中,新数据在激活之前存放在新数据表中,此时报表层面是看不见数据的,只有在激活后才能看见。更改记录表记录了数据激活前后的变化,为从DSO向其他信息提供者更新数据提供了增量机制. :写优化的数据存储对象(通过DTP抽取数据)(1张表) :直接更新的数据存储对象(不是通过DTP抽取数据,而是通过API函数直接写入DSO中)(1张表) ----------------- :同一主键的数据在DSO中是独立存放的,但在Cube中是要计算的(其实这些是在DSO中可设置的). :SID的主数据,可能包含属性、文本和层级结构三个部分,不同的部分由不同的数据表存放.
### DSO Code Example When dealing with Direct Sparse Odometry (DSO), understanding how to handle `__dso_handle` becomes crucial especially when integrating or debugging components that rely on dynamic symbol ordering. The runtime environment provided by the compiler often supplies definitions for such symbols as part of its core runtime library[^2]. For practical implementation examples related specifically to DSO, consider exploring repositories dedicated to visual odometry projects where direct sparse methods are implemented. For instance, initializing and building a project using MonoVO (monocular visual odometry) can involve commands like changing into the directory containing the source code followed by configuring and compiling: ```bash cd mono_dataset_code cmake . && make ``` This setup prepares an environment suitable for running algorithms similar to those used within DSO frameworks[^1]. To delve deeper into specific implementations concerning tracking trajectories aligned via Sim(3) transformations against ground truth segments while computing various error metrics, one may refer to MATLAB scripts included alongside documentation detailing computed values from multiple sequences: ```matlab % Load data files here... load('data.mat'); % Hypothetical command based on context. % Align tracks according to Sim(3). alignedTracks = alignTracksSim3(tracks, groundTruth); % Compute errors after alignment. errors = computeErrors(alignedTracks, groundTruth); disp(errors); ``` The above script provides insight into processing steps involved post-alignment but does not directly address `__dso_handle`. However, this illustrates typical operations performed during evaluation phases involving DSO outputs[^3].
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值