• ADSO主数据检查,到底检查什么--master data check


    SID --代理键 surrogate ID它是来管理主数据的,这个我觉得是翻译成代理键。ADSO是用来放交易数据的。交易数据里的主数据是以代理键展示的。

    但是这个SID的德文意思,其实是主数据识别ID。就像ABAP的德文意思是 通用报表合并处理器。只不过后来都重新写成英文。

    为啥要有这个SID?

    那就回到最开始的雪花模型,是为了主数据的复用

    也就是和星型模型不一样的地方,主数据不是在维度表里。通过使用SID表关联主数据表来达到主数据和SID分离,而且可以重复多次使用主数据表的目的。

    BW会集中管理信息对象主数据。相对于描述性的主数据,直接用代理键在query里,处理起来就会更快。就算现在在HANA里用了列式存储,也一样要用SID。讲到Query,就要讲query的运行时runtime,这个是OLAP engine那的,它就是靠SID来增速的。

    SID在什么时候生成?

    RSODSO_SETTINGS:最开始SID生成是有三个地方,都在DSO里面设置。

    1. 在跑报表的时候生成,那万一没这个SID就得用报表的时间去立马找。

    2. 激活的时候生成。对报表没影响。

    3.不生成,也就是你这个DSO不用来出报表,不能被加到infoprovider里。

     以前呢,都是在DSO里面弄。那么现在ADSO了,在哪里弄呢?

    在它的details的每个字段下面。 

    被检查的这个字段,必须是有主数据的。要不你啥都没有,只做属性或者高基数,那没得检查。

    field没得检查,只有带主数据的infoobject,有主数据表的才能检查。field用在报表里还是有些限制的,我还没去研究。

    默认都是激活的时候检查。也就是检查你没有SID,就给你生成。还有个选项是去persist SID给你保存在数据模型里多加一列。

    这可能就像infocube了,cube以前是有SID的表的。现在ADSO都不管理SID了,那SID表在哪里了?我去跑报表的时候,实际上难道是去用join去拿SID表的对应主数据么?那这个join不是每个主数据都得去join,那还怎么优化报表性能?

    这个Persist SID就是在ADSO表保存信息对象的SID,在激活表里多加一列INT4的列。激活的时候,这个列就被填充。为啥是INT4,因为SID就是个INT4的类型。当然跟那些动不动char 10的比快多了。

    在什么情况下persist SID ?

    1. ADSO 有大量数据,超过1亿条。

    2. 有个高基数的核心信息对象。

    3.有个核心信息对象有频繁访问的导航属性。

    4.核心信息对象有复杂的层级。

    5.核心信息对象是另一个信息对象的组件。

    好了,到这里,正好我有个ADSO里有成本中心,带了N个导航属性,那我就直接去把成本中心改成保有SID了么?感觉能瞬间提升不少报表性能。

    但是实际上要多加考虑。如果你这个ADSO是空的。那怎么改没问题。问题就在,它有数据了。那就得做remodeling 重构了。

    而且主数据的删除是一个大难题,因为你这个主数据可以被用在很多个ADSO里面,你删了一条,那对应的SID也就没意义了。但是你这个主数据在被人家用着,那你就删不掉了。

    层级会有自己的SID,层级加载的时候就会生成SID。

    但是文本不会有SID

    随便当一个datapackage处理的时候,会有检查每个key的SID是不是存在了,如果没有,那就必须得生成一个。

    从下面这个图就能看到,SID表是自己的。在别处ADSO请求激活的时候会生成自己的SID。自己有层级加载的时候也会生成SID表,自己被别人用作导航属性且别人数据加载的时候会生成SID。

    Master Data View是包括自己的时间相关和非时间相关的所有属性。一般咱用表,也就用这个M。

    其次P表是所有非时间相关属性。Q表所有跟时间相关的属性。

    X表是所有非时间相关的导航属性的SID。

    Y表所有时间相关的导航属性的SID。在主数据加载的时候就会给所有的导航属性创建SID

    纯展示属性会在CP用到join的时候生成,第一次使用的时候生成。但是在主数据里没有这个纯展示属性的SID

    层级加载会创建SID。

     

     

    CHCKFL,DATAFL,INCLFL啥意思

     

     这三个就是SID在哪里被用到了。也就是被lock了。为了保证数据一致性。

    CHCKFL,你这个主数据表的对象被其他对象用了。

    DATAFL,其他的ADSO用了,或者infoprovider用了。

    INCLFL,其他的层级用了。

    主数据删除

     那怎么才能删?那就是selective deletion删了,删除不要的。前提是你去源系统看了哪些是在用的,哪些是不用的啊。只能删除不用的。

    或者就是delete master data,会删掉没被锁的。

    也就是X--这种的。删的时候选WITH SIDs。

    F4 Help

    --待续

    维度表和SID表的外键关联

    --待续

  • 相关阅读:
    【Spring】Spring AOP的实现原理
    pytest Allure报告生成全量配置git+jenkins+allure
    SpringBoot SpringBoot 基础篇 4 基于 SpringBoot 的SSMP 整合案例 4.6 分页功能
    JavaScript基础知识——练习巩固(2)
    Spring容器加载Bean和JVM加载类
    协程简单使用
    工作失误合集,这个月的工资被扣没咯!
    浅谈程序的数字签名
    如何检验谷歌开发者账号注册资料的可靠性?
    记一次应急响应之ssh日志和apache2日志分析
  • 原文地址:https://blog.csdn.net/weixin_45689053/article/details/126250138