向导与设计器
SQL Server 2005分析服务对于所有的关键对象都提供了向导和设计器。向导被用来完成任何对象的初始创建,在分析服务2005它们已经足够灵活,因此大多数情况下你不需要随后再对对象作更多的调整。当你创建了对象后,使用定制的设计器可以用来对对象的细节进行优化。当要进行数据挖掘时,这里有两个向导和设计器是最常使用的:数据源视图向导和它的设计器,还有数据挖掘向导及其设计器。
在分析服务2000中,当要访问关系型数据时你需要指定一个数据源然后选择你想查看的表。如果相关数据源的数据视图并不符合你建模的需要,你必须通过创建格式符合你的需要的新表或视图来修改数据源。
分析服务2005提供了一个新的数据源视图(DSV)对象,它在你的数据源上面提供了一个抽象层。在这个抽象层中你可以指定数据源中哪些表是有用的,以及所有表,列,表关键字和关系(如果数据源中没有指定的话)的名称和注释。另外你也可以创建虚拟列,它被称为命名计算,和源于现存表的虚拟视图,它被称为命名查询。当你在分析服务中创建并且处理挖掘模型时,DSV的表现方式也就是虚拟列和视图,亦可被用作数据源。
那么,为什么这很重要呢?设想你正在对一个调查的反馈信息进行挖掘与分析,反馈值的范围从1一直到4,其中1代表“非常不满意”而4代表“非常满意”。作为分析的目的,你关心的是受访者到底是满意还是不满意。此时创建命名计算的功能允许你创建一个新的变量。在这个案例中,你只需要简单的右键单击在DSV设计器中的表并选择“创建命名计算”就可以完成它。在命名计算的对话框中你需要输入列的名字 “满意度”,然后输入一个含有上面所提到的代表满意度的值的表达式,如下所示:
QUOTE:
CASE SatisfactionLevel WHEN 3 THEN 'Yes'
WHEN 4 THEN 'Yes'
ELSE 'No'
END
一旦此列被添加到表中,它会和所有其它列一样显示出来。你甚至可以使用在DSV中展开的数据浏览工具去查看列的分布,如图表1所示。另外一个重要的方面是DSV允许你从异构数据源中选择表,这样就可在分布式数据环境下建模。
创建和编辑模型
新的数据挖掘向导可以让你在很简单的几个步骤中就创建出复杂的模型。这个向导对你的数据进行采样并发现如何建立适当的模型是基于你所选择算法的能力的。另外一个在此向导中的新功能让你能够轻易的创建实现任意嵌套的表。嵌套表允许你合并稀疏数据,比如事务性数据,连带着维度数据,比如人口统计数据。举个例子,你现在可以将人口数量对产品销售的影响和相互作用进行建模:哪些产品销售数据是对哪些人口统计数据的反映。在一个模型中的多表嵌套能力可以让我们进行更高级的建模。举个例子,你可以确认哪个剪辑对象与哪个电影相关联,甚至九月的销售怎样用来预测十月的销售。
当你运行完向导后,展现在你面前的就是数据挖掘设计器。这个设计器会让你感觉每一列的设置都触动了你的心弦(当然更重要的是,满足了你的建模需要),同时它也为另一个新的数据挖掘特性——挖掘结构的出场提供了首次展示的舞台。
挖掘结构是一组代表业务问题范围的列,同时也是一组将这些列应用到解决问题的算法中的挖掘模型。一个结构中的每个模型都指定了要使用哪个算法和参数以及在模型中每一列的使用方式。举个例子,你可以创建一个结构来检查年龄对消费者决策的扰动。你可以将年龄列多次添加到结构中;也可能你已经将它作为一个连续的列添加了一次,而另一次将它作为一个离散的列,该列自动的根据数据的分布将年龄放入了离散范围。你的结构随后可以有两个模型,一个使用连续的年龄而另一使用被放入离散范围的年龄。在结构中对模型的处理以使用单一数据读取的并行的方式出现。一旦模型已经处理完毕,你可以用它们来比较出不同的配置是如何对你的问题造成影响的。
浏览和查询模型
SQL Server 2005的数据挖掘提供了12个定制的可视化模型用来理解数据所使用的样式。它们每个看上去都是一个可以被嵌入到自定义的数据挖掘应用程序中的Windows®窗体控件。为了对你的模型进行比较并且确定一个模型的整体质量,使用了四个不同类型的精确性图表,它们包括:a lift chart, a profit chart, a confusion matrix, and an actual-versus-predicted plot
其中也包含了一个Microsoft® Access类型的查询生成器,它为生成用来对挖掘模型执行预测的DMX查询提供了一个图形化的界面。这个查询生成器允许通过拖拽的方式从你的模型或者源数据中选择列,另外它还提供了一个全面的列表,其中包括了所有应用到模型算法的函数和所有的函数原型(查看“DMX”工具条)。
该查询生成器使用了SHAPE运算符来自动处理在模型需要嵌套表输入时生成的查询。另外,你可以对查询生成器进行设置来产生“单独的”查询,在这样的查询中直接指定了输入数据。这样就允许你为一个预测查询来指定正确的输入,因而你可以获得这样的体验——直接看到更改输入对预测输出造成的影响。
对模型的浏览和查询可以在BI Development Studio或者新集成的SQL Management Studio中创建,其中后者还包含了一个和查询分析器很相似的DMX查询编辑器,以及一个上面带有许多常用的DMX查询窗体模板的模板浏览器。
在SQL Server数据挖掘的表面下面的是一个强大并且灵活的服务器。在SQL Server小组,我也是其中的一个成员,对待数据挖掘不是从典型的分析人员的观点上去看,而是从一个开发者的角度去看。我们问自己,应当做些什么来让数据挖掘对于开发人员来讲是可以理解的,以及开发人员如何才能利用数据挖掘的功能并将这种功能嵌入到他们的应用程序中。答案就是来创建一个完全可扩展的基于服务器的模型,它关注的是强大的算法,一个强大的API,以及深入的集成。
DMX扩展
SQL Server中的所有数据挖掘API的核心是DMX语言,它在OLE DB for Data Mining中进行了专门的描述,再加上SQL Server 2005数据挖掘的语言增强。在“DMX”工具条中的简单的DMX示例示范了如何获得对所有消费者的扰动概率。如果你只对最有可能的消费者进行扰动,DMX支持使用TOP 和 ORDER BY关键字,这样你就可以提交查询,代码如下所示:
QUOTE:
SELECT TOP 25 t.CustomerID
FROM CustomerChurnModel
NATURAL PREDICTION JOIN
OPENQUERY('CustomerDataSource', 'SELECT * FROM Customers')
ORDER BY PredictProbability([Churned],True) DESC
以前复杂的DMX语句现在可以通过扩展和超负荷使用函数变得更简单;相应的示例是一个用来取回一个特定州概率的函数,正如刚刚展示的那样。使用常规的查询来显示内容信息的能力让你能够对于在模型中了解到的每一位的信息透过源数据来展示支持它的事实。例如,“在这个群集中出现了什么情况?”或者“支持这条规则的是什么情况?”
在DMX中的最大改变之一是一套你可以用在一条PREDICTION JOIN语句中的扩展的源数据。在SQL Server 2000中,你唯一的选择是OPENROWSET或者一个单独的SELECT查询,但是在SQL Server 2005中你将能够使用OPENQUERY对命名的数据源进行预测。DMX语句也允许你来预知另一个预测的输出,如此就允许将模型串联或者允许你来在同一个查询中对多个模型执行预测。MDX语句允许你对OLAP立方体直接执行预测,而一个分析用XML(XMLA)行集参数则允许你在服务器上对在客户机上的数据执行预测(无论服务器是否拥有直接访问目标数据源的能力)。
数据挖掘APIs
由于分析服务现在是一个本地的XMLA服务器,因而一个数据挖掘模型可以立刻变成一个可以从运行任何平台的任何设备通过使用标准的SOAP协议来访问的一个Web服务。除了根级别XMLA API以外,在SQL Server 2005中的数据挖掘有两个新的API:用于客户端应用程序的ADOMD.NET以及用于管理和设计应用程序的分析管理对象(AMO)。当然,标准的OLE DB以及源自OLE DB的接口(ADO, ADO.NET)仍然可以使用。
ADOMD.NET是用作数据挖掘的被管理客户端接口。它使用了标准的ADO.NET对象(比如连接,命令,数据读取器,等等),加上一个完整的对象模型用来允许对数据挖掘模型的访问。模型和列的集合让你可以浏览模型的元数据,而MiningContentNode对象让你可以通过编程访问一个模型已知的内容。
AMO提供了一整套的用来创建和维护数据挖掘对象的对象。其中它涉及到了模型安全性,处理,以及备份和还原。
管理存储过程和用户定义的函数
SQL Server 2005分析服务让你可以导入管理组件到服务器中。一个对象模型,暂时被称为“服务器ADOMD”,几乎等同于ADOMD.NET。它允许你创建存储过程和用户定义的函数(UDFs),直接访问在服务器上的某个模型的内容。当模型中包含了潜在的可能成千甚至成百万的规则而你的客户端只需要其中的很少的一部份时,它的价值是无法估量的。实际上,数据挖掘查看器自己调用存储过程来减少客户端所需提供信息的数量。在一个用户定义的函数中使用内容对象模型让你可以做任何感兴趣的事,比如和结果一同返回预测的理由。举个例子,你可能有一个如下所示的函数:
QUOTE:
Public Function GetNodeDescription(ByVal strNodeId As String) As String
Return Context.CurrentMiningModel.GetNodeFromUniqueName( _
strNodeId).Description
End Function
然后你可以象这样从DMX中调用它:
QUOTE:
SELECT Predict([Churn]),
assembly.namespace.class.GetNodeDescription(PredictNodeId([Churn]))
as Description
FROM CustomerChurnModel PREDICTION JOIN
<input rowset>
除了你自己的用户定义函数,标准的Visual Basic for Applications (VBA) 和 Excel函数也可以作为用户定义函数来调用。例如,你可以使用Excel VBA Log函数来获取记录的概率,具体如下所示:
QUOTE:
SELECT Excel!Log(PredictProbability([Churn],True))
FROM CustomerChurnModel PREDICTION JOIN
<input rowset>
数据挖掘应用程序也可利用在SQL Server 2005中提供的Business Intelligence平台的余下的一些特性。OLAP, SSIS和报表服务都以一种有意义的方式集成到了数据挖掘中。
在SQL Server 2000的时代,数据挖掘模型可以直接构建在OLAP立方体之上。不过,与以前一个模型总是要使用在立方体中的所有数据相对的,现在此类模型可以构建在立方体的任意的部份之上。OLAP挖掘模型是通过首先选择一个维度以及一个你想对它的成员进行分析的级别,比如消费者,然后选择作为你的挖掘模型的列的属性和与这些成员相关的度量值的方式来构建的。相关的维度,比如一个产品维度,可被选作嵌套表并且可以被应用到每一个的独立部份。这一能力允许你可以构建能够回答象“在品牌X和在四月份卖给住在华盛顿州30岁之下男性顾客的产品Y之间的关系是什么?”这样问题的模型。
一旦一个OLAP模型已经成熟,该模型的内容可以通过一个数据挖掘维度应用回立方体。这种类型的维度允许你通过根据数据挖掘算法所发现的样式将立方体进行切分。例如,你可以创建一个聚簇的模型,将你的立方体分割成自然组,并且随后在一段时间内使用标准的立方体浏览工具来跟踪跨越这些组的度量值。
在SQL Server 2005中的SSIS有着传统的任务环境以及一个新的数据管道环境。数据挖掘的培养和预测任务可以与作为输入到或者输出于数据挖掘引擎的SSIS环境变量相结合。数据挖掘转换直接在数据管道之上工作,它允许你要执行动作的整个的范围从简单的用有预见性的结果来增强数据到允许在培养或者预测之前发生的复杂数据转换。通过让你的数据直接在它的管道之上工作,你就不再需要再通过将其放到一个临时的结果集中来提供数据了。
最终,数据挖掘的结果可以通过与报表服务的集成来直接部署。任何数据挖掘查询可以作为一个报表提供出来,并且一个数据挖掘查询可以被用作一个报表分布的源。智能报表可以显示我已经描述过的消费者扰动的结果。