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