BI筆記之---SSAS中關於某一度量需要先後根據不同維度的不同聚合方法的解決

SSAS中的聚合方式設定:

SSAS一個Cube中的一個度量的聚合方式設置方法:

clip_image002

也就是說,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默認的聚合方式的指定是無法實現這種統計需求的。

 

解決方法:

通過計算公式,或者新建命名成員。

首先,建立測試表。

clip_image004

然後,根據這個DW結構建立測試Cube。

其中指標的聚合方式按照默認的Sum.

clip_image006

其中時間維度有如下的層次結構:

clip_image008

建立命名成員,表達式關鍵的部分是那個求葉級節點總和,從而求平均數的公式。

clip_image010

處理瀏覽

clip_image012

如圖:縱向的時間聚合運算是用的平均值運算,而橫向的區域聚合運算用的是求和運算。

 

需要注意的地方:

要留意維度中的null成員。默認是帶null成員的,所以需要手動把null處理掉,否則會導致函數算出的數值不準確,因爲Count出的數把null也算上了所以分母會加1。

 

總結:

統計的需求總是很莫名其妙甚至看上去不合邏輯,但實際聯繫需求卻又很合理。就算任何一家BI產品提供商恐怕也很難顧及到所有的需求,不過都會給我們留下變通解決的接口或者方法。

 

參考項目下載

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章