论坛首页 Java企业应用论坛

多维数据模型设计

浏览 4892 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
作者 正文
   发表时间:2008-11-24  
多维数据模型如何设计呢?数据模型如下:

概念:
多维数据模型:每个维度模型都由具有复合键的某个表(被称做是事实表)和一系列小型表(被称为是维度表)组成.指标数据在事实表中维护,维度数据在维度表中维护.每一个维度表通过一个关键字直接与事实表关联。

在多维化的元数据模型中,每个数据对象仍然由一系列的属性来描述。其中,具有数量特性、作为主要的统计对象的属性称为度量(Measure)或事实(Fact),而说明度量的属性称为维(Dimension),每个维可以由一个或多个属性组成,维内的多个属性之间可能形成层次关系。多维化的元数据模型可以看作为由其各维构成的多维空间,度量是该多维空间上的点值,空间上的坐标是说明属性的值的组合。
维度:是人们观察数据的特定角度。例如,一个企业在考虑产品的销售情况时,通常从时间、地区和产品的不同角度来深入观察产品的销售情况。这里的时间、地区和产品就是维,销售量便是数据数据。而这些维的不同组合和所考察的度量指标构成的多维数组则是报表分析的基础,可形式化表示为(地区、时间、产品、销售额)。多维分析是指对以多维形式组织起来的数据通过各种分析动作,剖析数据,使用户能从多个角度、多侧面地观察数据库中的数据,从而深入理解包含在数据中的信息。

需求:如何设计一个自定义的多维数据模型呢。一个事实表+一个维度组合表+N维度表。
事实数据表Zgtj_TB_DATA_X
Fact_id dim_id FD_0 FD_1 FD_2 ….
NUMBER(18) NUMBER(18) …. …. ….
主键 外键(组合维度表主键) 事实数据字段1 事实数据字段2 事实数据字段3

组合维度表Zgtj_TB_INDX_X
Dim_id Prd_id area_id …
NUMBER(18) NUMBER (18) NUMBER(18) …
(PK)主键 (FK)产品维度主键 (FK)区域维度主键 其他维度主键

产品维度表dim_prd_info
Prd_id Prd_name remark
NUMBER(18) NUMBER(4) Varchar2(100)
主键 产品名称 备注

区域维度表dim_area_info
Area_id Area_name remark
NUMBER(18) NUMBER(4) Varchar2(100)
主键 区域名称 备注

组合维度表Zgtj_TB_INDX_X与事实数据表Zgtj_TB_DATA_X关联。如何实现用户自定义维度呢?即Zgtj_TB_INDX_X中的维度id组合是不固定的,可以定义成多个。如可以是Prd_id,area_id,也可以是Prd_id,date_id(时间维度id)等。

下面介绍一种方式,设计很麻烦。虚心听取大家的修改意见。

维度类型表sys_Mde_Type(用来维护自定义维度表)
字段名称 字段类型(长度) 索引/引用 中文说明 简要举例
Mde_id NUMBER (18) PK 维度类型的id
Mde_Name Varchar2 (250) 维度类型名称
Mde_Table Varchar2 (250) 维度对应的物理表名称
Create_Time Date 创建时间 系统默认时间
Remark varchar (250) 备注

维度表属性表sys_Mde_Colums
字段名称 字段类型(长度) 索引/引用 中文说明 简要举例
Col_id NUMBER(18) PK 维度属性id
Mde_id NUMBER(18) FK 维度类型id
Col_code Varchar2 (32) 维度字段code
Col_name varchar (250) 维度中文名
Col_isValue Bit(1) 是否是值字段 默认0:不是 1:是
Col_type int (4) 数据类型
Col_size int (4) 维度长度
Col_precision int (4) 精度
Col_decimal int (4) 小数位
Col_unique bit(1) 是否进行唯一性检查 默认0:进行 1:不进行
Col_isnull bit(1) 能否为空 默认0:可以 1:不可以
Remark Varchar(100) 备注

维度关联表Zgtj_TB_INDX_Rel
字段名称 字段类型(长度) 索引/引用 中文说明 简要举例
Rel_id NUMBER(18) PK 主键
Dim_id NUMBER(18) FK 组合维度主键
Mde_id varchar (32) FK 关联sys_Mde_Type表
Field_name Varchar2 (32) 关联字段

zgtj_tb_indx_x数据如下:
dim_id Field_name1 Field_name2 ... ...
1 1 2
Zgtj_TB_INDX_Rel数据如下:
Rel_id dim_id Field_Name Mde_id
1 1 Field_name1 1
2 1 Field_name2 2
sys_Mde_Type 数据如下:
Mde_id Mde_name Mde_table Create_Time remark
1 产品维度信息 Mde_prd_info
2 项目维度信息 Mde_prj_info
Sys_Mde_columns数据如下:
Col_id Mde_id Col_code Col_name Col_isValue Col_type Col_size … … … … …
1 1 Prd_code 产品编号 0 12 10
2 1 Prd_name 产品名称 1 12 50
3 2 Prj_value 项目编号 0 12 10
4 2 Prj_name 项目名称 1 12 50
Mde_prd_info数据如下:
Prd_id Prd_code Prd_name
1 00001 产品一
2 00002 产品二

Mde_prj_info数据如下:
Prj_id Prj_code Prj_name
1 00001 项目一
2 00002 项目二

1.找到zgtj_tb_indx_x 中字段FD_Name对应的sys_mde_type 表的Mde_guid:
Select r.Mde_guid from zgtj_tb_indx_x x,zgtj_indx_rel_x r where x.sys_id = r.sys_id and r.field_Name = ‘FD_Name’
2.找到Mde_guid对应的Mde_Table。
Select Col_code  from sys_mde_Columns  where mde_guid = mde_guid and Col_isValue=1
3.Select  col_code  from Mde_Table  where  col_id=1

根据上面sql语句可以将
dim_id Field_name1 Field_name2 ... ...
1 1 2
转换得到
dim_id Field_name1 Field_name2 ... ...
1 产品一 项目二



啰嗦写了这么多,不知道大家能否看明白。
   发表时间:2008-11-24  
哎,内容没编辑好。谁知道Mr.CRM5.0里多维报表可以由客户自定义,是怎么实现的呢?

说说多维是怎么定义的,他们之间是怎么与事实数据关联的呢?

求解!
0 请登录后投票
论坛首页 Java企业应用版

跳转论坛:
Global site tag (gtag.js) - Google Analytics