使用SQL Server Analysis Services数据挖掘的关联规则实现商品推荐功能(七)
假如你有一个购物类的网站,那么你如何给你的客户来推荐产品呢?这个功能在很多电商类网站都有,那么,通过SQL Server Analysis Services的数据挖掘功能,你也可以轻松的来构建类似的功能。
上一篇中介绍的是如何通过DMX来创建挖掘模型,这一篇讲简单介绍如何通过编程的方式来创建挖掘模型。
通过编程的方式主要通过AMO来实现,分析服务的所有跟架构相关的实现,包括多维数据集和数据挖掘,都通过这个接口实现。
AMO对象树包含了支持多维数据集和数据挖掘所有的对象模型,在我这篇随笔中可以详细看到它的结构。
对象的结构稍微复杂一些,但我们关注的有三个部分:

通过这两个对象连接到分析服务数据库并且操作分析服务数据库实例。

然后通过DataSource以及DataSourceView创建数据源连接和数据源视图。

然后通过MiningStructrue下的对象体系和MiningModel来创建挖掘结构和挖掘模型,可以留意到Column是自包含的结构,这主要是考虑到了挖掘结构中的嵌套模型。
通过以上的对象模型我们可以观察到,这些对象跟我们在Visual Studio中创建一个数据挖掘项目都是相对应的,在一个正常的过程中我们都会按照下面的套路进行操作:
- 创建项目(实际上部署之后对应的就是一个数据库)
- 创建数据源
- 创建数据源视图
- 创建挖掘结构(定义数据结构)
- 创建挖掘模型(挖掘算法等)
以下将简单演示如何通过AMO来创建数据挖掘项目。
打开Visual Studio,此篇用到的版本是2010,对应的数据库是SQL Server 2012。在Visual Studio中创建一个控制台项目,然后右键单击References文件夹,选择Add Reference…

点击Browse找到AMO对象所对应的dll文件。

这个文件通常在如下的位置:
C:\Program Files (x86)\Microsoft SQL Server\110\SDK\Assemblies
接下来回到控制台代码中,首先需要加入AMO对象的引用。
using Microsoft.AnalysisServices;
然后,通过如下的代码连接到分析服务实例。
Server SSASServer = new Server();
SSASServer.Connect(@".");
创建分析服务数据库。
#region Create database
string strDataBaseName = "DMAMO";
Console.WriteLine("Check database: " + strDataBaseName);
if (SSASServer.Databases.Contains(strDataBaseName))
{
SSASServer.Databases.Remove(strDataBaseName);
Console.WriteLine("Database " + strDataBaseName + " already exists, droped.");
}
Database db = new Database(strDataBaseName, strDataBaseName);
SSASServer.Databases.Add(db);
db.Update();
#endregion

上面代码运行完毕后,会看到在对应的分析服务实例下已经创建了一个空的数据库。
创建数据源。
#region DataSource
RelationalDataSource rds = new RelationalDataSource("DMDataSource", Utils.GetSyntacticallyValidID("DMDataSource", typeof(Database)));
rds.ConnectionString = @"Data Source=.;Initial Catalog=AdventureWorksDW2012;Provider=SQLNCLI11.1;Integrated Security=SSPI;Application Name=SSASDEMO;";
rds.ImpersonationInfo = new ImpersonationInfo("wade", "iamfromcnblogs");
db.DataSources.Add(rds);
db.Update(UpdateOptions.ExpandFull);
#endregion

留意到数据源对象的ImpersonationInfo属性,它的设置对应如下图的设置。在本机开发的时候,为了方便我们通常将其设置成为一个管理员账号。

创建数据源视图。
#region Data Source View
DataSet dset = new DataSet();
SqlConnection sqlconn = new SqlConnection(@"Data Source=.;Initial Catalog=AdventureWorksDW2012;Integrated Security=SSPI;Application Name=SSASDEMO;");
//Line Items
SqlDataAdapter daLineItems = new SqlDataAdapter("SELECT [OrderNumber],[LineNumber],[Model] FROM [vAssocSeqLineItems]", sqlconn);
daLineItems.FillSchema(dset, SchemaType.Mapped, "vAssocSeqLineItems");
dset.Tables["vAssocSeqLineItems"].ExtendedProperties.Add("TableType", "View");
//Orders
SqlDataAdapter daOrders = new SqlDataAdapter("SELECT [OrderNumber],[CustomerKey],[Region],[IncomeGroup] FROM [vAssocSeqOrders]", sqlconn);
daOrders.FillSchema(dset, SchemaType.Mapped, "vAssocSeqOrders");
dset.Tables["vAssocSeqOrders"].ExtendedProperties.Add("TableType", "View");
//Relationship
DataRelation relateProductSubCate = new DataRelation("Rel", dset.Tables["vAssocSeqOrders"].Columns["OrderNumber"], dset.Tables["vAssocSeqLineItems"].Columns["OrderNumber"]);
dset.Relations.Add(relateProductSubCate);
DataSourceView dsv = new DataSourceView("DMDSV", "DMDSV");
dsv.DataSourceID = "DMDataSource";
dsv.Schema = dset.Clone();
db.DataSourceViews.Add(dsv);
db.Update(UpdateOptions.ExpandFull);
#endregion

创建数据源视图是一个比较复杂的过程,表需要对应一个一个的对象,而且关系也要一一创建,最后需要把用到的表都通过DataSet对象加载进来,然后再通过clone方法将其设置成数据源视图的架构。

创建挖掘结构。
#region Mining Structure
MiningStructure ms = new MiningStructure("MSOrder", "MSOrder");
db.MiningStructures.Add(ms);
ms.Source = new DataSourceViewBinding("DMDSV");
ScalarMiningStructureColumn scOrderNumber = ms.Columns.Add("OrderNumber", "OrderNumber");
scOrderNumber.IsKey = true;
scOrderNumber.Type = MiningStructureColumnTypes.Text;
scOrderNumber.Content = MiningStructureColumnContents.Key;
scOrderNumber.KeyColumns.Add("vAssocSeqOrders", "OrderNumber", OleDbType.WChar);
ScalarMiningStructureColumn scModel = ms.Columns.Add("Model", "Model");
scModel.IsKey = true;
scModel.Type = MiningStructureColumnTypes.Text;
scModel.Content = MiningStructureColumnContents.Key;
scModel.KeyColumns.Add("vAssocSeqLineItems", "Model", OleDbType.WChar);
TableMiningStructureColumn tcLineItems = new TableMiningStructureColumn("SeqLineitems", "SeqLineitems");
tcLineItems.ForeignKeyColumns.Add("vAssocSeqLineItems", "OrderNumber");
tcLineItems.Columns.Add(scModel);
ms.Columns.Add(tcLineItems);
ms.Update();
#endregion

挖掘结构的创建实际上也是把数据源视图中定义的架构映射成数据挖掘结构的一个过程。需要通过对应的MiningColumn对象根据数据源视图把需要用到的字段映射进来。
创建挖掘模型,其中通过枚举属性Algorithm来设置挖掘模型根据挖掘结构采用的是哪种挖掘算法。
#region Mining Model
MiningModel mm = ms.CreateMiningModel(true, "Basket Forecasting Model");
mm.Algorithm = MiningModelAlgorithms.MicrosoftAssociationRules;
mm.Columns["SeqLineitems"].Usage = MiningModelColumnUsages.Predict;
mm.Update();
#endregion

一个挖掘模型对应一个挖掘结构,所以很多结构直接继承了挖掘结构。这里唯一需要做的就是,根据创建出来的挖掘模型,将其中的一个列设置成预测字段。
最后,通过AMO处理挖掘模型。
#region Process
SSASServer.CaptureXml = true;
db.Process();
SSASServer.CaptureXml = false;
Console.WriteLine("Processing...");
SSASServer.ExecuteCaptureLog(true, true);
#endregion
打开挖掘模型,可以看到挖掘模型生成的规则。

当然,实际上在代码中来创建挖掘模型是不被推荐的,有些AMO的深层对象模型目前SQL Server的文档里只能提供接口描述而没有关于模型的介绍和讲解,笔者主要是根据项目里创建的过程然后再回过头来理解对象模型的含义,而即使国外网站上关于挖掘结构和模型中的嵌套结构更是少之又少,所以这篇真的是摸索了好久,不断的编译调试和对比才将各个细节打通。无论如何,通过这个过程我们可以更深入的了解分析服务底层的对象模型从而更好地去理解和设计我们的挖掘模型,同时也可以通过AMO自动地去调整模型。希望通过此篇,会让更多的朋友来了解AMO对象模型。
使用SQL Server Analysis Services数据挖掘的关联规则实现商品推荐功能(七)的更多相关文章
- SQL Server Analysis Services 数据挖掘
假如你有一个购物类的网站,那么你如何给你的客户来推荐产品呢?这个功能在很多 电商类网站都有,那么,通过SQL Server Analysis Services的数据挖掘功能,你也可以轻松的来构建类似的 ...
- SQL Server Analysis Services 数据挖掘(1)
来源: http://technet.microsoft.com/zh-cn/library/dn633476.aspx 假如你有一个购物类的网站,那么你如何给你的客户来推荐产品呢?这个功能在很多 电 ...
- SQL Server Analysis Services SSAS Processing Error Configurations
转载:https://www.mssqltips.com/sqlservertip/3476/sql-server-analysis-services-ssas-processing-error-co ...
- 全半角空格导致的Sql Server Analysis Services处理错误(转载)
问题描述 某维度表的字符串列同时出现两条记录,A记录以半角空格(英文空格)结束,B记录以全角空格(中文空格)结束,除此之外其他部分均相同.Analysis Service处理的时候抛出“Key not ...
- 微软Sql server analysis service数据挖掘技术
最新在一个项目中要求用到微软SSAS中的数据挖掘功能,虽然以前做项目的时候也经常用到SSAS中的多维数据集 (就是CUBE),但是始终没有对SSAS中的数据挖掘功能进行过了解.所以借着项目需求这股东风 ...
- Sql Server Analysis Service 处理时找到重复的属性键、找不到属性键错误(转载)
这是两个非常常见的SSAS处理异常,网上也能找到很多文章讲解决办法,但很少见关于异常原因的分析,先来看看第一个" OLAP 存储引擎中存在错误: 处理时找到重复的属性键",一个维度 ...
- SQL Server Reporting Services本机模式下的权限管理
SQL Server Reporting Services在安装配置后,缺省只给BUILTIN\Administrators用户组(实际上只有本机的Administrator用户)提供管理权限.所以所 ...
- 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 ...
- 充分利用 SQL Server Reporting Services 图表
最近在查SSRS的一些文章,看到MSDN在有一篇不错的文章,许多图表设置都有说明,共享给大家.. 其中有说明在SSRS中如果去写条件表达写和报表属性中的“自定义代码”,文章相对比较长,需要大家耐心的查 ...
随机推荐
- facebook 用curl获取用户资料
用facebook获取用户信息 $graph_url= "https://graph.facebook.com/me?scope=email&fields=id,name,email ...
- 【codevs2495】 水叮当的舞步
http://codevs.cn/problem/2495/ (题目链接) 题意 给出一个N*N的矩阵,其中元素有5种颜色,每次可以将左上角元素所在的连通块更换一种颜色,连通块指相邻并且颜色相同的元素 ...
- MVC复杂模型绑定
当初遇到业务需求ajax提交一组对象数组到服务器.但是苦于mvc的默认绑定器.绑定不上去.好吧只有靠自己了. 当初就是参考这个大大的博客:http://www.cnblogs.com/xfrog/ar ...
- elk系列8之logstash+redis+es的架构来收集apache的日志
preface logstash--> redis --> logstash --> es这套架构在讲究松耦合关系里面是最简单的, 架构图如下: 解释下这个架构图的流程 首先前端lo ...
- <<< 数据库基础知识
相关概念: 1.数据 (DATA) : 数据是描述现实世界事物的符号标记, 是指用物理符号记录下来的可以鉴别的信息. 包括:数字.文字.图形.声音.及其他特殊符号 2.数据库(DATABASE) :按 ...
- oracle--知识点汇总2---laobai
--复制表 create table emp as(select * from scott.emp); select * from emp; --Demo1创建存储过程,实现将emp表comm为空时, ...
- 使用IExport进行图片输出出现File creation error
使用IExport进行图片输出(.JPG)时,出现如下异常File creation error. 在ESRI.ArcGIS.Output.ExportJPEGClass.FinishExport ...
- ubuntu 15.10安装并配置samba
1.安装samba apt-get install samba 2.vim /etc/samba/smb.conf 在文件结尾添加如下行 [share]path = /home/ihibinavail ...
- [Linux] Linux指令汇总(持续更新中...)
写在前面: 以前真心没有玩过Linux系统,总感觉整天摆弄Linux的同学都是大牛.如今,在公司里实习需要远程登录Linux服务器,所有的代码都要在开发板上完成,所以被逼无奈也不得不定下心来好好学学L ...
- mac 上的 python
1.mac 上的 python 自己感觉很乱 1.额外安装的 自带的 python27-apple /System/Library/Frameworks/Python.framework/Versio ...