萬麗英 何素艷 曹宏舉
摘 要:Cognos TM1是一款基于內(nèi)存運(yùn)行的高性能OLAP產(chǎn)品,主要用于規(guī)劃、預(yù)算編制、預(yù)測(cè)、分析和記分卡的應(yīng)用。Cognos TM1的數(shù)據(jù)存儲(chǔ)于多維數(shù)據(jù)集模型(Cube)里,Cube由維度(Dimension)構(gòu)成。該文將介紹Cognos TM1 Architect創(chuàng)建維度的方法及相應(yīng)方法的優(yōu)缺點(diǎn),并提出一種通用的創(chuàng)建維度的新方法:利用TI創(chuàng)建維度—可擴(kuò)展的通用代碼法。
關(guān)鍵詞:聯(lián)機(jī)分析處理 多維數(shù)據(jù)集 維度
中圖分類號(hào):TP31 文獻(xiàn)標(biāo)識(shí)碼:A 文章編號(hào):1674-098X(2016)01(c)-0004-02
Abstract:Cognos TM1 is a high-performance OLAP products based on memory to run, it is mainly used for planning, budgeting, forecasting, analysis and scorecarding.Cognos TM1 stores data in the dataset model(Cube), Cube is made of dimensions.The paper describes the methods of creating dimension which uses Cognos TM1 Architect and the advantages and disadvantages of the methods, and proposes an improved common method: Create dimension using Turbo Integrator - Scalable common method
Key Words:OLAP;Cube;Dimension
維度是有關(guān)業(yè)務(wù)主要方面(例如產(chǎn)品、時(shí)間和區(qū)域)的一組廣泛相關(guān)數(shù)據(jù)。每個(gè)維度包括一個(gè)或多個(gè)層級(jí)(Hierarchy或Level),各個(gè)層級(jí)的成員可以是Consolidated,Simple或String類型。兩個(gè)或以上的維度構(gòu)成數(shù)據(jù)集(Cube),從數(shù)據(jù)瀏覽的角度,維度形成數(shù)據(jù)集視圖(View)的行、列和上下文,數(shù)據(jù)都存儲(chǔ)于維度的葉子成員(Level 0)。
以圖1月維度的數(shù)據(jù)作為例子數(shù)據(jù),該文介紹創(chuàng)建維度的多個(gè)方法。
1 利用Dimension Editor創(chuàng)建維度
這是TM1提供的一種創(chuàng)建維度的基本方法,通過該工具提供的菜單選項(xiàng)來手動(dòng)創(chuàng)建維度。利用該方法能夠?qū)崿F(xiàn)簡單維度的快速創(chuàng)建,在Demo或測(cè)試場景下有利于應(yīng)用的快速實(shí)施,但對(duì)于大型復(fù)雜的維度不適合使用。
2 利用TI創(chuàng)建維度—自動(dòng)生成代碼法
這仍是TM1提供的一種創(chuàng)建維度的基本方法,通過設(shè)置Variables的Contents,Child Variable等的屬性,在Tab【Advanced】自動(dòng)生成可以運(yùn)行的創(chuàng)建維度的代碼。優(yōu)點(diǎn):對(duì)于所有層級(jí)都是父子關(guān)系的維度定義,能較快速地通過設(shè)置屬性來創(chuàng)建維度,并且可以在自動(dòng)生成的代碼之后靈活追加定制代碼;缺點(diǎn):在維度定義內(nèi)容(層級(jí)和層級(jí)之間的父子關(guān)系)頻繁變更的場景下,TI必須做相應(yīng)的調(diào)整。
下面提出一種通用的創(chuàng)建維度的新方法:利用TI創(chuàng)建維度—可擴(kuò)展的通用代碼法。
3 利用TI創(chuàng)建維度—可擴(kuò)展的通用代碼法
新建TI并設(shè)置Data Source Name為例子數(shù)據(jù)文件,追加2個(gè)運(yùn)行參數(shù):pDimensionName為要?jiǎng)?chuàng)建的維度名。pDimensionDatasourceName為維度的數(shù)據(jù)源名。
將Tab【Variables】的【Contents】列全部設(shè)置為Other。
Tab【Advanced】的代碼如下:
【Prolog】
vDim = pDimensionName;
IF(DimensionExists(vDim) = 0);
DimensionCreate(vDim);
ELSE;
DimensionDeleteAllElements(vDim);
ENDIF;
DIMENSIONSORTORDER(vDim, 'BYINPUT', 'ASCENDING', 'BYHIERARCHY', 'ASCENDING');
DatasourceNameForServer = pDimensionDatasourceName;
【Metadata】
IF(Level2 @<> '');
DIMENSIONELEMENTINSERT(vDim, '', Level2, 'n');
ENDIF;
IF(Level1 @<> '');
DIMENSIONELEMENTINSERT(vDim, '', Level1, 'n');
ENDIF;
IF(Level0 @<> '');
DIMENSIONELEMENTINSERT(vDim, '', Level0, 'n');
ENDIF;
#Level0
IF(Level0 @= '');
# Do nothing
ELSEIF(Level1 @<> '');
DIMENSIONELEMENTCOMPONENTADD(vDim, Level1, Level0, 1);
ELSEIF(Level2 @<> '');
DIMENSIONELEMENTCOMPONENTADD(vDim, Level2, Level0, 1);
ENDIF;
#Level1
IF(Level1 @= '');
# Do nothing
ELSEIF(Level2 @<> '');
DIMENSIONELEMENTCOMPONENTADD(vDim, Level2, Level1, 1);
ENDIF;
代碼運(yùn)行后創(chuàng)建維度如圖2所示。這段代碼對(duì)于維度定義為3層及以下的內(nèi)容,都能正確處理。如果實(shí)際應(yīng)用中維度的定義層次更多,則可以預(yù)想所有維度的最大層次,以最大層次作為數(shù)據(jù)源擴(kuò)展上面的代碼,就可以實(shí)現(xiàn)幾乎全部維度的創(chuàng)建。
該文提出的這種可擴(kuò)展的通用代碼法在相當(dāng)大的程度上實(shí)現(xiàn)了模塊化,幾乎不依賴于維度內(nèi)容的定義。即使維度定義內(nèi)容頻繁變更,只要保證變更后的維度層級(jí)在預(yù)先定義好的層級(jí)以內(nèi),無需更改TI。
4 結(jié)語
以上用一個(gè)結(jié)構(gòu)簡單的維度為例,介紹了維度創(chuàng)建的3種方法。在實(shí)際的應(yīng)用中經(jīng)常會(huì)遇到非常復(fù)雜的維度,或者維度結(jié)構(gòu)經(jīng)常改變,這種情況下,利用Dimension Editor或自動(dòng)生成代碼法創(chuàng)建維度,操作會(huì)變得非常復(fù)雜,也難以保證正確性。而利用該文提出的可擴(kuò)展的通用代碼法創(chuàng)建維度,維護(hù)工作將會(huì)變得更高效。
參考文獻(xiàn)
[1] Cognos TM1 Performance Modeler User Guide10.1.0[EB/OL].http://www.ibm.com/support/knowledgecenter/SS9RXT_10.1.0/com.ibm.swg.ba.cognos.prfmdl_ug.10.1.0.doc/c_prfmdl_creating_dimensions_ch.html lang=en.