使用MDX實現多維關聯分析
2024-07-21 02:06:17
供稿:網友
 
在經過了痛苦的數據倉庫與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
這樣強關聯分析算法就實現了。
以上為個人心得,如有更好的實現方法,請回復告之。