65.9K
CodeProject 正在变化。 阅读更多。
Home

SSAS 2005+ 中的购物篮分析

starIconstarIconstarIconstarIcon
emptyStarIcon
starIcon

4.78/5 (6投票s)

2009年2月28日

CPOL

3分钟阅读

viewsIcon

98857

downloadIcon

1464

本文解释了如何在 SSAS 2005 (Microsoft SQL Analysis Services) 中进行关联规则分析。

引言

本文解释了如何在 SSAS 2005 (Microsoft SQL Analysis Services) 中进行关联规则分析。关联规则分析回答了以下问题:“有多少购买了产品 A 的客户也购买了产品 B?” 本文假设读者已具备 SSAS 和 MDX 的一些知识。 这是我们希望得到的结果集

以下示例将使用 Northwind 示例数据库。 如果您的服务器上没有安装此数据库,请使用此文件:Northwind.sql。 Northwind 数据库具有以下实体关系图

为了理解这个问题,假设我们有一个带有产品维度的 Sales 多维数据集。

最初,我认为通过将产品维度同时放在行和列上来创建关联规则分析很容易。 这是 MDX

SELECT 
    [Products].[Products].Members on Rows,
    [Products].[Products].Members on Columns
    FROM [Sales]

但是,上面的语句将返回一个错误

The Products hierarchy already appears in the Axis0 axis. 

解决此问题的下一个明显方法是将重复的多维数据集维度 (Products 2) 添加到 Sales 多维数据集。 这是 MDX

SELECT 
    [Products].[Products].Members on Rows,
    [Products 2].[Products].Members on Columns
    FROM [Sales]

但是,此 MDX 返回以下结果集

您可以看到数据仅以对角线方式填充。 问题是您只能在产品 A 和产品 A 的交集或产品 B 和产品 B 的交集中看到数据。 这不是我们想要的。 此问题是由我们将两个相同的维度链接到同一度量值组的方式引起的。

我们想要看到的是产品 A 和产品 B 一起购买(具有相同的订单 ID)。 这可以通过以下方式完成

  1. 为 Sales 数据创建重复的度量值组。
  2. 通过订单维度链接两个 Sales 度量值组。
  3. 将第一个 Sales 度量值组链接到第一个产品维度。
  4. 将第二个 Sales 度量值组链接到第二个产品维度。
  5. 隐藏第二个度量值组中的度量值。
  6. 使用多对多关系类型将第二个产品维度链接到第一个 Sales 度量值组。

因此,让我们首先在 BIDS (SQL Server Business Intelligence Development Studio) 中创建一个项目。

接下来,创建一个到 Nothwind 数据库的连接

接下来,创建数据源视图

接下来,使用 Products 和 Categories 表创建产品维度。 该维度的键将是 ProductID。

接下来,使用 Orders 表创建 Orders 维度。 该维度的键将是 OrderID。

现在,创建 Sales 多维数据集。 取消选中“自动构建”。

要创建重复的度量值组,您需要在数据源视图中创建一个重复的 Sales 表。 我们必须这样做,因为 SSAS 不允许您为一个表创建两个度量值组。 打开数据源视图; 右键单击一个空白区域,然后选择“添加新的命名查询”。 该查询应该是

SELECT * FROM [Order Details]

数据源视图应如下所示

在“多维数据集结构”选项卡下,右键单击多维数据集,然后选择添加新的度量值组。

在“维度用法”选项卡下,右键单击以添加新的多维数据集维度。 选择“产品”。 将多维数据集维度重命名为“产品 2”。

使用多对多关系类型将第二个产品维度链接到第一个 Sales 度量值组。

部署

如果您懒于遵循上述步骤,您可以从此备份文件还原 OLAP 数据库:Northwind.abf。 确保更新到 NorthWind 数据库的连接和密码。

或者,您可以从 XMLA 脚本文件还原 OLAP 数据库:Northwind.xmla。 确保更新到 Northwind 数据库的连接和密码,并处理数据库。

关注点

接下来,您可能想尝试多产品分析。 这种分析将回答诸如“有多少购买了产品 A 和 B 的客户也购买了产品 C?”之类的问题。 您可能已经猜到,解决此问题的方法相同。 您将需要创建一个新的 Product 多维数据集维度和另一个 Order Details 度量值组的副本。

© . All rights reserved.