萬麗英 何素艷 曹宏舉

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