使用分析服务多维模式建立简单的分析模型
此篇使用的版本是SQL Server 2012,对应的Visual Studio Shell是2010,名称也改为SQL Data Tools。
首先,打开SQL Data Tools,点击File->New->Project…
接下来会打开新建项目窗口。这个界面可能对于很多c#开发人员再数据不过,这里可以告诉你,SQL Server BI下很多项目都是在这下面建立的,比如,数据集成项目,它主要负责BI项目中的ETL过程(数据的清洗转换和加载),还有报表服务项目,很多BI项目的报表都是通过这个项目模版实现的。自从微软.net战略之后,很多开发基本都是在Visual Studio进行的。这里就是一个具体的体现。
在左面项目模版中选择Analysis Services,然后选择Analysis Services Multidimensional and Data Mining Project。
在这里我们可以看到在最新的版本中还提供了另外一种分析服务项目模版,就是Analysis Services Tabular Project,关于这个新特性,可以参考我的另外一篇随笔:
使用SQL Server Analysis Services Tabular Model建立分析模型
Tabular Model的最终产出结果跟多维数据集差不多,只不过它更面向于业务人员和开发人员之间的用户,而本文提及的多维数据集是定位在开发人员之上的。
另外,留意一下项目类型的Data Mining,意思就是在这个项目下,也可以建立数据挖掘项目,关于如何玩转这个功能,请参考我的另外一篇随笔:
使用SQL Server Analysis Services数据挖掘的关联规则实现商品推荐功能
接下来,我们看一下项目的结构:
可以看到项目包含几个文件夹。
第一个是数据源,这里定义SSAS数据库要连接的是哪个数据源,通常来说就是数据仓库所在的位置。
第二个是数据源视图,里面定义了多维数据集需要的各种表,事实表和维度表。
Cubes里面定义数据立方体,也就是我们所说的多维数据集。
Dimensions文件夹里定义了维度,这里可以理解为维度的一个抽象,比如时间维度,在具体的一个立方体里可能对应的就是比如"开始时间"或者"结束时间"这样的泛化维度。
挖掘结构,里面是跟数据挖掘相关的。
角色,里面定义多维数据库的安全信息。
了解完以上项目里的文件夹后,下面开始一步一步建立一个简单的多维数据集。
首先,右键Data Sources文件夹,点击New Data Source…。
接下来出现数据源向导界面。
点击界面中的New新建一个连接。留意左面的Data Connections界面,里面会列出你以前用过的数据连接。
服务器名称选择本地,敲一个点就可以,然后数据库选择AdventureWorksDW2012。
AdventureWorks是微软提供的数据库示例,里面包含了业务数据库(上图中不带DW字样的)以及数据仓库示例(刚才选择的)。此外还包含很多跟SQLServer的其它示例,关于如何获取并且部署这些项目,可以参考我的这篇随笔:
微软SQLServer官方示例项目部署-数据引擎和分析服务部分
设置好连接属性后,点击下一步。
这里要面设置模拟信息。这里手动指定用户,使用你登陆机器的管理员账号就可以。当然实际生产环境中不建议这么做。
指定好模拟信息后,点击下一步。
给数据源起一个名字,点击完成。接下来就可以看到在数据源文件夹下生成了一个ds后缀的数据源文件。
下面,右键数据源视图文件夹,点击New Data Source View…。
在数据源视图中距中,在左面可以看到刚才建立的数据源连接,选中它,点击下一步。
这一步会列出数据源连接下的表和视图。
这里我们建立一个简单的多维数据集,从左面可用对象列表里依次选择FactInternetSales,DimCustomer,DimDate,DimGeography,DimProduct,DimProductCategory和DimProductSbcategory到右面的列表中,然后点击下一步。
给数据源视图起一个名字,然后点击完成。
然后在数据源视图中,可以看到刚刚选中的事实表和维度表。
可以看到在微软提供的示例中,已经定义好了表间关系。在实际的项目中,我也这些关系要定义好,尽管很多项目都不太情愿这么做,并且确实也会带来一些麻烦,但这绝对是一个好的习惯和规范。
此外,在这个界面中也可以定义命名查询,或者在表里添加一些计算列。
确认完毕数据源视图之后,开始创建多维数据集。右键Cubes文件夹,选择New Cube…。
选择第一项使用已经存在的表。
多维数据集在SQL Server 2005之后,支持正向和逆向的方式创建多维数据集。通常来说是现有数据仓库然后再有多维数据集,但是通过这个特性,可以先建立多维数据集,然后再根据多维数据集的结构反向生成数据仓库里的表。通常来说后面的方法用的比较少。
点击下一步。
选择事实表FactInternetSales,点击下一步。系统往往不能正确的事别你得事实表和维度表,所以每次到这里都建议检查一下勾选的事实表是否正确。
点击下一步。
指定多维数据集里的度量值,这些都是从事实表中来,所以像Promotion Key等这些键值字段拿来统计是没有意义的,取消掉。还有需要留意系统会在最下面加入一个Count字段,在项目中可以根据Shijiazhuang情况来考虑是否要加入这个字段。
点击下一步,开始确认多维数据集的维度。
这里暂时不需要更改任何内容,因为会在接下来的步骤中进行维度的详细设计。这里直接点击下一步。
最后,给多维数据集取一个名字,并且在预览区域中检查一下多维数据集的结构,然后点击完成结束向导。
然后就系统会自动打开多维数据集的设置界面。这里先给维度重新命名,去掉前面的Dim前缀。
接下来设置维度属性,首先双击Date.Dim,进入到维度设置界面。
在界面左侧可以看到维度已经拥有了哪些属性,右面的数据源视图中可以看到维度表中都支持哪些字段。
这里可以拖拽我们需要的字段到维度属性中,方法就是依次拖拽CalendarYear,MonthNumberOfYear和DayNumberOfMonth到维度属性列表中。再将其重命名为Date, Month和Year。
设置成友好名称,首先是为了友好并且维护方便,其次比较关键的是可以让后期的MDX写起来更舒服些。
接下来,修改Month的OrderBy属性为Key。
指定好排序依据什么排序。如果不设置,就可能出现如下的错误情况:
指定根据Key排序后,月份的排列顺序就正确了。
此外还需要设置Day的OrderBy属性同样为Key。
接下来建立维度层次。建立维度层次后,在前段分析工具就可以很方便的使用诸如年-月-日这样的层次下钻关系。
创建的方法是,首先拖拽Year到中间的Hierarchies中,会自动生成一个层次结构,然后再将Month和Day依次拖拽到新建的层次中。
时间维度创建完毕,接下来据创建产品维度。从数据源视图中拖拽到Product, SubCategory和Category到维度属性列表,然后再创建一个名为ProductHierarchy的层次结构。方法同时间维度的创建。
简单的多维数据集设置完毕后,接下来需要做的就是部署到分析服务实例上。
不过在这之前,需要确认一下部署的设置,在解决方案管理器中右键选择Properties。
在配置界面中,左边选择Deployment,然后在右边的Server和Database里设置SSAS数据库要部署到哪一个服务器以及部署之后数据库的名称叫什么。
这里我们选择部署到本地并且使用默认数据库名称。
设置完毕后点击确定关闭。
接下来同样右键项目,选择Process。
处理之前系统会检测本地的版本跟服务器的版本,如果本地的版本比服务器上的新,那么就会出现过期提示,选择是,替换服务器的版本。
部署完毕后,会出现处理界面。
对于上面的这个界面,你可能会问,为什么没有Change Settings…按钮。这个按钮,只要你把窗体的高度再让它高一些就出来了。点击这个按钮后,会出现设置更改金额面。
这里最常用的就是Dimension key errors。在实际的数据仓库操作中,很难避免会出现维度对应不上或者重复键或者缺失等情况,为了忽略这些错误,就可以进到这个界面进行相应的维度处理错误设置。这里先忽略设置直接点Cancel回到处理界面然后点Run开始处理。
在处理进度界面中,可以看到系统正在处理哪部分内容,假如处理的过程中发生了错误,也可以在这个界面中详细看到是哪里出的错。处理完毕后,点击Close关闭。
关于SSAS数据库的部署方法也很多,详细的内容可以参考我先前的一篇随笔:
在Solution Explorer中双击刚才建立的多维数据集,然后在多维数据集设置界面中选择Browser选项卡。
通过这个界面可以简单的浏览一下刚才在多维数据集里聚合的数据,比如,拖拽一个度量到中间的空白区域中,然后再拖拽几个维度,就可以对任意一个度量进行维度分解。
此外,在最新的2012版本的浏览界面中,加入了一个小按钮,就是在Excel中查看。
点击之后,会自动打开Excel,在Excel文档中会自动建立好了到这个多维数据集的连接,省去了先前在Excel中还要点击好多步骤的麻烦。
当然,在Excel连接多维数据集并且对其进行分析只是多维数据集应用其中的一个方面,关于它还有一个概念就是MDX,它就如同SQL对数据库一样,MDX主要就是查询多维数据库用的,它的结构也同样是SELECT FROM WHERE这样的结构。关于这方面的应用开发,可以参考我早先的两篇随笔:
在Silverlight下用Visifire显示多维数据集中的数据
在Silverlight下用Visifire显示多维数据集中的数据(二)
此外,在处理多维数据集的过程中,可以选择增量的方式进行处理,详细的方法可以参考我的这篇随笔:
以及,关于在多维数据集的处理上我的几点个人建议: