BW建模场景需求分析

场景需求分析

对于同一数据的分析,根据用户不同的需求,共有四种场景。这四种场景是我们BW顾问建模之前一定要弄清楚的,要根据业务用户的需求才能确定采用那种场景,选定场景后,我们才能开始建模。这是每个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实现

场景A:数据在不同时期所属有变化,但变化后在统计时也要区分开来,即原来与现在是属于哪类还是属于哪类,要符合历史实际情况,一就是一,二就是二。这种需要将主数据特征与其变化的属性一起作为CUBE的维度,同时出现在Cube中(即变化的属性特征也会现在交易数据里)。下面针对该场景进行实现:

    

数据源中,还是将物料组作为物料的一个属性来设计,只是在Cube中不显示(使用)这个属性,而是将物料组设计成非只读属性,这样在Cube设计时直接使用物料组这个特征,让它与物料直接出现在Cube维度中,而不只是个简单的显示属性。由于Cube维度中直接出现了物料组这列,这样Cube就要求交易数据中要有物料组这列,但从下面提供的交易数据来看是没有的,这就要求在Transformateion里对物料组这列做转换规则来填充,具体请参考后面过程。

下面开始建模:

创建物料主数据的数据源,并加载一月分的数据到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实现

场景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实现

场景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第二种实现:

场景D实现

注:由于同一InfoObject属性里不能多次添加同一属性,所以通过Reference的方式创建Valid From与Valid TO:

   

从场景C中物料特征复制,加上两个日期字段 Valid From与Valid To,并且做为时间相关的导航属性:

创建好Transformation后,加载主数据:

Cube从场景C中复制并修改如下:

加载交易数据:

报表设计:

   

时间: 2024-10-26 18:14:20

BW建模场景需求分析的相关文章

SFUD+FAL+EasyFlash典型场景需求分析,并记一次实操记录

SFUD+FAL+EasyFlash典型场景需求分析:用整个flash存储数据,上千条数据,读取得时候用easyflash很慢,估计要检索整个flash太慢了. 改进方法:分区检索. 1存数据时,根据数据特征进行划分,划分到特定的某个区,分区存储这些数据. 2检索数据时,首先根据待检索数据的特征,获取具体需要检索哪个分区.然后在该分区内使用easyflash提供的kv查询接口进行检索. /***********************************************下面开始实操 

UML建模学习1:UML统一建模语言简单介绍

一什么是UML? Unified Modeling Language(UML又称为统一建模语言或标准建模语言)是国际对象管理组织OMG制定的一个通 用的.可视化建模语言标准.能够用来描写叙述(specify).可视化(visualize).构造(construct)和记载(document)软件密集 型系统的各种工件(artifacts,又译为制品). UML是一个支持模型化和软件系统开发的图形化语言,为软件开发的全部阶段提供模型化和可视化支持,包含由 需求分析到规格,到构造和配置. UML是面

UML建模学习1:UML统一建模语言简介

一什么是UML? Unified Modeling Language(UML又称为统一建模语言或标准建模语言)是国际对象管理组织OMG制定的一个通 用的.可视化建模语言标准,可以用来描述(specify).可视化(visualize).构造(construct)和记载(document)软件密集 型系统的各种工件(artifacts,又译为制品). UML是一个支持模型化和软件系统开发的图形化语言,为软件开发的所有阶段提供模型化和可视化支持,包括由 需求分析到规格,到构造和配置. UML是面向对

【DDD】业务建模实践 —— 发布帖子

本文是基于上一篇‘业务建模小招数’的实践,主要讲解‘发表帖子’场景的业务建模,包括:业务建模.业务模型.示例代码:示例代码会使用java编写,文末附有github地址.相比于<领域驱动设计>原书中的航运系统例子,社交服务系统的业务场景对于大家更加熟悉,相信更好理解.本文是[DDD]系列文章的第一篇,可参考:通过业务系统的重构实践DDD Round-I 业务建模 在大家的常识中,每个人都有自己的观点,并可以发表自己的观点,在社区中便表现为:发布帖子.那么谁发布帖子呢? 很明显是帖子作者,于是我们

47、软件需求工程的活动可以划分为5个独立的阶段:需求获取、需求建模、形成需求规格、需求验证和需求管理,需求建模是()

2013年下半年软考高级信息系统项目管理师综合知识真题答案与解析: 47.软件需求工程的活动可以划分为5个独立的阶段:需求获取.需求建模.形成需求规格.需求验证和需求管理,需求建模是() A.分析需求的正确性和可行性的过程 B.对需求的抽象描述 C.对生成需求模型构件的精确的形式化的描述 D.开发.捕获和修订用户的需求 信管网参考答案:B 信管网解析: 需求建模就是需求分析过程,目的是对各种需求信息进行分析并抽象描述,为目标系统建立一个概念模型.软件需求工程活动的5个阶段:http://www.

3D场景的制作步骤

2.4   3D场景的制作步骤 1. 场景建模的使用目的 使用地形生成编辑器在模拟自然地形效果上有很大的优势,但是也有局限性.在表现比较规整的地形,比如一现代化城市,初具规模的小镇,地下宫殿等等就存在这样的局限.因为使用地形编辑器建立地形时,地表贴图的数量不能太多,选择的地表贴图的数量越多游戏的运行效率就越低,适合选择2-3张贴图.而城市中的地面上所需要的贴图会非常多,车行道.人行道.草坪等远不止三张,而且城镇的街道是非常规整的,这是地形生成编辑器不能做到的.还有很重要的一点,就是用这种方法制作

使用3DF Zephyr Free 进行车辆高精度三维建模

3DF Zephyr是一款功能强大的图片转三维模型软件,并且能够将模型以许多常见的3D格式导出.下面使用3DF Zephyr Free进行车辆高精度三维建模演示. 一.准备阶段 (1)3DF Zephyr Free软件:https://www.3dflow.net/ (14天的试用期) (2)准备约30张不同角度的车辆外形图片.以三个高度.环绕车辆一周进行拍照.如下所示:       二.操作 1. Workflow->新建工程.对于没有处理过的图片,可以不选择,直接 next 2. 点 “+”

数据库设计 Step by Step (2)——数据库生命周期

引言:数据库设计 Step by Step (1)得到这么多朋友的关注着实出乎了我的意外.这也坚定了我把这一系列的博文写好的决心.近来工作上的事务比较繁重,加之我期望这个系列的文章能尽可能的系统.完整,需要花很多时间整理.思考数据库设计的各种资料,所以文章的更新速度可能会慢一些,也希望大家能够谅解. 系列的第二讲我们将站在高处俯瞰一下数据库的生命周期,了解数据库设计的整体流程 数据库生命周期 大家对软件生命周期较为熟悉,数据库也有其生命周期,如下图所示. 图(1)数据库生命周期 数据库的生命周期

软件工程的引入:Scrum开发框架总结

俗话说,自己写的代码,6个月后也是别人的代码……复习!复习!复习!涉及的知识点如下: 软件工程概念 敏捷开发过程scrum 一.什么是软件工程?请用一句话描述. 软件工程是一门研究性的学科:它用工程化的方法(联系建筑工程……),构建和维护有效的.实用的,和高质量的软件.简单来说,软件工程有三要素:过程+方法+工具,而软件工程是目标,软件过程是步骤,方法和工具是辅助. 二.那么,软件过程又是什么? 软件过程:首先它是一个框架或者说步骤,它是一个为建造高质量软件而所需要完成的任务的框架,即形成软件产