IBM Cognos 最佳实践

列出 IBM Cognos TM1 Server 中每个维度内的所有子集

技巧或技术;产品:IBM Cognos TM1 10.1;关注领域:财务管理

Comments

系列内容:

此内容是该系列 # 部分中的第 # 部分: IBM Cognos 最佳实践

敬请期待该系列的后续内容。

此内容是该系列的一部分:IBM Cognos 最佳实践

敬请期待该系列的后续内容。

免费下载:IBM® Cognos® Express V9.5 或者 Cognos® 10 Business Intelligence Developer Edition V10.1 试用版
下载更多的 IBM 软件试用版,并加入 IBM 软件下载与技术交流群组,参与在线交流。

简介

目的

在任何 IBM Cognos TM1 Server 中,各维度上都会构建许多子集。在设计 TM1 应用程序时,往往必须理解 TM1 服务器中现有的全部子集。本文将介绍创建包含所有维度的全部子集的逗号分隔文件 (.CSV) 的技术。随后您可以在 IBM Cognos Insight 中查看和分析这个 .CSV 文件。

适用性

IBM Cognos TM1 10.1 及其更高版本。

例外情况

无已知例外情况。

使用 TurboIntegrator 进程创建一个 .CSV 文件输出

这个 IBM Cognos TM1 TurboIntegrator (TI) 进程的输出结果就是一个 .CSV 文件。本文档将此 .CSV 文件命名为 SubsetCount.csv。您只需要创建并运行一个 TurboIntegrator 进程。此进程将创建一个 .CSV 文件,其中列出了所有维度各自的全部子集。

CSV 文件中的列

TI 进程输出的 .CSV 文件中将创建两个列,第 2.2 节将详细叙述相关内容。这两个列分别是:

  • Dimension_names
  • Subset_names

Subset_names 列中的子集名称属于 Dimension_names 列中对应的维度。随后,我们将观察如何将此文件导入为 IBM Cognos Insight 中的一个多维数据集,并查看此多维数据集。

创建 TurboIntegrator 进程

请按照以下步骤创建 TurboIntegrator 进程。

  1. 在 IBM Cognos TM1 Architect 中,单击需要处理的 TM1 Server 名称旁边的加号,展开此服务器。随后右键单击 Process 并选择 Create New Process
    演示 1:TM1 Architect Server Explorer - 规划示例服务器,突出显示了进程
    演示 1:TM1 Architect Server Explorer - 规划示例服务器,突出显示了进程
  2. 在 TurboIntegrator Process Editor 的 Data Source 选项卡中,接受 Datasource Type 的默认设置 None
    演示 2:TM1 Turbo Integrator - Data Source 选项卡 - 将 Datasource Type 设置为 None
    演示 2:TM1 Turbo Integrator - Data Source 选项卡 - 将 Datasource Type 设置为 None
  3. 单击 Advanced 选项卡,随后单击 Parameters 子选项卡。在 TurboIntegrator 进程中添加两个参数,如下方的演示 3 所示。这两个参数分别是:
    1. 参数名称:vDataDirectory
      类型:字符串
      默认值:C:\Program Files\IBM\cognos\tm1\PlanSamp
      提示问题:TM1 Server 的数据目录路径
    2. 参数名称:vOutputFile
      类型:字符串
      默认路径:C:\
      提示问题:输出文件 SubsetCount.csv 的路径
    演示 3:TM1 TurboIntegrator Editor Advanced 选项卡,显示了为参数定义的文件路径和提示问题
    演示 3:TM1 TurboIntegrator Editor Advanced 选项卡,显示了为参数定义的文件路径和提示问题
    演示 3:TM1 TurboIntegrator Editor Advanced 选项卡,显示了为参数定义的文件路径和提示问题
  4. 复制以下代码并将其粘贴到进程的 Prolog 过程中。
    #****Begin: Generated Statements***
    #****End: Generated Statements****
    
    # If the Allsubsets dimension exits then we delete it and again create it.
    
    IF(DimensionExists('AllSubsets')=1);
    DimensionDestroy('AllSubsets');
    ENDIF;
    DimensionCreate('AllSubsets');    
    
    IF(DimensionExists('Dimension_names')=1);
    DimensionDestroy('Dimension_names');
    endif;
    
    no_dimensions = DIMSIZ('}Dimensions');
    DimensionCreate('Dimension_names');
    DimensionElementDelete('}Dimensions','Dimension_names');
    
    dim_counter = 1;
    
    WHILE(dim_counter <= no_dimensions);
    dim_name=DIMNM('}Dimensions',dim_counter);
    
    # Skip the control dimensions 
    
    var1 = scan('}',dim_name);
    
    if(var1<>1);
    DimensionElementInsert('Dimension_names','',dim_name,'N');
    i=0;
    vFilenew='';
    compare='a';
    
    # Search for corresponding folder and .sub file for a dimension
    while(compare@<>'');
    
    vFile = WildCardFileSearch( vDataDirectory|'\'| dim_name | '}subs\'|
      '*.sub',vFilenew) ;
    result=fileExists( vDataDirectory | '\'| dim_name | '}subs\'| vFile);
    if(vFile@<>'');
    if(vFIle@<>'Default.sub');
    strlength=LONG(vFile);
    vSubsetfinal=DELET(vFile,strlength-3,4);
    DimensionElementInsert('AllSubsets','',vSubsetfinal,'N');
    
    endif;
    vFilenew=vFile;
    
    endif;
    if(vFile@='');
    compare='';
    endif;
    END;
    endif;
    
    dim_counter = dim_counter +1;
    END; 
    
    dim_counter=1;
    subset_counter=1;
    
    no_dim = DIMSIZ('Dimension_names');
    no_subsets = DIMSIZ('AllSubsets');
    
    ASCIIOutput(vOutputFile |'\'| 'SubsetCount.csv','Dimension_names','Subset_names');
    WHILE(subset_counter<=no_subsets);
    subset_name=DIMNM('AllSubsets',subset_counter);
    
    dim_counter_new=1;
    
    WHILE(dim_counter_new<=no_dim);
    dim_name1=DIMNM('Dimension_names',dim_counter_new);
    var_dim_name = scan('}',dim_name1);
    
    if(var_dim_name<>1);
    if(dim_name1@<>'AllSubsets');
    
    #If the subset exists for the dimension then write its name
    # in front of the dimension name in csv file
    if(SubsetExists(dim_name1,subset_name)=1);
    ASCIIOutput(vOutputFile |'\'| 'SubsetCount.csv',dim_name1,subset_name);
    endif;
    endif;
    endif;
    
    dim_counter_new=dim_counter_new+1;
    
    END;
    subset_counter=subset_counter+1;
    END;
  5. 为 TI 进程命名,随后保存此进程。单击 TI Editor 中的 Run 箭头,手动执行进程。执行此进程之后,您将获得 SubsetCount.csv 文件,A 列中给出了维度名称,B 列中给出了子集名称。
    演示 4:.CSV 输出文件视图,显示了维度名称(A 列)和子集名称(B 列)
    演示 4:.CSV 输出文件视图,显示了维度名称(A 列)和子集名称(B 列)
    演示 4:.CSV 输出文件视图,显示了维度名称(A 列)和子集名称(B 列)

将 .CSV 文件导入 IBM Cognos Insight

将 .CSV 文件导入 IBM Cognos Insight 的步骤

要将 .CSV 文件导入 IBM Cognos Insight,有两种方法可供选择。

  1. 启动 IBM Cognos Insight (CI)。
  2. 将 .CSV 文件拖放到 CI 工作区中。

另外一种方法是:

  1. 启动 IBM Cognos Insight。
  2. 单击 Get Data > Quick Import
  3. Open File 对话框中选择 .CSV 文件。

这将创建包含 Dimension_namesSubset_names 这两个维度的多维数据集。此外,多维数据集内还会创建一个 Count 指标,用于计算一个维度中的子集数量。

要查看对应维度的子集,只需将两个维度从内容窗格拖放到工作区即可。单击 SubsetCount widget 的 Widget Actions 按钮,清除 Listen to All Widgets 选项,获得包含以下四个 widget 的视图,如演示 5 所示。

  1. 一份交叉表报告,其中列出了 TM1 Server 中的维度名称,并提供了引用各维度的子集数量。
  2. 交叉表报告的图示。
  3. Dimension_names 维度。
  4. Subset_names 维度。

现在,选择 Dimension_names widget 中的维度时,只有 Subset_names widget 内选中的子集会出现在该维度中。其他子集名称将显示为灰色不可用。

演示 5:IBM Cognos Insight 显示了 TM1 服务器的每维度的子集
演示 5:IBM Cognos Insight 显示了 TM1 服务器的每维度的子集
演示 5:IBM Cognos Insight 显示了 TM1 服务器的每维度的子集

相关主题


评论

添加或订阅评论,请先登录注册

static.content.url=http://www.ibm.com/developerworks/js/artrating/
SITE_ID=10
Zone=Information Management
ArticleID=835424
ArticleTitle=IBM Cognos 最佳实践: 列出 IBM Cognos TM1 Server 中每个维度内的所有子集
publish-date=09172012