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