如何在分析应用中使用数据挖掘简介

ZDNet软件频道 时间:2009-04-10 作者: | 天新网 我要评论()
本文关键词:Mssql SQL SQL Server 数据库 SQL Server
数据挖掘是SQL Server 2000中最令人激动的新功能之一。我将数据挖掘看作是一个能够自动分析数据以获取相关信息的过程,数据挖掘可以和任一关系数据库或者OLAP数据源集成使用。

在客户端创建挖掘模型

尝试不同的挖掘模型,从其中找到效果最好的。尽管目前的客户端应用程序还不支持这一功能,但用户希望在客户机端,而不是在服务器端创建挖掘模型。客户分析程序需要支持这项功能,可以利用MDX扩展通过OLE DB for OLAP或ADO MD来创建挖掘模型。在客户机端创建挖掘模型需要运行SQL Server企业版,因为该功能依赖于企业版的自定义累积功能。

用数据挖掘维创建虚拟数据集需要三个步骤。第一,创建挖掘模型。下面的命令生成一个挖掘决策树来根据用户的性别、婚姻和教育状况预测年收入。

  
    CREATE OLAP MINING MODEL [Local Find Salary]
      FROM [Sales]
       (
        CASE
         DIMENSION [Customers]
         LEVEL [Name]
         PROPERTY [Gender] ,
         PROPERTY [Marital Status] ,
         PROPERTY [Education] ,
         PROPERTY [Yearly Income] PREDICT
       )
      USING Microsoft_Decision_Trees

注意调用数据集名字的FROM语句和引出Customers维Name层的成员属性的每个 PROPERTY关健字。运行上面的命令后,就会得到一个空的挖掘模型,它对你的分析服务(Analysis Services)连接是唯一的,也会与其它工作站共享。(要创建共享的挖掘模型,需要用分析管理器或DSO编程接口)。下面的命令是将Sales多维数据集中的数据送入挖掘模型。这是一个简单的指定了挖掘模型名字的INSERT INTO语句:

  INSERT INTO [Local Find Salary]

最后,将根据挖掘模型、其它维以及从源多维数据集中引用的度创建一个虚拟多维数据集。下面是创建多维数据集的代码:

  
    CREATE SESSION VIRTUAL CUBE [PredictIncomeCube]
      FROM [Sales]
       (
        MEASURE [Sales].[Unit Sales] ,
        DIMENSION [Sales].[Customers],
        DIMENSION [Sales].[Time],
        DIMENSION [PredictIncome] NOT_RELATED_TO_FACTS
        FROM [Local Find Salary]
       COLUMN [Customers.Name.Yearly Income]
      )

在这一语句中,我仅仅使用了Unit Sales度、Customers和Time维。最后一个维━━PredictIncome是作为CREATE VIRTUAL CUBE语句的一部分而创建的。NOT_RELATED_TO_FACTS关键字让分析服务(Analysis Services)知道该维不是由同多维数据集相关的表得来的,FROM和COLUMN子句进一步说明了在创建虚拟多维数据集时使用了挖掘模型和挖掘模型的预测实体。

下面是用Visual Basic编写的用来演示上述的命令运行的一小段程序:

  
    Const sGUID_SCHEMA_SERVICE_PARAMETERS 
        As String = ""
     Const sGUID_SCHEMA_MINING_SERVICES As String = "
        "
     Const sGUID_SCHEMA_MINING_MODELS As String = "
        "
     Const sGUID_SCHEMA_MINING_COLUMNS As String = "
        "
     Const sGUID_SCHEMA_MODEL_CONTENT As String = "
        "
     Const sGUID_SCHEMA_MODEL_CONTENT_PMML As String = "
         "
  
     Dim m_conn As New ADODB.Connection
  
     Private Sub ExecuteMDX(ByVal v_sMDX As String)
      On Error GoTo ErrHandler
  
      Dim cmd As New ADODB.Command
      Dim rec As Recordset
      Dim nNum As Integer
  
      Set cmd.ActiveConnection = m_conn
      cmd.CommandText = v_sMDX
      Set rec = cmd.Execute(nNum)
  
      MsgBox "Command Executed Successfully. " & nNum & " 
          rows affected.", VBOKOnly + vbInformation
     Exit Sub
  
     ErrHandler:
      MsgBox Err.Description, vbExclamation
     End Sub
  
     Private Sub Form_Load()
      " Specify .2 on the provider so only SQL 2000 will work
      " Connect to a server on the local PC. 
         Change this if you are connecting
      " to another PC with Analysis Services.
      Call m_conn.Open("PROVIDER=MSOLAP.2;Data Source=LOCALHOST;")
  
      " Create the mining model
    Call ExecuteMDX( _"CREATE OLAP MINING MODEL [Local Find Salary] " & _
       "From [Sales] " &  "( " & " CASE " & _
       " Dimension [Customers] " & _
       " Level [Name] " & _
       " PROPERTY [Gender] ," & _
       " PROPERTY [Marital Status] ," & _
       " PROPERTY [Education] ," & _
       " PROPERTY [Yearly Income] PREDICT " & _
       ")" & _
       "USING Microsoft_Decision_Trees")
  
       " Fill the mining model
       Call ExecuteMDX("INSERT INTO [Local Find Salary]")
  
       " Create a virtual cube based on the mining model
       Call ExecuteMDX( _
        "CREATE SESSION VIRTUAL CUBE [PredictIncomeCube] " & _
        "FROM [Sales] " & _
        "( " & _
        " MEASURE [Sales].[Unit Sales] , " & _
        " DIMENSION [Sales].[Customers], " & _
        " DIMENSION [Sales].[Time], " & _
        " DIMENSION [PredictIncome] NOT_RELATED_TO_FACTS " & _
        " FROM [Local Find Salary] " & _
        " COLUMN [Customers.Name.Yearly Income] " & _
       ") ")
  
      Dim recCols As Recordset
      Dim vtRestrict As Variant
  
      vtRestrict = Array(Empty, Empty, "Local Find Salary")
  
      " open the data mining model"s content as a rowset
      Set recCols = m_conn.OpenSchema(adSchemaProviderSpecific, 
           vtRestrict, sGUID_SCHEMA_MODEL_CONTENT)
  
      " display each node caption of the resulting decision tree
      Do While Not recCols.EOF
       MsgBox recCols.Fields("NODE_CAPTION").Value
       recCols.MoveNext
      Loop
  
      m_conn.Close
     End Sub

不幸的是你不得不使用这样的程序而不是MDX范例,因为命令的执行必须用到一个返回记录集,而不是在前面讨论的三全命令中使用的标准的多维单元集,而后打开一个微软专有的图表记录集(我在例程中添加了OpenSchema函数来说明如何获取挖掘模型的内容)。例程仅仅列出了决策树中每一结点的名称,记录集被组织成象父子维表一样的结构,该记录集的每个记录在决策树中确定一个结点,并具有一个 NODE_UNIQUE_NAME和PARENT_UNIQUE_NAME字段。PARENT_UNIQUE_NAME确定包含当前行的父纪录的记录。

在例程的开始,是一个包含GUID的列表,可以利用它访问所有和数据挖掘相关的特定提供者的记录集。在上面例程中没有用到它们,但如果你计划开发支持数据挖掘功能的应用程序,不妨试试它们。

比想象的要简单

当我第一次看OLE DB for DM的详细说明时,认为要完成一个简单的数据挖掘也需要程序员或应用程序用户提供如此多的信息,以至于怀疑它对于普通决策者是否有用。但通过深入的研究,我明白了它之所以看起来比较复杂,是因为在挖掘关系数据库需要较多的信息,挖掘OLAP多维数据集则不需要太多的信息。OLAP数据挖掘是简单、快速、有用的,决策树算法是一种可以帮助我们对大量数据进行结构化处理从而获取有用信息的好方法。

Mssql

SQL

SQL Server

数据库

SQL Server


百度大联盟认证黄金会员Copyright© 1997- CNET Networks 版权所有。 ZDNet 是CNET Networks公司注册服务商标。
中华人民共和国电信与信息服务业务经营许可证编号:京ICP证010391号 京ICP备09041801号-159
京公网安备:1101082134