对于某些与时间相关的数据(主数据有变化的数据)进行分析时,根据用户不同的需求,数据可归为4种不同的场景中,这4种场景是我们BW顾问建模之前一定要弄清楚的,要根据业务用户的需求才能确定采用那种场景,选定场景后我们才能开始建模。下面我会是针对这四种不同的场景,有不同的实现,其统计分析结果是不一样的
需求分析:BBB物料在2000.01月份所属物料组为Food,而到了2000.02月份时变为了Chemicals了,并且在2000.02月份新增了EEE物料主数据,在2000.01月份与2000.02月份BBB都产生了交易数据(但EEE物料只在2000.02月份产生了交易数据)。这样在统计时,BBB物料是归到Food组还是Chemicals组?由于归到哪组参照的标准不同,这就产生了下面不同的4种场景。
- 场景A:能够还原业务数据的真实情况,这种是遵循历史的。此场景下,BBB物料在2000.01月份产生的业务数据会被归到Food组;在2000.02月份产生的业务数据会被归到Chemicals组
- 场景B:只注重于当前,不遵循历史,根据出具报表时间来判断物料所属组。也就是说不管以前BBB物料曾经属于过哪些物料组,只看现在它属于哪个组。比如查看报表的日期为2月份,则BBB物料在1月分产生的业务即使属于Food,但还是归到当前最新所属物料组Chemicals
- 场景C:与场景B相似,不同的是,场景B只的依据是查看报表的当前时间,这个标准是定死的,即当前时间,另一个不同的地方是在建模方面,物料组属性在场景B是与时间无关的,但在C场景中是相关的。场景C在B的基础上更灵活,你可以设定这个标准为过去的某个时间点,也可以是当前时间,这种可变标准是通过报表里的变量Key Date来实现的。此场景下(假设当前已经到了2000.03月份了),如果Key Date设定为2000.01月份,则BBB物料在2000.02月份产生的业务数据虽然在历史上来看属于Chemicals,但还是会被归到Food组;如果Key Date设定为2000.02月份,则BBB物料在2000.01月份产生的业务数据虽然在历史上来看属于Food,但还是会被归到Chemicals组
- 场景D:具有可比性,即只统计一段时间内主数据未发生过变化的数据。该场景也是在C场景的基础上(物料组属性也是与时间相关的),物料主数据属性附加了两个有效期字段,这两字段实质上与系统产生的有效期字段是完全一样的,另外也有Key Date,因为如果没有Key Date,而查询时间相关的属性时,会以当前时间为Key Date,所以为了像场景C那样数据的真实性,所以还是加上了Key Date变量。在D场景下,如果当前日期已到了3月份,则在查看1996.1到9999.12之间从未发生过变化的数据时,BBB与EEE就不会出现
场景A:数据在不同时期所属有变化,但变化后在统计时也要区分开来,即原来与现在是属于哪类还是属于哪类,要符合历史实际情况,一就是一,二就是二。这种需要将主数据特征与其变化的属性一起作为CUBE的维度,同时出现在Cube中(即变化的属性特征也会现在交易数据里)。下面针对该场景进行实现:
下面开始建模:
创建物料主数据的数据源,并加载一月分的数据到ZMTR00中。结果数据会是这样:
物料组特征需直接在Cube的维度中使用,所以需要去掉此勾 :
否则在Cube中引用物料组特征属性ZMTRGP00时会提示它只是个属性,不进使用:
创建CUBE,并且将物料特征ZMTR00的物料组属性特征ZMTRGP00引用进来,也作为一个维度:
除了将物料组ZMTRGP00设置 为物料ZMTR00的属性外,还需要将物料组属性特征ZMTRGP00设置为CUBE的维度,这样物料ZMTR00与其属性ZMTRGR00都会出现在维度表中,处于平等地位。但是,交易数据中并没有此列的值,所以物料组属性特征ZMTRGP00的值只能从物料特征ZMTR00主数据中的物料组属性里读取,并在Transformateion里进行赋值处理。
规则 Read Master Data:表示目标字段的值从指定的InfoObject特征主数据表里读取相应属性来填充,这就要求源字段是由InfoObject特征字段组成成,并且这个InfoObject带有主数据。由于这里的源是一个DataSource,组成DataSource的字段不会是InfoObject,而是普通的数据库表字段定义,所以上而会提示出错。满足这种要求的源(字段由InfoObject组成,而非普通表字段),只能是DSO、CUBE等。下面我们只能使用DSO过渡一下:
创建DTP抽数,这样就将交易数据存储到了上面这个过渡DSO中了。
再为Cube创建Transformateion,源为上面创建过渡型DSO:
此时源为DSO,而非DataSource了,并且组成DSO的原字段中有ZMTR00这个InfoObject,且这个InfoObject具有主数据表,并含有ZMTRGP00属性,所以这个DSO可以用为 Read Master Data 规则的源:
再为Cube创建Transformateion:
并且为了模拟交易数据的过程(交易数据本应该分两次抽的,一月与二月分开抽),所以要为DTP加上过滤条件,分两次抽取,这次只抽一月份的数据:
运行这个DTP,一月份4条交易数据已被抽到CUBE中去了:
到目前为止,一月份的主数据与交易数据都已加载完成。下面进行二月份数据加载
加载二月份主数据:
再查看P表:
发现P表里有M版本的,所以在更新主数据后,要激活一下主数据后更新的数据才生效:
加载二月份交易数据,为CUBE新创建(原因是由于DSO中的数据已被上面CUBE的Delta DTP抽过了,再使用那个Delta DTP是抽不上数据的,所以重新新的DTP)一个Full全量的DTP(也可创建一个Delta DTP,因 为此时两个Delta DTP条件不重叠也是可以的),并将DTP过滤条件设置为二月份的:
此时CUBE中的数据如下,且满足场景A的需求了:
下面进行报表设计:
由于报表查看器(Business Query)Excle有问题,所以临时使用ECC自带的查看器 RSRT 来查看:
结论:这种正是因为将物料组属性也放在了维度表里,记录了物料属性哪个物料组的全过程,所以BBB在2000.1月与2000.2属于不同物料组时,也记录下来了。并且在出报表时,也是基于此维度表来查询某个物料属于哪个物料组的,所以场景A的统计结果不会随着查询时间变化而变化:
场景B:根据查看报表时间的不同,查询的结果会有所不同,其结果是以最新的数据状态来展现,不管过去是啥,只注重于今天。这种只需要将变化的属性作为与时间无关的导航属性即可,这是我们通常的做法。下面针对该场景进行实现:
下面直接在场景A实现上继续。
这里我们并没有将A场景中的CUBE的物料组ZMTRGP00维度给删除。现将ZMTR00的属性ZMTRGP00修改成导航属性(非时间相关),并在CUBE中打上勾:
这样在Query Designer里就会看到物料维度下有三个维度字段:
结论:由于直接使用的物料组属性是存放在主数据表里的,并且该属性与时间无关,所以物料主数据表里的物料组属性值只能存储最新的值,比如这里在2000.1月时BBB属于Food,但到了2000.2月后却变成了Chemical了,最后使用最新的Chemical覆盖了以前的Food,并且这个变化过程并未记录下来,所以报表在2000.2月之前某个时间点查看与在2000.2月之后某个时间点查看的结果是不同的(在2000.2月查时,会将以前为Food的销售额也看作成了Chemical了)。所以场景B的统计结果会随着查询时间点的变化可能会发生变化,原因是主数据属性随着时间发生了变化
场景B的第二种实现:
场景C:根据查看报表指定的Key Date不同,查询的结果会有所不同,一笔业务数据到底属于哪个范畴,则根据指定的Key Date来划分,这样,一笔数据在昨天看来或在今天看来是不一样的。这种与场景B有点相似,只不过B只能根据查询报表当前来定业务数据到底该划分到哪个组,而场景B除了根据当前外,还可以基于历史的任一天来灵活查看。下面针对该场景进行实现:
由于该物料的物料组属性设置的与时间相关,所以会出现0DATETO与0DATEFROM两个字段,按理需要物料主数据文件里有这两列,为了省事,就在Transformation里设置对应固定值,这里抽的是2000.1月份的主数据,所以有效期设置为 2000.01.01 到 2000.01.31:
物料主数据表数据如下(系统会自动为每个物料加上两个有效期:一个是在输入的有效期之前的期间,另一个是在输入的有效期之后的期间):
从上面数据来看,系统会自动为每个物料多生成两个期间,一个是在我们指定的有效期之间的期间,另一个是在我们指定的有效期之后的期间
下面再次抽取2月份的物料主数据,先修改转换规则的有效时间为2000.02.01 到 2000.02.29:
创建CUBE:
创建转换规则时金额字段报错:
编辑规则,由于金额字段的单位固定为RMB,所以这里不需要对金额进行转换:
下面创建报表测试:
由于Key Date输入的为 2000-01-15 ,在这一时间点上,EEE 还没有对应的物料组属性(即那个时候还没有产生业务数据),所以是 # 表示。其他物料都是按 2000-01-15 这一天所属物料组来统计的,如 BBB物料,虽然在2000.2月份变成了Chemical组了,但输入的Key Date为2000-01-15,则按2000-01-15这天的标准来判断BBB物料到底属性哪个物料组,经到数据主数据表里查找这一时间点(2000-01-15)所对应的组还是Food,而不管业务什么发生的,而是按查询时指定的Key Date为依据进行判断,所以BBB物料在2000.2月份的销售金额原本属于Chemical的,却还是归到了Food组了:
再将报表的Key Date设置为2000.02.15:
原本BBB有一笔在2000.01月份业务发生时,是属于Food物料组的,但由于Key Date输入的为 2000-02-15,即物料属于哪个物料组要按着这个指定的Key Date为判断依据,所以这笔发生的业务要算到Chemical物料组里而不是Food组
结论:主数据的属性随着时间的变化而变化时,数据统计的标准可以是过去的某天,也可也是今天。同一笔业务数据根据不同的Key Date分类统计时会划分到不同的分组里,这样以不同的时间点来看报表时,统计结果会有所不同
场景C第二种实现:
注:由于同一InfoObject属性里不能多次添加同一属性,所以通过Reference的方式创建Valid From与Valid TO:
从场景C中物料特征复制,加上两个日期字段 Valid From与Valid To,并且做为时间相关的导航属性:
创建好Transformation后,加载主数据:
Cube从场景C中复制并修改如下:
加载交易数据:
报表设计:
![clip_image001[8] clip_image001[8]](https://images0.cnblogs.com/blog/717614/201501/280243167534217.jpg)
![clip_image002[8] clip_image002[8]](https://images0.cnblogs.com/blog/717614/201501/280243239412478.jpg)
![clip_image003[8] clip_image003[8]](https://images0.cnblogs.com/blog/717614/201501/280243318161584.jpg)
![clip_image004[8] clip_image004[8]](https://images0.cnblogs.com/blog/717614/201501/280243350979886.jpg)
![clip_image005[4] clip_image005[4]](https://images0.cnblogs.com/blog/717614/201501/280243370198973.png)
![clip_image006[6] clip_image006[6]](https://images0.cnblogs.com/blog/717614/201501/280243390508561.jpg)
![clip_image007[6] clip_image007[6]](https://images0.cnblogs.com/blog/717614/201501/280243427841937.jpg)
![clip_image008[6] clip_image008[6]](https://images0.cnblogs.com/blog/717614/201501/280243467693153.jpg)
![clip_image009[6] clip_image009[6]](https://images0.cnblogs.com/blog/717614/201501/280243537844830.jpg)
![clip_image010[6] clip_image010[6]](https://images0.cnblogs.com/blog/717614/201501/280243565661346.jpg)
![clip_image011[6] clip_image011[6]](https://images0.cnblogs.com/blog/717614/201501/280243598005634.jpg)
![clip_image012[6] clip_image012[6]](https://images0.cnblogs.com/blog/717614/201501/280244070509382.jpg)
![clip_image013[6] clip_image013[6]](https://images0.cnblogs.com/blog/717614/201501/280244139253316.jpg)
![clip_image014[6] clip_image014[6]](https://images0.cnblogs.com/blog/717614/201501/280244211121578.jpg)
![clip_image015[6] clip_image015[6]](https://images0.cnblogs.com/blog/717614/201501/280244276123697.jpg)
![clip_image016[6] clip_image016[6]](https://images0.cnblogs.com/blog/717614/201501/280244361127160.jpg)
![clip_image017[6] clip_image017[6]](https://images0.cnblogs.com/blog/717614/201501/280244413317022.jpg)
![clip_image018[6] clip_image018[6]](https://images0.cnblogs.com/blog/717614/201501/280244485811771.jpg)
![clip_image019[6] clip_image019[6]](https://images0.cnblogs.com/blog/717614/201501/280244561284076.jpg)
![clip_image020[6] clip_image020[6]](https://images0.cnblogs.com/blog/717614/201501/280245038169423.jpg)
![clip_image021[6] clip_image021[6]](https://images0.cnblogs.com/blog/717614/201501/280245113319187.jpg)
![clip_image022[6] clip_image022[6]](https://images0.cnblogs.com/blog/717614/201501/280245145503004.jpg)
![clip_image023[6] clip_image023[6]](https://images0.cnblogs.com/blog/717614/201501/280245211752395.jpg)
![clip_image024[6] clip_image024[6]](https://images0.cnblogs.com/blog/717614/201501/280245248312512.jpg)
![clip_image025[6] clip_image025[6]](https://images0.cnblogs.com/blog/717614/201501/280245314253659.jpg)
![clip_image026[6] clip_image026[6]](https://images0.cnblogs.com/blog/717614/201501/280245365191549.jpg)
![clip_image027[6] clip_image027[6]](https://images0.cnblogs.com/blog/717614/201501/280245392376278.jpg)
![clip_image028[6] clip_image028[6]](https://images0.cnblogs.com/blog/717614/201501/280245429562883.jpg)
![clip_image029[6] clip_image029[6]](https://images0.cnblogs.com/blog/717614/201501/280245488319644.jpg)
![clip_image030[6] clip_image030[6]](https://images0.cnblogs.com/blog/717614/201501/280245513622616.jpg)
![clip_image031[6] clip_image031[6]](https://images0.cnblogs.com/blog/717614/201501/280245533785433.jpg)
![clip_image032[6] clip_image032[6]](https://images0.cnblogs.com/blog/717614/201501/280245588009122.jpg)
![clip_image033[6] clip_image033[6]](https://images0.cnblogs.com/blog/717614/201501/280246019419681.jpg)
![clip_image034[6] clip_image034[6]](https://images0.cnblogs.com/blog/717614/201501/280246066284214.jpg)
![clip_image035[6] clip_image035[6]](https://images0.cnblogs.com/blog/717614/201501/280246088163615.jpg)
![clip_image036[6] clip_image036[6]](https://images0.cnblogs.com/blog/717614/201501/280246110037717.jpg)
![clip_image037[6] clip_image037[6]](https://images0.cnblogs.com/blog/717614/201501/280246131751348.jpg)
![clip_image038[6] clip_image038[6]](https://images0.cnblogs.com/blog/717614/201501/280246208479924.jpg)
![clip_image039[6] clip_image039[6]](https://images0.cnblogs.com/blog/717614/201501/280246255818471.jpg)
![clip_image040[4] clip_image040[4]](https://images0.cnblogs.com/blog/717614/201501/280246301284260.jpg)
![clip_image041[4] clip_image041[4]](https://images0.cnblogs.com/blog/717614/201501/280246344098735.jpg)
![clip_image042[4] clip_image042[4]](https://images0.cnblogs.com/blog/717614/201501/280246390346782.jpg)
![clip_image043[4] clip_image043[4]](https://images0.cnblogs.com/blog/717614/201501/280246407536340.jpg)
![clip_image044[4] clip_image044[4]](https://images0.cnblogs.com/blog/717614/201501/280246427229440.jpg)
![clip_image045[4] clip_image045[4]](https://images0.cnblogs.com/blog/717614/201501/280246493787074.jpg)
![clip_image046[4] clip_image046[4]](https://images0.cnblogs.com/blog/717614/201501/280246572692952.jpg)
![clip_image047[4] clip_image047[4]](https://images0.cnblogs.com/blog/717614/201501/280246588478467.png)
![clip_image048[4] clip_image048[4]](https://images0.cnblogs.com/blog/717614/201501/280247002699467.png)
![clip_image049[4] clip_image049[4]](https://images0.cnblogs.com/blog/717614/201501/280247022843285.png)
![clip_image050[4] clip_image050[4]](https://images0.cnblogs.com/blog/717614/201501/280247037376827.png)
![clip_image051[4] clip_image051[4]](https://images0.cnblogs.com/blog/717614/201501/280247057378171.png)
![clip_image052[4] clip_image052[4]](https://images0.cnblogs.com/blog/717614/201501/280247075668230.png)
![clip_image053[4] clip_image053[4]](https://images0.cnblogs.com/blog/717614/201501/280247088002175.png)
![clip_image054[4] clip_image054[4]](https://images0.cnblogs.com/blog/717614/201501/280247108785776.png)
![clip_image055[4] clip_image055[4]](https://images0.cnblogs.com/blog/717614/201501/280247122841007.png)
![clip_image056[4] clip_image056[4]](https://images0.cnblogs.com/blog/717614/201501/280247136445521.png)
![clip_image057[4] clip_image057[4]](https://images0.cnblogs.com/blog/717614/201501/280247156446865.png)
![clip_image058[4] clip_image058[4]](https://images0.cnblogs.com/blog/717614/201501/280247168164323.png)
![clip_image059[4] clip_image059[4]](https://images0.cnblogs.com/blog/717614/201501/280247180033253.png)
![clip_image060[4] clip_image060[4]](https://images0.cnblogs.com/blog/717614/201501/280247195818768.png)
![clip_image061[4] clip_image061[4]](https://images0.cnblogs.com/blog/717614/201501/280247212226069.jpg)
![clip_image062[4] clip_image062[4]](https://images0.cnblogs.com/blog/717614/201501/280247227229327.png)
![clip_image063[4] clip_image063[4]](https://images0.cnblogs.com/blog/717614/201501/280247242066815.png)
![clip_image064[4] clip_image064[4]](https://images0.cnblogs.com/blog/717614/201501/280247263627972.jpg)
![clip_image065[4] clip_image065[4]](https://images0.cnblogs.com/blog/717614/201501/280247321911720.jpg)
![clip_image066[4] clip_image066[4]](https://images0.cnblogs.com/blog/717614/201501/280247405193898.jpg)
![clip_image067[4] clip_image067[4]](https://images0.cnblogs.com/blog/717614/201501/280247483169746.jpg)
![clip_image068[4] clip_image068[4]](https://images0.cnblogs.com/blog/717614/201501/280247495977704.png)
![clip_image069[4] clip_image069[4]](https://images0.cnblogs.com/blog/717614/201501/280247508003406.png)
![clip_image070[4] clip_image070[4]](https://images0.cnblogs.com/blog/717614/201501/280247525344436.png)
![clip_image071[4] clip_image071[4]](https://images0.cnblogs.com/blog/717614/201501/280247545819794.png)
![clip_image072[4] clip_image072[4]](https://images0.cnblogs.com/blog/717614/201501/280247572531511.jpg)
![clip_image073[4] clip_image073[4]](https://images0.cnblogs.com/blog/717614/201501/280247589876839.png)
![clip_image074[4] clip_image074[4]](https://images0.cnblogs.com/blog/717614/201501/280248007227870.png)
![clip_image075[4] clip_image075[4]](https://images0.cnblogs.com/blog/717614/201501/280248024094887.png)
![clip_image076[4] clip_image076[4]](https://images0.cnblogs.com/blog/717614/201501/280248042223473.png)
![clip_image077[4] clip_image077[4]](https://images0.cnblogs.com/blog/717614/201501/280248056752717.png)
![clip_image078[4] clip_image078[4]](https://images0.cnblogs.com/blog/717614/201501/280248073169017.png)
![clip_image079[4] clip_image079[4]](https://images0.cnblogs.com/blog/717614/201501/280248101445248.png)
![clip_image080[4] clip_image080[4]](https://images0.cnblogs.com/blog/717614/201501/280248122063080.png)
![clip_image081[4] clip_image081[4]](https://images0.cnblogs.com/blog/717614/201501/280248141756180.png)
![clip_image082[4] clip_image082[4]](https://images0.cnblogs.com/blog/717614/201501/280248159874767.png)
![clip_image083[4] clip_image083[4]](https://images0.cnblogs.com/blog/717614/201501/280248185974698.jpg)