BIEE建模参考规范

注:本文基于网上盛传的“BIEE建模黄金法则”,并做了更为细致的讲解,以及修改。

物理层

1、  在可能的情况下,配置你的连接池使用本地驱动来连接物理数据库。例如,使用OCI而不是ODBC来连接Oracle数据库

2、  当数据模型是星型时,为物理表建别名(以Dim_,Fact_作为前缀),并根据需要添加描述性后缀。

例如:在数据仓库中,我们有一张W_STATUS_D字典表用于存储各种事务状态(活动状态、合同状态、客户状态),那我们应该为不同的状态类别创建相应的别名表,如:

Dim_W_STATUS_D_Activity_Status

Dim_W_STATUS_D_Contact_Status

Dim_W_STATUS_D_Customer_Status

 

描述名称部分应该按每个单词首字母大写的方式(如果是英文名称)

Tips:为什么要这样做?这样看起来更为复杂,但是实际上会使逻辑更为清晰,通过在逻辑层对不同的表添加不同的过滤条件,使得最终每张逻辑表只包含所对应的状态值,那我们在Answer中使用的时候就不必进行过滤了。

另外,通过建立别名,我们可以避免在物理层出现环状连接关系;更为重要的是,我们可以通过建立别名来实现角色扮演维!

3、  尽量避免视图的使用,视图有可能会带来性能问题。(除非你非常熟悉视图合并的原理)

4、  为初始化块建立单独的连接池,而不要使用第一个连接池(从上到下)。因为查询使用的是第一个连接池,当已有查询用尽了连接池的所有连接时,如果此时新用户登录需要初始化会话变量,就会因为没有可用的连接而等待,进而造成用户登录缓慢。(这也是为什么BIEE 11g默认情况下不能将第一个连接池用于初始化块的原因,这不是最佳实践!)

 

逻辑层

1、命名规范

方案一:所有的逻辑表都应该以Dim -,Fact –开头,中间跟业务主题或者模块名(可选),最后是表名,例如:

Fact - CRM – Revenue

Fact - HR – Payroll

Dim – Agreement

方案二:所有的逻辑表以F+编号,D+编号为前缀,然后空一格跟表描述;另外维度以H+编号为前缀,然后空一格跟维度描述;例如:

F0 Sales Base Measures

D0 Time

H1 Products

此种方案主要是为了控制表的排列顺序

另外,所有的描述名称部分应该按每个单词首字母大写加空格分隔的方式(如果是英文名称)

2、所有的物理层的列名称都不应该出现在逻辑层。逻辑的命名必须是“面向业务”的。例如使用Revenue而不是DOLLARS,同样应该遵循每个单词首字母大写加空格分隔的方式

下面给出一些常见的命名方式:

关于数量的: # of Assets (一般其聚合规则为count或者 count distinct的)

百分比的: % Contacted

时间序列的:Quarter Ago Average Order Size

另外,同一张事实表中的指标应该按类别进行排列,并添加分隔符(添加逻辑字段,修改其名称),如下图所示:

还可以通过设置不同的图标来标识不同类别指标,如下图所示:

计算器图标的是派生指标、其它的是普通指标。

3、物理主键和代理键不应该出现在业务模型层。

4、维度逻辑表必须要指定逻辑键。这个逻辑健应该是面向业务的,比如应该是“Employee Login”而不是“EMPLOYEE_PK”。

5、维度逻辑表必须仅仅包含维度属性,他们永远不应该包含任何度量列(有聚合规则)

Tips:如果需要在维度上做计算,如“天数”,则应将该维表为LTS建立事实表,比较常见的就是“时间事实表”

5、  事实逻辑表不应该指定逻辑键。

6、  在事实逻辑表中,每一列都是度量列,同时要指定聚合规则。

Tips:对应事实表上的属性字段,比如退化维,则应该以该事实表为LTS建立相应的逻辑维表

7、业务模型应该仅包含逻辑星型,不应该是雪花型。

注意:这里说的是逻辑星型,物理上有可能是雪花型。通过设置多LTS我们总能把雪花转换为逻辑星型

7、  每一个维度逻辑表都应该有对应的维度层次。

8、  每一个维度层级都设置适当的元素个数。一般要指定子层级的要比父层级的元素个数多。

注意:元素个数不需要精确,只要比例合适即可。另外可以使用“估计级别”功能自动来填写该值。

9、不要将所有度量合并到单独的一个事实逻辑表。例如,你应该将“Forecast Sales”和“Actual Sales”度量放到两个逻辑表中---“Fact_Sales”和“Fact_Forecast”

 

 

展现层

1、  主题应该按照业务进行划分,比如销售、采购、库存

2、  当你有多个主题区域时,在每个主题区域以相同的顺序列出这些公用的维度

3、  展示层的表的名字不要以Dim或Fact开头了。如果主题区域中的表是直接从逻辑层拖过来的话,要移除该前缀。

4、  时间维度表列在每一个主题区域的第一个位置。包含事实的展现层表应该列在底部,同时展现表应该被称作Facts,并可以根据需要划分成不同类别的事实,如Base Facts、Calculated Facts,然后做成层结构。如下图所示:

4、绝不应该出现用户从主题区域中选取的对象没有逻辑关联。如果有任何从同一主题区域中选择的对象无法共存,那么一定是你的主题区域设计不正确。

BIEE建模参考规范的更多相关文章

  1. Oracle的静默安装 升级和卸载 参考规范

    Oracle的静默安装 升级和卸载 参考规范 20180912 V1 一.Oracle的安装 Oracle产品的三种安装方式分别为: 1.图形化(Java向导)安装引导 2.使用应答文件静默安装 3. ...

  2. iOS编码规范参考

    目录      注释 1.1  多行注释 1.2  单行注释 1.3  函数的注释   命名 2.1  常量的命名 2.2  函数的命名 2.3  变量的命名 2.3.1  成员变量 2.3.2  公 ...

  3. Hive 建模

    date: 2020-05-24 17:55:00 updated: 2020-06-15 11:19:00 Hive 建模 1. 存储格式 textFile sequenceFile:一种Hadoo ...

  4. Java Script 编码规范【转】

    Java Script 编码规范 以下文档大多来自: Google JavaScript 编码规范指南 Idiomatic 风格 参考规范 ECMAScript 5.1 注解版 EcmaScript ...

  5. starUML 建模

    1. starUML 序列图建模 参考: [1]. starUML 序列图建模.  http://blog.csdn.net/u013474104/article/details/43818691

  6. Objective-C 代码规范(Code Style)

    我们写出来的代码会给很多人看,为了使代码清晰简洁,方便阅读理解,都会统一遵从一定的代码规范,Objective-C同样如此. 主要参考规范: 1.Google Objective-C Style Gu ...

  7. OC 代码规范

    我们写出来的代码会给很多人看,为了使代码清晰简洁,方便阅读理解,都会统一遵从一定的代码规范,Objective-C同样如此.   主要参考规范:   1. Google Objective-C Sty ...

  8. 要想成为前端大神,那些你不得不知晓的web前端命名规范。

    一.Web语义化 1.1 H5的语义化 对于经验资深的前端er,在给web布局时,相信都会很注重标签和命名的规范.尤其是随着html5的普及发展,更是把web前端语义化推向一个新的台阶上.比如html ...

  9. Web Components 规范学习

    最新的规范在这里:http://w3c.github.io/webcomponents/explainer/ 依据规范,有以下四个组成部分: Templates Custom Elements Sha ...

随机推荐

  1. 提高生产性工具(五) - 数据的过滤器和图形化(适用于 MVC5 + MongoDB)

    在下面流水账似的文章之前,先将一些感悟说一下. 1.如果一个系统对于某个功能在至少三个地方使用的话,必须将其抽象提炼出来,而且时间点最好是大规模测试之前. 2.提炼出来的功能,如果品质做得好,整个系统 ...

  2. MySQL中select * for update锁表的范围

    MySQL中select * for update锁表的问题 由于InnoDB预设是Row-Level Lock,所以只有「明确」的指定主键,MySQL才会执行Row lock (只锁住被选取的资料例 ...

  3. 为ASP.NET配置IIS7服务器支持十万个同时请求

    1. IIS7中应用程序池队列长度调整为65535(默认为1000) 打开IIS7管理器,选择应用程序池,右键选择应用程序池,选择高级设置,把1000改为65535

  4. 基于TCP和多线程实现无线鼠标键盘-Robot

    Windows端收到Android端传递来的键盘或鼠标操作信息以后,需要根据这些信息操作鼠标或键盘,这就需要用到java.awt.Robot类,该类用于控制鼠标或键盘. 在Java主窗体中定义: pu ...

  5. Java并发编程:Timer和TimerTask(转载)

    Java并发编程:Timer和TimerTask(转载) 下面内容转载自: http://blog.csdn.net/xieyuooo/article/details/8607220 其实就Timer ...

  6. 你知道什么是Grunt么?

    一句话,Grunt是前端的Maven.它是JavaScript世界的构建工具. 1. 首先安装node.js,由于Grunt需要依赖于node.js的npm来管理和安装.最终检测安装node.js成功 ...

  7. [小北De编程手记] : Lesson 05 玩转 xUnit.Net 之 从Assert谈UT框架实践

    这一篇,本文会介绍一下基本的断言概念,但重点会放在企业级单元测试的相关功能上面.下面来跟大家分享一下xUnit.Net的断言,主要涉及到以下内容: 关于断言的概念 xUnit.Net常用的断言 关于单 ...

  8. Redis学习笔记2-使用 Redis 作为 LRU 缓存

    当 Redis 作为缓存使用时,当你添加新的数据时,有时候很方便使 Redis 自动回收老的数据.LRU 实际上是被唯一支持的数据移除方法.Redis 的 maxmemory 指令,用于限制内存使用到 ...

  9. Uploadify 上传插件引起Chrome崩溃解决方法

    将Uploadify初始化代码延时加载,可解决Chrome崩溃. setTimeout(initUploadify, 60); function initUploadify() { var $Uplo ...

  10. ENVI软件操作之【数据的显示操作】

    数据的显示操作主要包括以下的一些简单窗口操作 1.文件列表管理 1)可用的波段列表Available Bands List,使用于存取ENVI图像文件和显示图像文件的主要控制对话框.无论何时何地打开一 ...