数据仓库实验一:数据仓库建立实验


一、实验目的

  通过本实验,掌握在Sql Server(2012 或 2008 R2以上版本)中通过 Analysis Services 建立数据仓库的方法。包括如何在 BI Development Studio 的 Analysis Services 项目中定义数据源、数据源视图、维度、属性、层次结构和多维数据集,如何查看多维数据集的维度,理解并掌握 OLAP 分析的基本过程和方法。

二、实验要求

  能够针对某个领域的分析主题,建立事实表与维度表,设计星型模型或雪花模型。查看、编辑数据仓库的基本模型(即事实表与维度表之间的关系)。针对某一系统需求,从无到有设计一 个数据仓库基本架构,要求能够按不同维度进行多维数据查询分析。

三、实验内容

  某电商的业务销售涵盖全国范围,销售商品有家用电器和通信设备等。已建有网上销售业务管理系统,可以获取每日销售信息和顾客的基本信息等。要求为该电商建立一个能够提高市场竞争能力的数据仓库 SDWS,其主题是电商销售情况分析,包括以下分析功能。
(1)分析全国各地区每年、每季度的销售金额;
(2)分析各类商品在每年、每月的销售量。
(3)分析各年龄层次的顾客购买商品的次数。
(4)分析某年某季度各地区、各类商品的销售量。
(5)分析每年各省份、各年龄层次的商品购买金额。
(6)分析各产品子类、各地区、各年龄层次的销售量。
(7)其他销售情况分析等。

四、实验步骤

  为了简化起见,数据仓库采用星型模型。

1、维表设计

  在 SSMS 中,设计如下 4 个维度表。

(1)日期维度表Dates

在这里插入图片描述
手工录入适量数据:

在这里插入图片描述
(2)顾客维度表Customers

在这里插入图片描述
手工录入适量数据:

在这里插入图片描述
(3)地点维度表Locates

在这里插入图片描述
手工录入适量数据:

在这里插入图片描述
(4)商品维度表Products

在这里插入图片描述
手工录入适量数据:

在这里插入图片描述

2、事实表设计

  设计一个销售事实表 Sales,对应的表结构如下:

在这里插入图片描述
假设该事实表中目前的数据如下所示:

在这里插入图片描述
请注意:
(1)以上的 4 个维度表和1个事实表,都设置了主键(这是必须的)。
(2)为 Sales 事实表设置外键约束,使 Date_key,Cust_key,Locate_key,Prod_key 分别参照另外的 4 个维度表中的主键。

可以新建一个查询,为 Sales 表增加 4 个外键约束,如下:

alter table Sales add constraint fk_1 foreign key(Date_key) references Dates(Date_key)
alter table Sales add constraint fk_2 foreign key(Cust_key) references Customers(Cust_key)
alter table Sales add constraint fk_3 foreign key(Locate_key) references Locates(Locate_key)
alter table Sales add constraint fk_4 foreign key(Prod_key) references Products(Prod_key)

在这里插入图片描述
  在 SSMS 中建好的数据库以及其中的数据表的情况如下所示:

在这里插入图片描述

3、新建多维分析和挖掘项目

  在 Sql Server 2012 的 Data Tools 下(Sql Server 2008 R2 的 BI…),新建 Analysis Services 多维分析和挖掘项目,项目名称自拟。然后分别定义数据源、数据源视图、定义维表、定义多维数据集、部署项目、浏览已部署的多维数据集。

在这里插入图片描述
(1)定义数据源

打开 SSDT,创建 SSAS 项目,连接数据源。

在这里插入图片描述
右键 “数据源” 点击 “新建数据源”。服务器名填入 LocalHost,再选择数据库。

在这里插入图片描述
选择刚创建的数据连接 “LocalHost.SDWS”。

在这里插入图片描述
下一步,选择 “使用服务账户”。

在这里插入图片描述
最后,完成数据源定义。

在这里插入图片描述
(2)定义数据源视图

右键 “数据源视图”,点击 “新建数据源视图”,选择数据源 SDWS。

在这里插入图片描述
点击左右箭头即可选中对应表格,右边为选择表格,全部选中即可。

在这里插入图片描述
在这里插入图片描述
数据源视图就创建好了。

在这里插入图片描述
(3)定义维表

右键维度,新建维表。

在这里插入图片描述
在这里插入图片描述
“可用属性” 要全部勾选。

在这里插入图片描述
单机 “完成”,保存维度。
在这里插入图片描述
Dates、Locates、Products维表的创建方法一样。

(4)定义多维数据集

右键 “多维数据集”,新建多维数据集。

在这里插入图片描述
选择度量表(事实表)为 Sales,选择度量值。

在这里插入图片描述
在这里插入图片描述
维度表要全选。

在这里插入图片描述
单机 “完成”,保存多维数据集。

在这里插入图片描述
设置完后右击项目名称点击 “部署”,即可部署成功。最后就出现了星型模型。

在这里插入图片描述
  关于维度的层次结构的定义、维度的处理,以及多维数据集的部署。最终完成后的界面参照如下:(基于SQLServer2012版本)

数据集部署成功后:

在这里插入图片描述
在这里插入图片描述
Customers维度配置:

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
Dates维度配置:

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
Locates维度配置:

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
Products维度配置:

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
多维数据集浏览时,以下是参照界面:

在这里插入图片描述
在这里插入图片描述

五、实验结果分析

(1)数据源定义:通过定义数据源,实现了与实际数据源的连接,确保了数据仓库能够获取到所需的源数据进行分析处理。
(2)数据源视图定义:通过定义数据源视图,实现了对数据源的抽象和简化,使得在多维分析项目中能够更方便地使用数据。
(3)维表定义:日期、顾客、地点和商品等维度表的创建和定义,为多维分析提供了关键维度信息,使得可以按照不同维度进行数据查询和分析。
(4)多维数据集定义:通过定义多维数据集,建立了事实表与维度表之间的关联,实现了多维数据的存储和分析,满足了电商销售情况分析的各项需求。
(5)数据集部署成功:成功部署了多维数据集项目,确保了数据仓库的数据可用性和准确性,使得可以进行后续的多维分析操作。
(6)维度配置和多维数据集浏览:通过对不同维度的配置和多维数据集的浏览,可以实现对电商销售情况的全面分析,包括地区销售金额、商品销售量、顾客购买行为等多方面的详细分析。

  总的来说,实验结果表明成功建立了针对电商销售情况分析的数据仓库 SDWS,并实现了多维分析的基本功能。通过对数据进行多维分析,可以深入挖掘数据背后的规律和趋势,为电商企业提供决策支持和市场竞争优势。

六、实验总结体会

  数据仓库的设计过程需要充分理解业务需求和数据特点,结合具体业务场景进行建模。在本实验中,针对电商销售情况分析的需求,采用了星型模型来设计数据仓库的维度表和事实表,这样的设计能够简洁清晰地反映业务事件的关联关系。
  在数据仓库的设计中,维度表的设计尤为重要。日期、顾客、地点和商品等维度在电商销售分析中扮演着关键的角色,通过手工录入适量数据并设置主键,为多维分析提供了基础数据支持。事实表的设计需要与维度表进行关联,并且需要考虑外键约束的设置,以保证数据的完整性和准确性。在本实验中,销售事实表Sales与日期、顾客、地点和商品等维度表建立了外键约束,确保了数据的关联性。
  在实际操作中,使用 SQL Server 提供的工具(如 SSMS 和 Data Tools)进行数据仓库的建模和多维分析项目的开发,能够有效提高效率并简化操作流程。通过定义数据源、数据源视图、维表、多维数据集等,完成了数据仓库的搭建和多维分析项目的部署。
  最终,通过多维数据集的浏览和配置,可以对电商销售情况进行多维分析,满足了实验中提出的各项分析需求,包括地区销售金额分析、商品销售量分析、顾客购买行为分析等多个方面的需求。
  总的来说,本次实验使我深入了解了数据仓库的建立方法和多维分析的基本过程,对于应用 SQL Server 进行数据仓库建模和多维分析项目开发有了更深入的理解和实践经验。这对我今后在类似领域的工作和研究中将会起到积极的指导和帮助作用。

  • 25
    点赞
  • 30
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
根据提供的引用内容,我们可以了解到该仓库管理系统是基于JSP开发的,因此可以使用Java语言进行数据结构设计。以下是一个简单的Java实验仓库管理系统数据结构设计: 1. 物品类Item ```java public class Item { private int id; // 物品编号 private String name; // 物品名称 private int quantity; // 物品数量 // 构造函数 public Item(int id, String name, int quantity) { this.id = id; this.name = name; this.quantity = quantity; } // getter和setter方法 public int getId() { return id; } public void setId(int id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } public int getQuantity() { return quantity; } public void setQuantity(int quantity) { this.quantity = quantity; } } ``` 2. 仓库类Warehouse ```java import java.util.ArrayList; public class Warehouse { private ArrayList<Item> itemList; // 物品列表 // 构造函数 public Warehouse() { itemList = new ArrayList<Item>(); } // 添加物品 public void addItem(Item item) { itemList.add(item); } // 删除物品 public void removeItem(Item item) { itemList.remove(item); } // 根据编号查找物品 public Item findItemById(int id) { for (Item item : itemList) { if (item.getId() == id) { return item; } } return null; } // 根据名称查找物品 public ArrayList<Item> findItemByName(String name) { ArrayList<Item> result = new ArrayList<Item>(); for (Item item : itemList) { if (item.getName().equals(name)) { result.add(item); } } return result; } // 获取所有物品 public ArrayList<Item> getAllItems() { return itemList; } } ``` 3. 入库类Inbound ```java import java.util.Date; public class Inbound { private int id; // 入库编号 private Item item; // 入库物品 private int quantity; // 入库数量 private Date date; // 入库日期 // 构造函数 public Inbound(int id, Item item, int quantity, Date date) { this.id = id; this.item = item; this.quantity = quantity; this.date = date; } // getter和setter方法 public int getId() { return id; } public void setId(int id) { this.id = id; } public Item getItem() { return item; } public void setItem(Item item) { this.item = item; } public int getQuantity() { return quantity; } public void setQuantity(int quantity) { this.quantity = quantity; } public Date getDate() { return date; } public void setDate(Date date) { this.date = date; } } ``` 4. 出库类Outbound ```java import java.util.Date; public class Outbound { private int id; // 出库编号 private Item item; // 出库物品 private int quantity; // 出库数量 private Date date; // 出库日期 // 构造函数 public Outbound(int id, Item item, int quantity, Date date) { this.id = id; this.item = item; this.quantity = quantity; this.date = date; } // getter和setter方法 public int getId() { return id; } public void setId(int id) { this.id = id; } public Item getItem() { return item; } public void setItem(Item item) { this.item = item; } public int getQuantity() { return quantity; } public void setQuantity(int quantity) { this.quantity = quantity; } public Date getDate() { return date; } public void setDate(Date date) { this.date = date; } } ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Francek Chen

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值