一个典型的数据仓库有两个重要组成部分: 维度和事实
。
维度是用于阐述业务问题的类别
,例如,时间、 地理位置、 产品、 部门、和分销渠道等。
事实是与一组特定的维度的值相关联的事件或实体
,例如销售量或利润。
需要使用多维度的示例包括以下:
以上升聚合级别方式,显示从2007年到 2008 年度,在地理维度上从州到国家到地区,跨越所有产品的总销售额。
对2007年到 2008 年度,我们在南美的运营情况,创建一个跨表格分析,按地区显示开支。包括所有可能的分类汇总。
根据 2008年汽车产品销售收入,列出在亚洲的前 10位销售代表,并按其佣金分级。
很多的多维问题往往需要跨时间、 地理位置、或预算,来聚合数据和比较数据集。
创建维度允许更广泛地使用查询重写功能
。数据库可以通过透明地重写查询以使用物化视图来提高查询性能。
维度的层次结构
维度表是一个逻辑结构,用来定义列对或列集之间的层次关系
。
维度没有分配数据存储。维度信息存储在维度表中,而事实信息存储在事实表中。
在客户维度中,能将客户上卷到市、 州、 国家、 亚区、和地区。数据分析通常在多维层次结构中从较高级别开始,并在必要时可以逐步下钻。
在子级别的每个值在父级别有且只有一个与其相关联的值
。
层次结构关系是层次结构中的一个级别对该层次结构中的下一个级别的函数依赖
。
创建维度
维度是用SQL 语句来创建的。CREATE DIMENSION语句会指定:
多个LEVEL子句,每个LEVEL标识维度中的一个列或列集
一个或多个指定相邻级别之间的父/子关系的HIERARCHY子句
可选的ATTRIBUTE子句,每个ATTRIBUTE标识与某个单个级别相关联的额外的列或列集
下面的语句用来在示例模式 sh中创建 customers_dim 维度:
CREATE DIMENSION customers_dim
LEVEL customer IS (customers.cust_id)
LEVEL city IS (customers.cust_city)
LEVEL state IS (customers.cust_state_province)
LEVEL country IS (countries.country_id)
LEVEL subregion IS (countries.country_subregion)
LEVEL region IS (countries.country_region)
HIERARCHY geog_rollup (
customer CHILD OF
city CHILD OF
state CHILD OF
country CHILD OF
subregion CHILD OF
region JOIN KEY (customers.country_id) REFERENCES country )
ATTRIBUTE customer DETERMINES
(cust_first_name, cust_last_name, cust_gender,
cust_marital_status, cust_year_of_birth,
cust_income_level, cust_credit_limit)
ATTRIBUTE country DETERMINES (countries.country_name);
维度中的列可以来自一个表 (反规范化) 或多个表 (完全或部分规范化)
。例如,一个规范化的时间维度可以包含日期表、 月份表、和一个年度表,使用联接条件,将每个日期行连接到一个月份行,每个月份行联接到一个年度行。在一个完全反规范化的时间维度中, 日期、 月份、和年度都在同一个表中。无论规范化或反规范化,列之间的层次关系必须在CREATE DIMENSION语句中指定。