使用MDX實現多維關聯分析

銀河使者發表於2008-03-08
在經過了痛苦的資料倉儲與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

這樣強關聯分析演算法就實現了。

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/12921506/viewspace-201764/,如需轉載,請註明出處,否則將追究法律責任。

相關文章