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