1、第五章 范 例,设计一个数据仓库首先要面对的是哪些是事实数据,而哪些是维度数据。在一个大型的OLTP系统中字段众多,要在其中决定事实与维度数据并不容易。识别事实与维度设计事实表设计维度表,识别事实与维度,1)在整个OLTP系统中搜索最基本的交易,它们极可能是事实数据2)决定搜索每一个事实数据的外键,它们极可能是维度数据3)检验每一个可能事实数据的字段,确定它不是嵌入在事实数据中的维度数据4)检验每一个可能维度数据的字段,确定它不是嵌入在维度数据中的事实数据,设计事实表,一个事实表是由OLTP系统转入而生成出来的,数据仓库的数据并不包含OLTP系统中所有的数据。在设计一个事实表的时候,考虑下面的
2、事项:1)为每一项功能决定数据仓库的时距(十年,五年还是其它?)2)为每一项功能决定其采用原则3)决定在事实表中应包含哪些字段4)尽量缩小事实表中字段的大小5)将时间因素加入事实表,设计维度表,在设计之初要确定不会更新数据的主键,否则一旦修改,事实表要一起更新。维度表常是违反正规化的。时间一般都是一个事实表的维度,例子 Northwind数据库,一个贸易公司商业所使用的数据库(SQL Server 2000的范例)数据库架构(1)Categories表:存储产品所有类型的相关信息,数据库架构,(2)CustomerDemo表:存储了顾客所属类别信息(3)CustomerDemographics
3、表:存储了顾客类别的描述信息,数据库架构,(4)Customers表:存储了顾客所有相关信息,数据库架构,(5)Employees表:存储了员工所有相关信息,数据库架构,(6)EmployeesTerritories表:存储了员工所负责的区域(7)Territories表:存储了员工所负责的区域的基本数据,数据库架构,(8)Region:存储了员工所负责的区域所属区的基本数据(9)OrderDetail:存储订单下的单项商品信息,数据库架构,(10)Orders:存储订单的全部信息,数据库架构,(11)Shippers:存储了货运公司的相关信息,数据库架构,(12)Products:产品的相关
4、信息,数据库架构,(13)Suppliers:供货商的相关信息,表间关系,需求分析,经过调查后,假定得到了下面的需求:希望能够针对每一个员工做销售业绩分析希望能够针对每一产品做销售分析希望能够针对每一分类产品做销售分析希望能够针对每一供货商做销售分析希望能够针对每一顾客做销售分析希望能够针对每一地区的顾客做销售分析希望能够针对每一城市的顾客做销售分析希望能够针对年、季、月做销售分析,识别事实和维度,经归纳发现,索引基准点为5类:顾客员工产品供货商时间,分析过程,货运在分析中不出现,可去掉,分析过程,Employeer员工表,EmployeerTerritories,Territories区域表
5、,Region地区表,Customer顾客表,CustomerCustomorDemo顾客类别,CustomorDemographics顾客描述,Orders订单表,OrdersDetail订单详情表,Products产品表,Categories产品类别表,Suppliers供货商表,8个记录,0个记录,0个记录,91个记录,9个记录,49个记录,2155个记录,830个记录,4个记录,53个记录,29个记录,77个记录,员工负责的区域及其区域所属地区与分析无关,去掉三个表,Employeer员工表,Customer顾客表,CustomerCustomorDemo顾客类别,CustomorDe
6、mographics顾客描述,Orders订单表,OrdersDetail订单详情表,Products产品表,Categories产品类别表,Suppliers供货商表,8个记录,0个记录,0个记录,91个记录,9个记录,2155个记录,830个记录,29个记录,77个记录,顾客类别及描述在分析中不会感兴趣,而且为0个记录,所以也不考虑,分析过程,Employeer员工表,Customer顾客表,Orders订单表,OrdersDetail订单详情表,Products产品表,Categories产品类别表,Suppliers供货商表,分析过程,Employeer员工表,Customer顾客表,
7、Orders订单表,OrdersDetail订单详情表,Products产品表,Categories产品类别表,Suppliers供货商表,分析过程,Employeer员工表,Customer顾客表,Orders订单表,OrdersDetail订单详情表,Products产品表,Categories产品类别表,Suppliers供货商表,分析过程,Employeer员工表,Customer顾客表,Orders订单表,OrdersDetail订单详情表,Products产品表,Categories产品类别表,Suppliers供货商表,分析过程,Employeer员工表,Customer顾客表,
8、Orders订单表,OrdersDetail订单详情表,Products产品表,Categories产品类别表,Suppliers供货商表,分析过程,Employeer员工表,Customer顾客表,Orders订单表,OrdersDetail订单详情表,Products产品表,Categories产品类别表,Suppliers供货商表,分析过程,Employeer员工表,Customer顾客表,Orders订单表,OrdersDetail订单详情表,Products产品表,Categories产品类别表,Suppliers供货商表,分析过程,识别事实与维度数据,顾客维度员工维度供应商维度时间
9、维度产品维度,产品维度,Categories:产品类别描述Products:产品类别描述,CategoryID,CategoryName:维度数据,属于产品维度,每单位数量、单价是同公司运营有关的数据,不随时间改变,也不会以每单位数量和单价为基准来分析数据,所以是事实数据,顾客维度,Customers:顾客描述,CustomerID、CustomerName:属于顾客维度数据,City 、Region、Country:属于顾客维度数据,且具有层次关系,员工维度,Employees:员工描述,都是维度数据,属于员工维度,事实数据,Orders:订单描述,订单号是因公司经营而产生,不随时间变化,不
10、会以订单号为基准分析,所以是事实数据,CustomerID:顾客维度数据EmployeeID:员工维度数据OrderDate:时间维度数据,事实数据,OrdersDetail:产品项描述,随公司运营产生的有订单号、产品单价、订购数量和折扣,它们不随时间变化。也不会以订单号、产品单价、订购数量和折扣为基准分析数据,所以是事实数据。,ProductID是产品维度数据,设计事实表,事实表名称:Sales数据源:Orders,OrderDtails,Employees,Products,Suppliers, Customers索引:EmployeeID,来自Employees表ProcutID,来自P
11、roducts表CustomerID,来自Customers表OrderDate,来自Orders表事实表度量值字段:UnitPrice,来自OrderDetails表Total=Quantity*UnitPrice*(1.0-Discount)Quantity,来自OrderDetails表Discount,来自OrderDetails表,数据抽取SQL语句,SELECT e.EmployeeID,p.ProductID,s.SuppliersID, c.CustomerID,o.OrderDate,od.UnitPrice, od.Quantity*od.UnitPrice*(1.0-od
12、.Discount) Total, od.Quantity,od.DiscountFROM Orders o,OrderDetails od, Employees e, Products p,Suppliers s,Customers cWHERE o.OrderID=od.OrderID ANDo.EmployeeID=e.EmployeeID ANDo.CustomerID=c.CustomerID ANDod.ProductID=s.ProductID ANDp.SuppliersID=s.SuppliersID,设计员工维度表,员工维度表名称:Employee数据源:Employees
13、表数据字段:EmoloyeeID,来自Employees表EmployeeName,来自Employees表Title,来自Employees表SQL语句 SELECT EmployeeID,EmployeeName,Title FROM Employees数据架构:星型架构主键字段:EmployeeID,设计产品维度表,产品维度表名称:Product数据源:Products表数据字段:ProductID,来自Products表CategoryID,来自Products表ProductName,来自Products表QuantityPerUnit:来自Products表,SQL语句SELECT
14、 ProductID,ProductName,QuantityPerUnitFROM Products,数据架构:雪花式架构主键字段:ProductID,设计产品维度表,产品分类维度表名称:Category数据源:Categories表数据字段:CategoryID,来自Categories表CategoryName,来自Categoies表SQL语句 SELECT CategoryID,CategoryName FROM Categories数据架构:雪花式架构主键字段:CategoryID,设计供应商维度表,供货商维度表名称:Supplier数据源:Suppliers表数据字段:Suppl
15、ierID,来自Suppliers表SupplierName=CompanyNameCompanyName,来自Suppliers表SQL语句 SELECT SupplierID, CompanyName, SupplierName FROM Suppliers数据架构:星型架构主键字段:SupplierID,设计顾客维度,顾客维度表名称:Customer数据源:Customers表数据字段:CustomerID,来自Customers表CustomerName,=来自Customers表City,来自Customers表Country,来自Customers表SQL语句 SELECT Cus
16、tomerID, CustomerName,City,Region, Country FROM Suppliers数据架构:星型架构层次字段:Country|Region|City主键字段:CustomerID,设计时间维度表,时间维度表名称:Time数据源:Orders表数据字段:OrderDate,来自Orders表SQL语句 SELECT DISTINCT OrderDate FROM Suppliers层次字段:具有先天的层次结构主键字段:OrderDate,员工维度表,员工识别码,销售事实表,产品识别码,供应商识别码,订购日期,产品单价,总价,订购数量,折扣,顾客识别码,星型雪花架构
17、,多重维度架构,分析数据时并不总是以单一的维度为基准,而是以多个维度为根据, 5个维度要考虑成一个多维数据集。 例:查询春兰于2002年提供了多少金额的产品?查询张三员工在2002年销售了多少金额的手机?,SQL Sever 2000的数据转移,数据转换服务DTS(Data Transformation Service)。这是一套功能强大的数据转换工具。它可以在SQL Server与其它的OLE DB、ODBC数据源以及文字文件之间执行数据导入、导出以及转换的服务。DTS提供了:(1)DTS向导:简单的转换功能(2)DTS设计器:可以设计更复杂、功能更强的转换任务数据转换的步骤:设置数据源设置
18、数据目的地设置转换方式将数据转移任务存储为一个包执行包进行实际数据转换,选择数据源,选择目的地,数据转移过程,用SQL Server工具为Northwind新建一个数据库,命名为Northwind_DW使用DTS工具建立一个包(1)数据源: Northwind(2)目的地: Northwind_DW转移维度表,员工维度,供货商维度,产品维度(雪花型:分类表加产品表),分类表,产品维度(雪花型:分类表加产品表),产品表,顾客维度,时间维度,事实表,创建多维数据集,1)选择事实表,创建多维数据集,选择度量值,创建多维数据集,创建维表,创建多维数据集,添加计算成员,示例的数据仓库构架,基本的OLAP操作示例,