SQL Server Analysis Services 数据挖掘

假如你有一个购物类的网站,那么你如何给你的客户来推荐产品呢?这个功能在很多

电商类网站都有,那么,通过SQL Server Analysis Services的数据挖掘功能,你也可以轻松的来构建类似的功能。

将分为三个部分来演示如何实现这个功能。

  1. 构建挖掘模型
  2. 为挖掘模型编写服务接口
  3. 开发简单的前端应用


此篇介绍如何使用SQL Server Analysis Services基于此问题来构建简单的挖掘模型。

关于数据挖掘,简单的就是说从海量数据中发现信息的一个过程。如果说商业智能分为三个层次:告诉你发生了什么,为什么会发生,将来会发生什么。那 么,数据挖掘绝对算是商业智能中最高的一个层次,告诉你将来会发生什么,也就是预测。而预测的基础就是根据海量的历史数据,结合一定的算法,以概率为基 础,告诉你一条新数据某条属性的趋势。

数据挖掘的模型很多,贝叶斯,时间序列,关联规则等都是常用的模型,根据不同的问题特征可以套用不同的模型算法。比如此篇提到的商品推荐,就是典型的适合用关联规则来解决。在数据挖掘中典型的啤酒和尿布的问题,大体上就是基于这个方法。

创建挖掘模型项目

笔者注:如果你是一个c#或者相关的应用程序开发人员,以下的内容看起来可能会有些陌生,笔者建议此部分跟着文章中介绍的步骤来做就可以,相关细节我会尽量以开发人员的角度去解释。后面有适合开发人员逻辑的一些介绍可以帮助你更好的理解数据挖掘项目。

打开SQL Server Data Tools,点击File->New->Project

选择项目类型:

Analysis Services Multidimensional and Data Mining Models

为项目添加数据源。

如图,在Solution Explorer中,右键单击Data Sources,选择New Data Source:

这里用到的数据源是微软官方示例库Adventure Works DW 2012,是Data Warehouse的示例库。

关于如何获取并且部署这些示例库,可以参考此篇下面的文章列表。

然后,添加数据源视图,在Solution Explorer中右键Data Source Views,选择New Data Source View。

在Relational data source中,选择刚才建立的数据源名称:

点击下一步。

这个界面中选择用到的表。根据微软官方教程以及示例数据,只选择vAssocSeqLineItems和vAssocSeqOrders两个视图就可以。

如果要用关联规则来解决问题,那么你的数据就要符合一定的结构。而具体的结构要求就可以参考这两个视图。

vAssocSeqOrders是订单主表,里面记录了基本的订单信息,一条订单一行记录。

vAssocSeqLineItems是订单相信信息表,里面记录了每条订单里都包含了哪些商品。

两张表逻辑上通过OrderNumber关联,我们关注的字段是Model,这里面记录了商品名称。

选择好用到的表之后,可以直接点击完成结束数据源视图的设置。

这两个视图是没有逻辑关系的,但这里需要指定一下。

方法就是在数据源视图里,拖拽vAssocSeqLineItems里的OrderNumber字段到vAssocSeqOrders的
OrderNumber字段。完成后可以看到一个从vAssocSeqLineItems视图指向vAssocSeqOrders的箭头。

到这里数据源视图设置完毕。

下面建立基于关联规则的挖掘模型。在Solution Explorer中,右键单击Mining Structures,选择New Mining Structure。

第一个界面,使用已经存在的关系数据库或者数据仓库,所以直接下一步。

然后在这个界面中指定挖掘结构要采用的挖掘模型。点击下拉框,选择Microsoft Association Rules,也就是关联规则。点下一步。

这里指定数据源视图,默认选择刚才建立的就可以,直接点击下一步。

这一步比较关键,理解起来也比较绕。这里主要是要指定事例表和嵌套表。在这里,记录订单基本信息的是事例表,而记录订单里有哪些产品的表为嵌套表。

在这个模型当中,我们要清楚的是,我们的事例单位,是一条条订单,而不是订单里的一个个产品。如果每次在建立模型的过程中无法区分哪个应该是事例表哪个应该是嵌套表的话,那么可以回头来先想下这个问题。

指定完毕事例表和嵌套表,点击下一步。

这里指定在分析模型中如何使用这些列。首先指定键列为OrderNumber和Model,然后再把Model列指定为输入列和可预测列。因为这里就是要根据已经选择的商品来预测客户将会购买什么商品。

按如图所示的方法指定完毕后,点击下一步。

选择列的类型,这里根据系统自动判断的类型选择就可以,直接点击下一步。

然后这个界面中主要是用来指定测试数据集的多少。默认是30%,也就是在数据中,保留30%的数据来验证建立好的挖掘模型的正确性。此篇不对其做过详细的介绍,所以先设置成0,然后直接点击Finish完成模型设置向导。

可以看到建立好的挖掘结构。

模型建立好了之后,需要将其部署到一个分析服务的实例上去,然后将其处理。

这里直接右键点击Solution Explorer根目录的项目名称,然后右键菜单中选择Process。

系统会提示服务器内容已过期,VS的判断是只要你的Source Code比目标服务器的版本新,那么都会报这个out of date错误,即使目标服务器上根本没有这个库。所以这里选择Yes。

第一次 部署可能会弹出这个提示框让你指定可以方位数据源链接的账户,这里通常直接敲本地管理员的账户就 ok。

出现这个界面,直接点击Run处理挖掘模型。

然后系统会自动去做很多工作,这里的细节你可以不去关心。(当然在其不报Error的情况下)

处理完成之后,挖掘模型就建立好了。后续的实现商品推荐的功能,就是基于此模型来实现的。

这里再介绍一个概念,叫DMX,也许你从没听说过,但你一定知道SQL,简单的来说SQL就是用来查表得,那么DMX就是用来查数据挖掘模型的。

它跟SQL一样,也是SELECT FROM的结构。具体的语法信息大家有兴趣的可以去参考微软的SQL Server联机数据库。在此篇中,下面会给出一个简单的DMX查询,大家只要基本知道它是干什么的就可以了。

DAX示例查询:

SELECT FLATTENED

PredictAssociation([Association].[v Assoc Seq Line Items],INCLUDE_STATISTICS,3)

FROM

[Association]

NATURAL PREDICTION JOIN

(SELECT (SELECT ‘Touring Tire‘ AS [Model]

) AS [v Assoc Seq Line Items]) AS t



这个语句的大体意思就是,购买了产品Touring Tire的用户当中,根据历史信息,还有可能会购买哪些产品。

那么我们来看查询结果:

Model SUPPORT PROBABILITY ADJUSTEDPROBABILITY
Touring Tire Tube 1397 0.860385925 0.783460119
Sport-100 6171 0.267877412 0.489939538
Patch kit 3010 0.244040863 0.567612365

然后我们来简单解释下相关列的信息:

SUPPORT-支持度,所处行的项支持度,这里跟传统的支持度有些不同,这里,比如第一行,指的是有多少个订单中包含了产品Touring Tire Tube。

在数据仓库中,我们可以用SQL语句来验证下这个结果

SELECT COUNT(1)

FROM [AdventureWorksDW2012].[dbo].[vAssocSeqLineItems]

WHERE [Model]=‘Touring Tire Tube‘



返回的结果就是1397。

PROBABILITY-概率

购买Touring Tire的订单中又包含Touring Tire Tube的个数。再简单点说就是概率中的P(A|B)的问题了。

那么我们还是来验证下第一行的计算结果,同时购买Touring Tire Tube和Touring Tire的订单数量:

SELECT T1.[OrderNumber]

FROM [AdventureWorksDW2012].[dbo].[vAssocSeqLineItems] T1

INNER JOIN

(

SELECT T2.[OrderNumber]

FROM [AdventureWorksDW2012].[dbo].[vAssocSeqLineItems] T2

WHERE T2.[Model]=‘Touring Tire Tube‘

) TZ ON T1.OrderNumber=TZ.OrderNumber

WHERE T1.[Model]=‘Touring Tire‘



我们可以看到查询返回的结果数量是758行。

然后再计算下订单中只包含Touring Tire的数量:

SELECT [OrderNumber]

FROM [AdventureWorksDW2012].[dbo].[vAssocSeqLineItems]

WHERE [Model]=‘Touring Tire‘



返回的记录行数是881行。

用758除以881,得到的数字正好是0.860385925。

这个概率正好反映了这样一个事实,就是购买Touring Tire的客户会有很大的可能性购买Touring Tire Tube,所以当客户购买Touring Tire之后系统自动的向其推荐Touring Tire Tube准没错。

也许你已经看出了那条DMX语句的一些门道,当然,有些关键字你暂时可以不用去关心,必要的时候可以参考微软的文档。那么扩展一下,比如,客户买了指定的两样产品,那么我根据这两样已选的产品应该推荐给客户什么呢?

SELECT FLATTENED

PredictAssociation([Association].[v Assoc Seq Line Items],INCLUDE_STATISTICS,3)

FROM

[Association]

NATURAL PREDICTION JOIN

(SELECT (SELECT ‘Touring Tire‘ AS [Model]

UNION SELECT ‘Touring Tire Tube‘ AS [Model]

) AS [v Assoc Seq Line Items]) AS t



看到熟悉的UNION语句了吧,好吧,相信你不懂DMX的话你也看出这条语句的规律了,这些就够了,后续文章中将会在c#逻辑代码中根据这条基本的语句来动态的来拼DMX语句。

以上数据挖掘模型的建立部分到此完毕,这是通常一个商业智能项目中底层架构的基本部分。

时间: 2024-08-28 06:59:34

SQL Server Analysis Services 数据挖掘的相关文章

微软Sql server analysis service数据挖掘技术

最新在一个项目中要求用到微软SSAS中的数据挖掘功能,虽然以前做项目的时候也经常用到SSAS中的多维数据集 (就是CUBE),但是始终没有对SSAS中的数据挖掘功能进行过了解.所以借着项目需求这股东风最近了解了下为SSAS的数据挖掘,这里先写一篇博客做一个简要的归纳. 说到数据挖掘,我们首先需要知道SSAS数据挖掘能干什么,为什么需要进行数据挖掘.我们先来看一个例子假设我们数据库中现在有一张表叫CustomersBoughtCarsSurvey,这张表记录了公司客户购买车辆的信息. CREATE

添加条码生成和打印功能到SQL Server Reporting Services report 中

Barcode Professional for Reporting Services 是一款灵活和强大的.NET组件(.NET DLL 类库),它让您轻松地添加条码生成和打印功能到您的SQL Server Reporting Services report 中.支持几乎所有当前常用的条码:Code 39, Code 128, GS1-128, GS1 DataBar (RSS-14), EAN 13 & UPC, Postal (USPS, British Royal Mail, Austra

[转]Creating Mailing Labels in SQL Server Reporting Services (rdlc 数据1页 2竖排 显示)

本文转自:http://blogs.wrox.com/article/creating-mailing-labels-in-sql-server-reporting-services/ Most word processing applications (Word, WordPerfect, and so on) provide the capability to create a “mail merge” from which to generate mailing labels in dif

SrsDataConnector The SQL Server Reporting Services account is a local user and is not supported.

这次使用OS+SQL的镜像还原系统后安装了CRM 2015,主要流程是 安装IIS/AD,SSRS ,CRM2015.自带的SQL中SSRS没有安装完全,需配置一下. 这一切都满顺利的,最后在安装 SrsDataConnector 时,系统报错: The SQL Server Reporting Services account is a local user and is not supported. 这个问题主要原因是 报表运行账号是 ReportServer ,而需要调整为 Local S

SQL Server Reporting Services创建与订阅报表

倘若数据库中的数据是实时更新的,而我们研究评估所用的报表也是要基于这样的实时数据,这时候我们就可以采用SQL Server Reporting Services(SSRS)服务.一个比较浅显的应用场景是,我们需要观察最近一天.一周或者一月的销售数据KPI并与上一个周期做比较得到相应的表格或图形,而恰好实时的销售数据都会进入到数据库中.这样做的好处是,对于这种功能需求一样,只是输入参数随时间而变化的报表,采用SSRS可以实现自动化,避免了重复的工作.下面简要总结一下SSRS建立和订阅报表的步骤经验

SQL Server Reporting Services – Insufficient Rights Error

http://www.sql-server-performance.com/2011/security-ssrs-reporting-error/ SQL Server Reporting Services – Insufficient Rights Error BY FRANCO LOPES Introduction At times when we successfully deploy the reports to the report server and try to view the

初识SQL Server Integration Services (SSIS)

1 什么是微软的SQL Server Integration Services(SSIS) 微软SSIS是构建企业级数据集成和数据转换解决方案平台.您可以使用集成服务来解决复杂的业务问题通过复制或下载文件,发送电子邮件以响应事件,更新数据仓库. 清洗和挖掘数据和管理 SQL Server 对象和数据.包可以单独或与其他包一起复杂的业务需求.集成服务可以提取和转换数据从各种各样的来源,如 XML 数据文件. 平面文件和关系数据源,然后将数据加载到一个或多个目标数据载体中. SSIS包括一组丰富的内

充分利用 SQL Server Reporting Services 图表

最近在查SSRS的一些文章,看到MSDN在有一篇不错的文章,许多图表设置都有说明,共享给大家.. 其中有说明在SSRS中如果去写条件表达写和报表属性中的“自定义代码”,文章相对比较长,需要大家耐心的查阅. 简介 本白皮书讲述如何在 Microsoft SQL Server Reporting Services 报表中设计图表.本文分为几部分并引用特定的报表示例:它们包含在示例项目下载中. 第一部分为数据准备,此部分主要包括有关准备数据的特定信息.技巧和见解.第二部分为图表标签,此部分讲述如何应用

SQL Server Reporting Services 自定义数据处理扩展DPE(Data Processing Extension)

最近在做SSRS项目时,遇到这么一个情形:该项目有多个数据库,每个数据库都在不同的服务器,但每个数据库所拥有的数据库对象(table/view/SPs/functions)都是一模一样的,后来结合网络上众多的资源找到了解决方案,即Data Processing Extensio(DPE).所谓DPE,直白地说就是开发自己的DLL去扩展SSRS的数据源,具体的操作如下所示: 1. 新建类库项目,并引入以下两个DLL: C:\Program Files\Microsoft SQL Server\MS