OBIEE – 维度建模

维度建模提供了在DW设计中使用的一组方法和概念。根据DW顾问Ralph Kimball的说法,维度建模是一种旨在支持数据仓库中的终端用户查询的数据库设计技术。它以易理解性和性能为导向。据他说,尽管面向事务的ER(实体关系模型)对事务获取非常有用,但在向终端用户的交付中应该避免它。

维度建模总是使用事实和维度表。事实是可以在事实值上汇总和分析的数值。维度定义事实值的层次和说明。

维度表

维度表存储着描述事实表中的对象的属性。维度表具有唯一标识每个维度行的主键。此键用于将维度表关联到事实表。

维度表通常是去归一化的,因为它们不是为执行事务而创建的,而只是用于详细分析数据。

示例

在下面的维度表中,客户维度通常包括客户姓名,地址,客户ID,性别,收入组,教育水平等。

Customer IDNameGenderIncomeEducationReligion
1Brian EdgeM234
2Fred SmithM351
3Sally JonesF173

事实表

事实表包含被称为测量值的数值。事实表有两种类型的列 - 事实和关联到维度表的外键。

事实表中的度量值有三种类型 -

  • 可加- 可以跨任意维度加总的度量值。
  • 不可加- 不能跨任何维度加总的度量值。
  • 半可加- 可以在一些维度上加总的度量值。

示例

Time IDProduct IDCustomer IDUnit Sold
41721
82132
8411

这个事实表包含时间维度,产品维度,客户维度和度量值销售单位的外键。

假设一家公司向客户销售产品。那么每一笔事务都是在公司内部发生的一个事实,而事实表则被用来记录这些事实。

常见事实是 - 销售单位数量,利润,销售收入等。维度表列出了我们想要用来分析数据的因素,如客户,时间,产品等。

现在,如果我们考虑上面的事实表和Customer维度,那么也会有一个Product和 time 维度。考虑到这个事实表和这三个维度表,我们可以提出这样的问题:2010年有多少手表卖给了男性客户?

维度表和事实表之间的区别

维度表和事实表之间的功能差异:事实表有我们想要分析的数据,而维度表则有允许我们查询这些数据时所需的信息。

聚合表

一个聚合表包含可以通过使用不同的聚合函数来计算的聚合数据。

聚合函数是一个把多行的值分组在一起,并以它们作为按某一标准的输入形成一个更重要的意义或测量值的单个值的函数。

常见的聚合函数包括 -

  • 平均值:Average()
  • 计数:Count()
  • 最大值:Maximum()
  • 中位数: Median()
  • 最小值: Minimum()
  • 众数:Mode()
  • 求和:Sum()

这些聚合表用于性能优化,以便在数据仓库中运行复杂的查询。

示例

您可以保存含年度(1行),季度(4行),月度(12行)等汇总数据的表,现在您必须对数据进行比较,例如对于年度数据将只有1行被处理。但是,在未聚合的表中,所有行都将被处理。

MIN返回给定列中的最小值
MAX返回给定列中的最大值
SUM返回给定列中的数值的总和
AVG返回给定列的平均值
COUNT返回给定列中的值的总数
COUNT (*)返回表中的行数

Select Avg (salary) from employee where title = ‘developer’ 。这个语句将返回职位 = ‘开发人员’ 的所有员工的平均工资。

聚合可以应用在数据库级。您可以创建聚合并将其保存在数据库里的聚合表中,也可以在报告级动态地应用聚合。

注意- 如果您在数据库级保存聚合,则可节省时间并提供性能优化。