为一个数据挖掘模型定型后,可以通过使用 SQL Server Management Studio 或 Business Intelligence Development Studio 中提供的自定义查看器来浏览此模型。但是,如果您希望进行预测或者从模型中获取更深入的或更具体的信息,则必须依据此数据挖掘模型创建一个查询。在以下情况下,查询可帮助您更好地理解和处理模型中的信息:
进行单个预测和批预测。
了解有关模型发现的模式的更多信息。
查看有关模型的特定模式或子集的详细信息或定型事例。
在挖掘模型中钻取到事例的详细信息。
提取有关全部或部分模型和数据的公式、规则或统计信息。
SQL Server Analysis Services 提供用于创建查询的图形设计界面,以及一种称为数据挖掘扩展插件 (DMX) 的查询语言,这种语言对于创建自定义预测和复杂查询很有用。若要生成 DMX 预测查询,可以使用 SQL Server Management Studio 和 Business Intelligence Development Studio 中均提供的查询生成器。SQL Server Management Studio 中还提供了一组 DMX 查询模板。
有关如何使用查询生成器的详细信息,请参阅使用预测查询生成器创建 DMX 预测查询。
有关如何使用 DMX 查询模板的详细信息,请参阅在 SQL Server Management Studio 中创建 DMX 查询或如何在 SQL Server Management Studio 中使用模板。
预测查询
许多数据挖掘项目的主要目标是使用挖掘模型来进行预测。例如,您可能要在十二月期间预测公司明年销售的产品数量,或者可能要预测在某个广告活动后潜在客户是否会购买产品。
创建预测时,通常会提供一些新数据,并要求模型基于新数据生成一个预测。可以通过在“预测联接”中将模型映射到一个外部数据源来以批方式进行预测。或者,可以通过创建一个“单独”查询一次提供一个值。
单独预测查询和批预测查询都使用 PREDICTION JOIN 语法来定义新数据:不同之处在于预测联接输入端的指定方式。在单独查询中,数据是作为查询的一部分内联提供的。在批查询中,数据来自使用 OPENQUERY 语法指定的外部数据源。有关详细信息,请参阅 OPENQUERY (DMX)。
此外,使用时序模型可以仅仅基于模型来进行预测,即不需要提供任何新数据,而仅仅基于现有序列来请求预测。
下面提供有关如何创建上述每一类查询的信息:
查询类型 查询选项
单独预测查询
针对在查询中键入的单个新事例或者多个新事例进行预测。
批预测
将外部数据源中的新事例映射到模型并进行预测。
时序预测
基于现有模型预测指定数目的将来步骤。
通过添加新数据来扩展现有模型,并基于组合序列来进行预测。
通过使用 REPLACE_MODEL_CASES 选项向新数据序列应用现有模型。
除了预测特定值,例如,下个月的销售额,或者要向客户建议的产品,您还可以自定义预测查询,以返回与预测有关的各种类型的信息。例如,知道预测正确的概率可能很有帮助,这样您就可以决定是否向用户提出建议。
若要自定义预测查询所返回的信息,应向查询中添加“预测函数”。每个模型或查询类型都支持特定的函数。例如,聚类分析模型支持特殊预测函数,这些函数提供有关模型创建的分组的额外详细信息。时序模型支持计算随时间的变化的预测函数。还有可处理几乎所有模型类型的通用预测函数。有关不同查询类型支持的预测函数的列表,请参阅将函数映射到查询类型 (DMX)。有关预测函数的完整列表,请参阅数据挖掘扩展插件 (DMX) 函数参考。
单独查询
如果要实时创建简单预测,则单独查询很有用。例如,您可能通过使用网站从客户那里获取信息,然后使用这些数据返回预测,这些预测以特定于该客户的建议信息的形式呈现。或者,您也可能分析电子邮件的内容,然后使用现有分类模型来对电子邮件进行分类,并相应地传送邮件。
单独查询不需要包含输入的单独表。只需将一行数据传递给模型,便会实时地返回一个预测。您还可以将单独查询扩展为进行多个预测,方法是键入包含单个事例的 SELECT 语句,再添加 UNION 运算符,然后键入另一个 SELECT 语句以指定另一个事例。
可以通过以下方式基于现有模型创建单独查询:
使用数据挖掘设计器。
使用单独查询模板。
以编程方式或者在另一个 Analysis Services 客户端中创建 DMX 语句。
创建单独查询时,必须以 PREDICTION JOIN 的形式向模型提供新数据。这意味着即使不映射到实际表,也必须确保新数据与挖掘模型中的现有列匹配。如果新数据列与新数据完全匹配,则 Analysis Services 将自动映射列。这称为“NATURAL PREDICTION JOIN”。但是,如果列不匹配,或者新数据在类型和量上与模型所包含的数据并不相同,则必须指定模型映射中的哪些列映射到新数据,或者指定缺少的值。
批预测查询
执行预测联接时,应将模型映射到新数据源,之后 Analysis Services 将基于模型中的模式针对新数据中的每一行进行预测。如果表或其他外部数据源中有许多信息,并且您要使用经过定型的模型来进行预测,则预测联接很有用。
可以通过以下方式基于现有模型创建批预测查询:
使用数据挖掘设计器。
使用模板。
以编程方式或者在另一个 Analysis Services 客户端中创建 DMX 语句。
如果通过使用数据挖掘设计器来创建批预测查询,则必须先将外部数据源定义为一个数据源视图。
如果使用 DMX 来创建预测联接,则可以通过使用 OPENQUERY、OPENROWSET 或 SHAPE 命令来指定外部数据源。DMX 模板中的默认数据访问方法是 OPENQUERY。有关这些方法的信息,请参阅 <source data query>。
无论您如何定义外部数据,指定的数据源都必须包含其数据与模型中的数据类似的列。但是,新的信息可以是不完整的。例如,您的客户列表可能包含年龄列,但不包含有关收入的信息。即使在为模型定型时使用了收入数据,仍可以将新数据映射到该模型并创建一个预测;但是,在某些情况下,缺少完整的信息可能会影响预测的质量。
为获得最佳结果,应当在新数据与模型之间联接尽可能多的匹配列。但是,即使没有匹配项,查询也会成功。如果不联接任何列,则查询将返回边缘预测,这与不含 PREDICTION JOIN 子句的语句 SELECT <predictable-column> FROM <model> 是等效的。
处理预测查询的结果
预测查询与关系数据库中的查询不同。您添加到查询中的每个预测函数都返回它自己的行集。因此,当您针对一个事例进行预测时,结果可能是一个预测的值,以及包含其他详细信息的几个嵌套表列。
只要在一个查询中组合多个函数,返回结果都将组合为一个分层行集。但是,如果提供程序无法处理分层的行集,则可以通过在预测查询中使用 FLATTEN 关键字来对结果进行平展处理。
时序挖掘模型中的预测
在使用新数据和创建预测的方法这一方面,时序模型具有更高的灵活性。您既可以在需要创建预测时使用此模型,也可以向模型提供新数据,以基于最近的趋势更新预测。如果您添加新数据,则可以指定新数据的使用方式,以扩展或更换模型事例。
扩展模型事例时,应向时序模型添加新的事实数据,从而使进一步的预测基于新的组合序列。更换模型事例时,应保留定型后的模型,但将基础事例更换为新的一组事例数据。
无论您使用那种方法,预测的起点都总是原始序列的终点。
例如,假定您有一个现有的时序模型,它的上一年销售数据已定型。收集了几个月的新销售数据后,您决定更新今年的销售预测。您可以添加新数据并扩展模型以进行新预测,从而创建更新模型的预测联接。
或者,可以基于现有数据生成模型,然后创建将事例数据更换为新数据的预测联接。这在某些情况下是很有用的,例如,当一个存储缺少很多数据,并且您希望使用基于其他存储数据生成的模型来进行预测时。有关如何在时序模型上创建预测联接的详细信息,请参阅“查询时序模型”或 PredictTimeSeries (DMX)。
内容查询
内容查询是一种提取有关内部统计信息以及挖掘模型结构信息的一种方式。有时,内容查询可提供在查看器中不易查看的详细信息。您还可以使用内容查询的结果以编程方式提取信息以供他用。例如,可以提取公式或概率进行自己的计算,或者检索有关模型中的事例的可操作信息。
查询类型 查询选项
SELECT FROM <模型>.CASES
查找用于定型或测试模型的事例。钻取到数据,包括基础挖掘结构中的列。
SELECT FROM <结构>.CASES
查看结构中包含的所有数据,包括特定挖掘模型中不包括的列。
SELECT FROM <模型>.CONTENT
检索有关模型中特定节点的详细信息,包括规则和公式、支持和方差统计信息等。
SELECT FROM <模型>.DIMENSIONCONTENT
支持对数据挖掘维度的查询。
此查询类型主要供内部使用。如果您开发自己的插件算法,则可使用此语法测试您的模型。
并非所有算法都支持此功能。是否支持将通过 MINING_SERVICES 架构行集中的一个标志来指示。
一些模型内容在所有算法中都是标准的。但是,通常而言,每个模型的内容都依赖于用来生成模型的算法。因此,在创建内容查询时,必须了解模型中哪些类型的信息是最有用的。
例如,如果创建一个使用 SELECT FROM <model>.CONTENT 语法的查询,则根据模型是顺序分析和聚类分析模型、决策树模型还是时序模型,此查询会返回差异很大的信息。对于关联模型,您可能要检索特定规则的说明,以便可以在自定义应用程序中使用规则,而在时序或顺序分析和聚类分析模型中,您可能要查找有关模型所检测的时间模式的更多信息。
以下部分提供了一些示例,以说明可以从内容查询中获得的信息的广度和深度;但是,有关挖掘模型内容以及特定于每种模型类型的内容的信息,请参阅挖掘模型内容(Analysis Services - 数据挖掘)。
示例 1:关联模型中的内容查询
可以使用 SELECT FROM <模型>.CONTENT 语句来返回不同类型的内容,具体取决于所查询的模型的类型。对于关联模型,表示规则的节点具有 NODE_TYPE 值 8,而项集则具有 NODE_TYPE 值 7。因此,下面的查询将返回最前面的 10 个项集,这些项集按支持度排序(默认排序顺序)。
SELECT TOP 10 NODE_DESCRIPTION, NODE_PROBABILITY, SUPPORT
FROM <model>.CONTENT WHERE NODE_TYPE = 7下面的示例返回三个列:节点的 ID、完整规则以及项集右侧的产品,也就是被预测将作为项集的一部分与其他某些产品关联的产品。
FLATTENED 关键字表示嵌套行集应转换为平面表。表示规则右侧产品的属性包含在 NODE_DISTRIBUTION 表中;因此,我们通过添加长度大于 2 的要求来仅检索包含属性名的行。使用一个简单的字符串函数从第三列中删除模型的名称。通常,模型名称总是作为嵌套列的值的前缀。WHERE 子句指定 NODE_TYPE 的值应当为 8,这表示仅仅检索规则。
SELECT FLATTENED NODE_UNIQUE_NAME , NODE_DESCRIPTION,
(SELECT RIGHT(ATTRIBUTE_NAME, (LEN(ATTRIBUTE_NAME)-LEN('Association model name')))
FROM NODE_DISTRIBUTION
WHERE LEN(ATTRIBUTE_NAME)>2
)
AS RightSideProduct
FROM [Association model name].CONTENT
WHERE NODE_TYPE = 8
ORDER BY NODE_SUPPORT DESC有关详细信息,请参阅查询关联模型(Analysis Services – 数据挖掘)。
示例 2:决策树模型的内容查询
查询模型内容非常重要的一种情况是:您想返回规则,说明预测该状态的原因,从而对预测查询执行进一步的操作。例如,可以通过使用如下语法向查询中添加预测函数 PredictNodeId,以获取包含规则的节点的 ID:
SELECT Predict([College Plans]), PredictNodeID([College Plans])
FROM [College Plans Tree]PREDICTION JOIN
<input rowset> 对于决策树模型,标题包含指向输出的路径的说明。因此,一旦您具有包含输出的节点的 ID,就可通过创建如下所示的内容查询来检索说明此预测的规则或路径:
SELECT NODE_CAPTION
FROM [College Plans Tree]
WHERE NODE_UNIQUE_NAME= '<node id>'