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

电商类网站都有,那么,通过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语句。

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

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

  1. 使用SQL Server Analysis Services数据挖掘的关联规则实现商品推荐功能(七)

    假如你有一个购物类的网站,那么你如何给你的客户来推荐产品呢?这个功能在很多电商类网站都有,那么,通过SQL Server Analysis Services的数据挖掘功能,你也可以轻松的来构建类似的功 ...

  2. SQL Server Analysis Services 数据挖掘(1)

    来源: http://technet.microsoft.com/zh-cn/library/dn633476.aspx 假如你有一个购物类的网站,那么你如何给你的客户来推荐产品呢?这个功能在很多 电 ...

  3. SQL Server Analysis Services SSAS Processing Error Configurations

    转载:https://www.mssqltips.com/sqlservertip/3476/sql-server-analysis-services-ssas-processing-error-co ...

  4. 全半角空格导致的Sql Server Analysis Services处理错误(转载)

    问题描述 某维度表的字符串列同时出现两条记录,A记录以半角空格(英文空格)结束,B记录以全角空格(中文空格)结束,除此之外其他部分均相同.Analysis Service处理的时候抛出“Key not ...

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

    最新在一个项目中要求用到微软SSAS中的数据挖掘功能,虽然以前做项目的时候也经常用到SSAS中的多维数据集 (就是CUBE),但是始终没有对SSAS中的数据挖掘功能进行过了解.所以借着项目需求这股东风 ...

  6. Sql Server Analysis Service 处理时找到重复的属性键、找不到属性键错误(转载)

    这是两个非常常见的SSAS处理异常,网上也能找到很多文章讲解决办法,但很少见关于异常原因的分析,先来看看第一个" OLAP 存储引擎中存在错误: 处理时找到重复的属性键",一个维度 ...

  7. SQL Server Reporting Services本机模式下的权限管理

    SQL Server Reporting Services在安装配置后,缺省只给BUILTIN\Administrators用户组(实际上只有本机的Administrator用户)提供管理权限.所以所 ...

  8. 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没有安装完全,需配置一下. 这一切都满顺利的,最后在安装 S ...

  9. 充分利用 SQL Server Reporting Services 图表

    最近在查SSRS的一些文章,看到MSDN在有一篇不错的文章,许多图表设置都有说明,共享给大家.. 其中有说明在SSRS中如果去写条件表达写和报表属性中的“自定义代码”,文章相对比较长,需要大家耐心的查 ...

随机推荐

  1. org.apache.ibatis.reflection.ReflectionException

    org.mybatis.spring.MyBatisSystemException: nested exception is org.apache.ibatis.reflection.Reflecti ...

  2. 递归遍历XML节点属性和属性值

    public static XmlDocument FileMergedIntoXML(string strXmlPathPublic) { string strXmlPathPublic = str ...

  3. Socket连接

    socket中TCP的三次握手建立连接详解 我们知道tcp建立连接要进行“三次握手”,即交换三个分组.大致流程如下: 客户端向服务器发送一个SYN J 服务器向客户端响应一个SYN K,并对SYN J ...

  4. Windows应用替代方案接龙

    使开源软件的优势: 开源安全产品的开发.测试和发布过程完全是透明的,同时提供产品的源代码及部分的文档.通过阅读源代码,大家可以清楚地了解开源安全技术的工作原理和实现方法,在选择开源安全技术时更有把握, ...

  5. C#基础知识点

    一.方法(结构.数组.冒泡排序.3个参数重载) 1将string转换为int类型 Convert.ToInt32(); int.Parse() ; int.TryParse()三种方式. 2 结构:可 ...

  6. Spring 注解实体类中非数据库字段属性

    解决办法:在属性的get方法上加上一段注解标识它是临时属性,不是数据库字段就OK @Transient public List<Reverts> getChildList() { retu ...

  7. Qt中QObject中的parent参数

    今天写了一个小程序,验证了带参的构造函数中参数parent的作用. 在MainWindow中声明一个QDialog类型的指针,在MainWindow中对它进行初始化.我采用了两种初始化方式,一种是带参 ...

  8. 关于TCP协议握手的那些事儿

    旁白 今天面了下鹅场的后台技术开发,面试官问了我关于TCP连接协议的3次握手和断开连接协议的4次握手的问题.因为之前看过TCP的连接和断开处理,但是印象没有那么深刻.我想主要原因是一直重复简单的记忆, ...

  9. SQL Server T-SQL高级查询(转)

    高级查询在数据库中用得是最频繁的,也是应用最广泛的.   Ø 基本常用查询   --select select * from student; --all 查询所有 select all sex fr ...

  10. leetcode 7

    此题实现比较简单,但是边界处理比较麻烦.题目要求是以32位考虑,所以可表达的数的范围是-2147483648~2147483648. 我们需要判断当前的数翻转之后是否在这个范围中,我的思路是首先对当前 ...