SSAS中不同維度不同聚合的解決
SSAS中的聚合方式設(shè)定:
SSAS一個Cube中的一個度量的聚合方式設(shè)置方法:
也就是說,Cube中的聚合方式是針對度量來指定的。
問題:
針對一種特殊的需求,要求先按照時間做平均聚合運算,再根據(jù)空間做求和運算。
其實這種說法字面上看起來本身就很矛盾,所以得套到一個具體的場景中。
比如:我有一個數(shù)據(jù)倉庫統(tǒng)計某幾個小區(qū)的某一時間粒度(這里定義成季度)的住戶數(shù)量,里面的數(shù)據(jù)格式大致如下:
2011年1季度,1100,A小區(qū)
2011年2季度,1000,A小區(qū)
2011年3季度,1100,A小區(qū)
2011年4季度,1000,A小區(qū)
2011年1季度,1200,B小區(qū)
2011年2季度,1200,B小區(qū)
2011年3季度,1100,B小區(qū)
2011年4季度,1100,B小區(qū)
先從時間這個角度來分析數(shù)據(jù),A小區(qū)在2011年的住戶數(shù),很明顯應(yīng)該是取平均值(當(dāng)然也有取第四季度的值的統(tǒng)計方法,這里只考慮平均值的統(tǒng)計方法),應(yīng)該是1050,B小區(qū)的就應(yīng)該是1150。
然后再從空間的角度來分析數(shù)據(jù),所有小區(qū)(這里假定只有A和B)的在2011年的住戶數(shù),應(yīng)該是1050+1150=2200。很明顯這是一個匯總算法。
這就是典型的先根據(jù)時間做平均運算,再根據(jù)空間做匯總運算,而且這里很明顯,SSAS默認(rèn)的聚合方式的指定是無法實現(xiàn)這種統(tǒng)計需求的。
解決方法:
通過計算公式,或者新建命名成員。
首先,建立測試表。
然后,根據(jù)這個DW結(jié)構(gòu)建立測試Cube。
其中指標(biāo)的聚合方式按照默認(rèn)的Sum.
其中時間維度有如下的層次結(jié)構(gòu):
建立命名成員,表達(dá)式關(guān)鍵的部分是那個求葉級節(jié)點總和,從而求平均數(shù)的公式。
處理瀏覽
如圖:縱向的時間聚合運算是用的平均值運算,而橫向的區(qū)域聚合運算用的是求和運算。
需要注意的地方:
要留意維度中的null成員。默認(rèn)是帶null成員的,所以需要手動把null處理掉,否則會導(dǎo)致函數(shù)算出的數(shù)值不準(zhǔn)確,因為Count出的數(shù)把null也算上了所以分母會加1。
總結(jié):
統(tǒng)計的需求總是很莫名其妙甚至看上去不合邏輯,但實際聯(lián)系需求卻又很合理。就算任何一家BI產(chǎn)品提供商恐怕也很難顧及到所有的需求,不過都會給我們留下變通解決的接口或者方法。
原文鏈接:http://www.cnblogs.com/aspnetx/archive/2011/04/18/2020210.html
【編輯推薦】