萬麗英 何素艷 曹宏舉
摘 要:Cognos TM1是一款基于內(nèi)存運行的高性能OLAP產(chǎn)品,主要用于規(guī)劃、預(yù)算編制、預(yù)測、分析和記分卡的應(yīng)用。Cognos TM1的數(shù)據(jù)存儲于多維數(shù)據(jù)集模型(Cube)里,Cube由維度(Dimension)構(gòu)成。該文將介紹Cognos TM1 Architect創(chuàng)建維度的方法及相應(yīng)方法的優(yōu)缺點,并提出一種通用的創(chuàng)建維度的新方法:利用TI創(chuàng)建維度—可擴展的通用代碼法。
關(guān)鍵詞:聯(lián)機分析處理 多維數(shù)據(jù)集 維度
中圖分類號:TP31 文獻標(biāo)識碼:A 文章編號: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)品、時間和區(qū)域)的一組廣泛相關(guān)數(shù)據(jù)。每個維度包括一個或多個層級(Hierarchy或Level),各個層級的成員可以是Consolidated,Simple或String類型。兩個或以上的維度構(gòu)成數(shù)據(jù)集(Cube),從數(shù)據(jù)瀏覽的角度,維度形成數(shù)據(jù)集視圖(View)的行、列和上下文,數(shù)據(jù)都存儲于維度的葉子成員(Level 0)。
以圖1月維度的數(shù)據(jù)作為例子數(shù)據(jù),該文介紹創(chuàng)建維度的多個方法。
1 利用Dimension Editor創(chuàng)建維度
這是TM1提供的一種創(chuàng)建維度的基本方法,通過該工具提供的菜單選項來手動創(chuàng)建維度。利用該方法能夠?qū)崿F(xiàn)簡單維度的快速創(chuàng)建,在Demo或測試場景下有利于應(yīng)用的快速實施,但對于大型復(fù)雜的維度不適合使用。
2 利用TI創(chuàng)建維度—自動生成代碼法
這仍是TM1提供的一種創(chuàng)建維度的基本方法,通過設(shè)置Variables的Contents,Child Variable等的屬性,在Tab【Advanced】自動生成可以運行的創(chuàng)建維度的代碼。優(yōu)點:對于所有層級都是父子關(guān)系的維度定義,能較快速地通過設(shè)置屬性來創(chuàng)建維度,并且可以在自動生成的代碼之后靈活追加定制代碼;缺點:在維度定義內(nèi)容(層級和層級之間的父子關(guān)系)頻繁變更的場景下,TI必須做相應(yīng)的調(diào)整。
下面提出一種通用的創(chuàng)建維度的新方法:利用TI創(chuàng)建維度—可擴展的通用代碼法。
3 利用TI創(chuàng)建維度—可擴展的通用代碼法
新建TI并設(shè)置Data Source Name為例子數(shù)據(jù)文件,追加2個運行參數(shù):pDimensionName為要創(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;
代碼運行后創(chuàng)建維度如圖2所示。這段代碼對于維度定義為3層及以下的內(nèi)容,都能正確處理。如果實際應(yīng)用中維度的定義層次更多,則可以預(yù)想所有維度的最大層次,以最大層次作為數(shù)據(jù)源擴展上面的代碼,就可以實現(xiàn)幾乎全部維度的創(chuàng)建。
該文提出的這種可擴展的通用代碼法在相當(dāng)大的程度上實現(xiàn)了模塊化,幾乎不依賴于維度內(nèi)容的定義。即使維度定義內(nèi)容頻繁變更,只要保證變更后的維度層級在預(yù)先定義好的層級以內(nèi),無需更改TI。
4 結(jié)語
以上用一個結(jié)構(gòu)簡單的維度為例,介紹了維度創(chuàng)建的3種方法。在實際的應(yīng)用中經(jīng)常會遇到非常復(fù)雜的維度,或者維度結(jié)構(gòu)經(jīng)常改變,這種情況下,利用Dimension Editor或自動生成代碼法創(chuàng)建維度,操作會變得非常復(fù)雜,也難以保證正確性。而利用該文提出的可擴展的通用代碼法創(chuàng)建維度,維護工作將會變得更高效。
參考文獻
[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.