IBM Cognos 10 - 全局重命名表列的简单方法?

时间:2014-04-24 16:19:20

标签: sdk rename cognos

我的客户已决定要重命名一个非常常用的数据项名称。 因此,例如,数据库有一个名为“Cost”的列,他们在一堆报告中看到“Cost”。 客户现在希望到处都能看到“净成本”。 因此,我们需要更改“成本”的每次出现并将其更改为“净成本”

我可以在Framework Manager中轻松完成,我甚至可以运行Tools>报告依赖关系以查找使用“成本”列的所有报告。但如果有4,000个,那么更新它们需要做很多工作。

一个想法是将整个内容存储库部署到Cognos Deployment zip文件中,然后将其提取出来。进行全球搜索&替换XML。但那将是凌乱的&危险。

选项2是使用MotioPI进行搜索&更换。我不认为客户会因为这项任务而购买此产品。

还有其他选择吗?

  • 有没有人在Cognos SDK中写过任何可以重命名的内容?
  • 有人调查了Content Store数据库的程度 他们可以对SQL中的所有报表规范进行重命名吗?
  • 还有其他我忽略的选择吗?

任何想法都会受到欢迎......

3 个答案:

答案 0 :(得分:0)

你的第一个选择是要走的路。这基本上归结为XML查找和替换方案。您需要仅隔离单词" Cost"的实例。哪些与你有关。这可能涉及开始和结束标记。

要更改报告中的数据源参考,您需要查找并替换三部分名称[Presentation Layer].[Namespace].[Cost]。如果项目上有过滤器,则它们可能只引用查询中的一个部件名称。同样,任何派生的查询都会引用两部分名称。通过查看XML报告规范并找出如何隔离文本来处理这些内容。

我假设您的列名设置为从模型继承商家名称而不是硬编码(Source Type应该是Data Item Label,而不是Text)。如果没有,您也需要处理这些问题。查看XML,您会看到<staticValue>Cost</staticValue>

因为你有备份,所以并不是很危险。只需多次通过,每次通过尽可能多的查找和替换。

Motio只会查看代码中的值,因此您无法隔离Cost,因此无法将其用于此目的。但是,在查找和替换后对报告进行大规模验证会很方便。这一年的单座位许可证可以通过它可以节省的开发时间来证明。

答案 1 :(得分:0)

您是否尝试过使用DRU? (http://www-01.ibm.com/support/docview.wss?uid=swg24021248) 我之前使用过这个工具来做你正在描述的事情。

祝你好运。

答案 2 :(得分:0)

您至少可以使用以下内容搜索Content Store(v10.2.1)中的文本:

set define off
select distinct T4.name as folder_name, T2.name as report_name
from cmobjprops7 T1
inner join cmobjnames T2 on T1.cmid=T2.cmid
inner join cmobjects T3 on T1.cmid=T3.cmid
inner join cmobjnames T4 on T3.pcmid=T4.cmid
inner join (   -- only want the latest version (this still shows reports that have been deleted)
     Select T4.name as folder_name, T2.name as report_name, max(T3.modified) as latest_version_date
     from cmobjnames T2 
          inner join cmobjects T3 on T2.cmid=T3.cmid
          inner join cmobjnames T4 on T3.pcmid=T4.cmid
     Where T2.Name like ‘%myReport%’ -- search only reports with 'myReport' i the name
        and substr(T4.name,1,1) in ('Project Zeus','Project Jupiter')   -- search only folders with this in the name
     Group by T4.name, T2.name
     ) TL on TL.folder_name=T4.name and TL.report_name=T2.name and TL.latest_version_date=T3.modified
where T1.spec like '%[namespace].[column_name]%'        -- text you want to find
and substr(T4.name,1,2) in ('Project Zeus','Project Jupiter')
    order by 1 desc, 2;