使用MDX实现多维关联分析
使用MDX实现多维关联分析 在经过了痛苦的数据仓库与OLAP基础知识学习之后,在老板的声声催促下,小心翼翼地创建了数据仓库,设计了通用分析型的OLAP分析界面。
于是心中暗喜“哈哈,可以交差了。”,因为按照《需求说明书》里列出的功能项,均已实现。拿着这个产品来到客户方演示之后,客户连说
了几个“No”(怎么能这样呢,一点面子都不给?好歹我从一个数据仓库的文盲到做出这个产品也花费了不少的时间呀)。接下来,客户提出
了几个要求,要对数据进行智能分析,具体的要求可能就像诸位曾经经历或正在经历的一样吧。好吧,就让我试试去做智能分析。
首先,我们来完成关联分析。对了,我记得数据挖掘原理中介绍了关联分析,经过一段时间的苦读与试验,这个购物篮的例子还是没有带给我
多少启发?我用的是AS,里面只有两个数据挖掘算法呀:决策树与聚类。我不太清楚这两个算法与关联分析如何联系在一起。接下来的几日,
我就在查找与阅读数据挖掘及关联分析中渡过(有点浪费时间吧,不过老板不愿意花钱请一个老手来做这个项目,没有办法,只有摸着石头过
河了)。这天,我痛苦得终于放下数据挖掘方面的书籍,重新打开AS帮助文档,一边阅读着MDX部分,一边在自制的MDX查询分析器里做着试验
。突然灵机一动,为什么不试试用MDX来实现分析呢?说干就干,一番试验下来之后,嘿嘿,还真成功了。下面说是我的成功步骤:
还是先说说数据仓库的结构吧:
SampleCube
--Dim1
----Dim1Hier1
------Dim1Lev1
------Dim1Lev2
------...
----Dim1Hier2
--Dim2
----Dim2Hier1
-------Dim2Lev1
-------Dim2Lev2
----Dim2Hier2
...
--measures
----Sum1
接下来,定义关联分析中的支持度--可信度指标;用MDX的with子句来实现
要实现Dim1.Dim1Lev1与Dim2.Dim2Lev1的关联分析,定义如下:
with
member [measures].[Dim1Lev1Sup] as '([Dim1].[Dim1Hier1].[Dim1Lev1].CurrentMember, [Dim2].[Dim2Hier1].[所有 Dim2],
[Sum1])/([Dim1].[Dim1Hier1].[所有 Dim1], [Dim2].[Dim2Hier1].[所有 Dim2],[sum1])'
member [measures].[Dim2Lev1Sup] as '([Dim2].[Dim2Hier1].[Dim2Lev1].CurrentMember,[Dim1].[Dim1Hier1].[所有
Dim1],[Sum1])/([Dim2].[Dim2Hier1].[所有 Dim2], [Dim1].[Dim1Hier1].[所有 Dim1], [Sum1])'
member [measures].[置信度] as '([Dim1].[Dim1Hier1].[Dim1Lev1].CurrentMember,
[Dim2].[Dim2Hier1].[Dim2Lev1].CurrentMember,[Sum1])/([Dim1].[Dim1Hier1].[所有 Dim1], [Dim2].[Dim2Hier1].[所有 Dim2], [Sum1])'
然后用select语句实现分析,设Dim1Lev1Sup的最小支持度为5%,Dim2Lev1Sup的最小支持度为1%,实现强关联分析(即置信度大于1).
select {[measures].[Sum1],[置信度], [measures].[Dim1Hier1Sup], [measures].[Dim2Hier1Sup]} on columns,
order(filter({[Dim1].[Dim1Hier1].[Dim1Lev1].Members * [Dim2].[Dim2Hier1].[Dim2Lev1].Members},[measures].[Dim1Lev1Sup] > 0.05
and [measures].[Dim2Lev1Sup] > 0.01 and ([置信度]/([measures].[Dim1Lev1Sup]* [measures].[Dim2Lev1Sup]) > 1)), [Sum1], bdesc)
on rows from SampleCube
这样强关联分析算法就实现了。
以上为个人心得,如有更好的实现方法,请回复告之。