基于foodmart数据库的商业智能系统摘要:FoodMart数据库是SQLServer以前版本所带的示例数据库,它模拟了一家大型的食品连锁店的经营业务所产生的数据。其商业数据保存在一个Access格式的数据库中,其中包括了客户管理数据、销售数据、分销数据和库存数据等。随着业务量的增加,这个食品连锁店的老板迫切需要多方位地掌握其经营状况,而传统的报表形式和数据处理方式已经不能满足这一要求,因此在保留历史数据的基础上构建商业智能应用已经迫在眉睫。下面就描述满足这一商务需求的技术实现过程。1.设计和创建数据仓库FoodMart数据库涉及到公司经营的各个方面,包括产品、库存、人事、客户和销售等。一个真正的商业智能应用应该对这些业务需求进行全面地考虑。本章截取这些需求中的销售部分构建商业智能。2.原始业务数据分析打开配套文件中附带的foodmart.mdb文件,可以看到如图2-1所示的24张表,虽然以前在设计这个数据库的时候加入了数据仓库的某些特点,但由于它本身源于以前的系统,也存储了全部的业务数据,因此这里作为初学可以把它理解为福马特商店的原始数据。在这个数据库中,包含了福马特商店日常经营业务的数据,如人事管理中的员工信息存储在employee表中,员工所属部门信息存储在department表中,职务信息则存储在position表中,库存管理业务中的仓库类型存储在warehouse_class表中,具体的仓库存储在warehouse中。图1福马特商店的业务数据3.设计数据仓库逻辑模型福马特市场部的商务需求是要对1998年进行的所有销售业务数据进行多角度分析,以便市场分析人员能在查询数据库时获取快速的响应,高层管理人员也能从总体上把握影响本年度销售的因素。这需要利用存储在公司业务数据库中的数据,建立数据仓库,进而创建可用于分析的多维数据结构。如前所述,这里只着眼于销售方面的数据,因而把与销售相关的表提炼出来进行分析。在foodmart.mdb数据库中,销售业务的数据和时间、促销手段、产品和店铺等都有关系,它们的关系体现在表与表之间的逻辑关系上。要从业务数据出发设计数据仓库的结构,必须明确业务数据本身的结构,而业务数据的关系一般是基于关系数据库设计的范式。这里希望用雪花形结构来构建福马特商店的销售数据仓库,逻辑结构设计图如图2所示。图2销售数据仓库雪花形结构设计图在数据仓库的逻辑结构中,数据表可以划分为两类:一类是事实数据表;另一类是维度数据表。在实际设计的时候,通常需要根据需求情况重新建立与原始数据不同的表结构。这主要是由于传统业务的数据库是用来进行事务处理的(即OLTP),而数据仓库则是用来进行分析处理的(即OLAP),用途的不同决定了其结构的不同。这一点在以后复杂的数据仓库设计中会通过示例体现出来。4.创建foodmartsaleDW数据仓库数据仓库也是一种数据库,其管理同样是通过数据库管理系统(DBMS)来进行的。因此数据仓库可以像普通数据库一样进行创建、修改和删除。当数据仓库的逻辑结构设计完后,就可以创建物理数据仓库了。这时可以在SQLServerManagementStudio中按照一般的建立数据库的方法建立一个名为“foodmartsaleDW”的数据库,然后把这里设计的表创建好,数据类型依据原始数据库中的各个表和字段的数据类型设置。但由于这里数据仓库的表结构与原始数据库中的表结构基本一致,因此,创建foodmartsaleDW数据仓库的物理结构过程也可以在ETL阶段完成。5.设计和使用ETL数据仓库的设计可以说是数据分析和商业智能的最基础的工作。良好的数据仓库结构设计是以后工作能顺利进行的保证。而数据仓库中的数据则一般要经过“提取-转换-加载”的过程从原始业务数据中获取,这就是ETL过程。这里的任务就是要把数据从foodmart.mdb数据库中装载到foodmartsaleDW数据仓库中。需要使用到SQLServerIntegrationServices服务,即SSIS,其操作步骤如下:(1)打开BusinessIntelligenceDevelopmentStudio,选择【文件】→【新建】→【项目】命令,弹出“新建项目”对话框,展开“商业智能项目”,在“模板”窗格中,单击“IntegrationServices项目”,把项目命名为“foodmartsaleETL”,如图3所示。图3创建“foodmartsaleETL”项目这时会在BIStudio环境中打开用于设计SSIS的各种工具和窗口,数据提取、转换和加载的操作都在这个界面下进行。(2)选择【项目】→【SSIS导入和导出向导】命令,这时会弹出SSIS导入和导出向导的欢迎界面,单击【下一步】按钮。(3)在“选择数据源”窗口中的“数据源”下拉列表框中选择Access数据源选项,如图4所示。然后在路径选择中选择此项目文件夹中的foodmart2000.mdb文件。图4选择foodmart2000.mdb数据源(4)在随即弹出的窗口中选择数据的导出目标,这里选择“SQLNativeClient”,如图5所示。设置好服务器及其登录信息后,选择foodmartsaleDW数据仓库作为目标数据库,如果在以前的步骤中没有创建此数据库,可以在此窗口中单击【新建】按钮,在弹出的“创建数据库”窗口中创建此数据库,单击【下一步】按钮继续。图5选择数据仓库目标(5)此时将弹出如图6所示的窗口,通过这个窗口可以选择需要复制的是数据源的多个表和视图,还是自定义的查询,这里选择“复制一个或多个表或视图的数据”单选按钮;单击【下一步】按钮继续。图6指定复制类型(6)这时会让用户选择源表和源视图,如图7所示。按照前面对数据仓库的设计,这里选择原始表中的time_by_day、promotion、product、product_class、customer、store和sales_fact_1998表作为需要输入的表。在图7的界面中,还可以对数据导入的目标进行定制,可以对映射方式进行编辑,甚至可以自己写“CREATETABLE”语句作为复制的目标表。这些改变都可以体现在数据仓库的物理结构中。图7选择源表和源视图并定制映射方式这里不对映射及其目标进行变更,保持默认的状态,使生成的数据仓库的物理模型完全符合前面对数据仓库的逻辑模型的设计。(7)以上操作完成后,单击【下一步】按钮,系统将会把前面的操作列表并要求用户确认,并提示将会把包以“Package1.dtsx”作为文件名保存在项目文件夹下面,而且不会立即执行。确认无误后单击【完成】按钮。(8)在“解决方案资源管理器”中展开“SSIS包”文件夹,在Package1.dtsx上单击鼠标右键,在弹出的快捷菜单中选择【设为启动对象】命令,如图8所示。(9)单击工具条上的按钮运行这个工程,可以发现在SSIS设计界面的“控制流”和“数据流”等选项卡内都有对象在活动,这是系统正在把数据从foodmart2000.mdb数据库中按照前面所确定的规则装载入foodmartsaleDW数据仓库中。(10)数据装载过程完成后,切换到SQLServerManagementStudio,展开foodmartsaleDW数据仓库可以发现,已经按照设计要求建立好了数据仓库,并且仓库中已经存储了业务数据,如图9所示。图8设置Package1.dtsx为启动对象图9完成数据装载后的foodmartsaleDW数据仓库6.创建OLAP数据立方数据立方的创建和管理需要用到SQLServer2005中BusinessIntelligenceDevelopmentStudio的AnalysisServices组件,即SSAS。这里将创建用于福马特商店销售分析的数据立方,首先要创建一个SSAS的项目。打开BusinessIntelligenceDevelopmentStudio,选择【文件】→【新建】→【项目】命令,或按【Ctrl+Shift+N】组合键以显示“新建项目”对话框。在“新建项目”对话框中,从“项目类型”选项组中选择“商业智能项目”。从“VisualStudio已安装的模板”选项组中选择“AnalysisServices项目”。在“名称”文本框中输入“foodmartsaleAS”作为项目名称,如图10所示。单击【确定】按钮进入SSAS的工作界面。图10建立foodmartsaleAS项目打开“解决方案资源管理器”,可以看到数据源、数据源视图、多维数据集、维度和挖掘结构等8个文件夹对象,建立和管理数据立方也是主要针对这8个对象进行的。7.定义数据源这是创建数据立方的第1步。在“解决方案资源管理器”中的“数据源”文件夹上单击鼠标右键,在弹出的快捷菜单中选择【新建数据源】命令,如图2-11所示。图11新建数据源在弹出的“选择如何定义连接”窗口中选择“基于现有连接或新连接创建数据源”单选按钮,在“数据连接”列表框中选择foodmartsaleDW数据源,如果没有此连接,可以单击【新建】按钮,定义指向foodmartsaleDW数据仓库的连接。设置完成后的页面如图12所示。由于向导下面的操作是没有必要的,所以这里可以直接单击【完成】按钮结束数据源向导。图12定义数据连接8.定义数据源视图为了对多维数据集进行这些高级操作,这一步定义数据源视图。可以在“数据源视图”文件夹对象上单击鼠标右键,在弹出的快捷菜单中选择【新建数据源视图】命令,然后在弹出的“数据源视图向导”窗口中选择foodmartsaleDW选项作为关系数据源,单击【下一步】按钮。这时会弹出如图13所示的“名称匹配”窗口,其原因是在前面SSIS的数据装载操作中没有为数据仓库中的表设置主键及其关系,SSAS试图在匹配的列上创建逻辑关系,可以选择“与主键同名”单选按钮,单击【下一步】按钮继续。图13设置名称匹配进入“选择表和视图”窗口,如图14所示。可以从选定的数据源提供的对象列表中选择表和视图。以上操作完成后,单击【下一步】按钮,为此数据源视图命名为Vfoodmartsale,再单击【完成】按钮结束此向导。图14选择表和视图同样也是由于数据源中的表没有设置主键的原因,现在打开的数据源视图上的表都是独立的,相互之间没有关系,还需要我们设置各个表的主键及其关系才能成为可用的视图。一般来说,事实表是没有主键的,而维度表都有主键,且每一个维度表的主键都是事实表的外键,因而,需要为每一个维度表设置主键,如图15所示,在维度表中选择应该为主键的字段,然后单击鼠标右键,在弹出的快捷菜单中选择【设置逻辑主键】命令,即可设置维度表的主键。图15设置维度表的主键对每一个维度表设置好主键后,应该设置维度表和事实表之间的关系,方法是把事实表中的外键作为源,拖动到维度表中的相关字段,这时会弹出“创建关系”窗口,如图16所示。需要注意的是一定要把外键表作为源,主键表作为目标,如果方向错了,可以单击图16的【反向】按钮以保证其关系符合业务数据中的逻辑关系。图2-16“创建关系”对话框按照以上的步骤,设置好维度表和事实表之间的关系后,数据源视图将会如图17所示。图17设置好表间关系后的数据源视图8.生成多维数据集这一步在上面创建的数据源视图的基础上生成多维数据集,方法如下:(1)在“解决方案资源管理器”中用鼠标右键单击“多维数据集”文件夹对象,在弹出的快捷菜单中选择【新建多维数据集】命令。(2)在弹出的“多维数据集向导”欢迎界面中单击【下一步】按钮进入“选择生成方法”窗口,如图18所示。在此窗口中选择“使用数据源生成多维数据集”单选按钮,并且确认选中了“自动生成”复选框,并在下拉列表框中选择“创建属性和层次结构”选项,以便向导能为维度表中的大多数列创建属性,并尝试建立包含多级的层次结构。图18“选择生成方法”窗口(3)单击【下一步】按钮,选择前面创建的数据源视图来为多维数据集提供数据。再单击【下一步】按钮,向导将扫描关系架构,以识别事实表和维度表。识别完成后,单击【下一步】按钮将会弹出如图19所示的“标识事实数据表和维度表”窗口。选择“time_by