Cognos TM1创建维度的一种通用方法

2016-05-30 10:48万丽英何素艳曹宏举
科技创新导报 2016年3期
关键词:维度

万丽英 何素艳 曹宏举

摘 要: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.

猜你喜欢
维度
理解“第三次理论飞跃”的三个维度
认识党性的五个重要维度
“意识形态终结论”三重维度批判
用维度展现一个颠倒的世界
光的维度
“五个维度”解有机化学推断题
发展的新维度
精准扶贫的四个维度
人生三维度