Cognos 8 查询查找所有报表和列名称

问题描述 投票:0回答:3

我想查询 Cognos 8 中的元数据以查找所有报告和列名称。如果可能的话,我想包含列定义。

我可以使用 Cognos 报告来执行此操作还是需要查询某个存储库?

谢谢。

reporting cognos cognos-8
3个回答
9
投票

您可以使用以下查询从内容存储中选择报告列表:

SELECT     CMOBJNAMES_BASE.NAME AS ObjName, CMOBJECTS.PCMID, CMCLASSES.NAME AS ClassName, CMOBJPROPS7.spec
FROM       CMOBJECTS 
JOIN       CMOBJNAMES_BASE ON CMOBJECTS.CMID    = CMOBJNAMES_BASE.CMID
JOIN       CMCLASSES       ON CMOBJECTS.CLASSID = CMCLASSES.CLASSID
LEFT JOIN  CMOBJPROPS7     ON CMOBJECTS.CMID = CMOBJPROPS7.CMID
WHERE     CMOBJECTS.CLASSID IN (10, 37)
ORDER BY CMOBJECTS.PCMID;

我在 Cognos 10 中使用它。我相信在 cognos 8 中,CMOBJNAMES_BASE 表实际上命名为“CMOBJNAMES”,没有 _BASE。

更新:已经过测试并可在 Cognos 11r9 中运行。

报告元数据以 XML 形式存储在 CMOBJPROPS7 的“SPEC”列中。 您可以解析此 XML 以删除报告中使用的列。 这不是一个简单的任务。

如果您有时间但没有钱,您可以编写自己的代码来解析该 XML。 如果您有更多的钱和时间,您可以购买第 3 方程序来完成此任务,例如 Motio 或 BSP Metamanager。

上面的查询对于构建干净的列列表不太有用,但对于搜索特定数据项非常有用。 例如,您想要更改数据源中的列,但您不确定哪个报表使用该列。 运行上面的查询,并搜索数据项。 它将以 Cognos MDX 格式嵌入到 XML 中,即。 [演示文稿视图].[销售摘要].[销售]

编辑:根据下面的要求,这是一个包含文件夹路径的查询。

-- List of Reports, the folder they are in, and the package they are using
select distinct temp2.name as package,temp1.folder,temp1.name from
(SELECT    temp.PARENTNAME AS FOLDER,CMOBJECTS.PCMID,CMOBJNAMES.CMID, CMOBJNAMES.LOCALEID, CMOBJNAMES.MAPDLOCALEID, CMOBJNAMES.ISDEFAULT, CMOBJNAMES.NAME, 
                      CMOBJECTS.CLASSID
FROM         CMOBJNAMES INNER JOIN
                      CMOBJECTS ON CMOBJNAMES.CMID = CMOBJECTS.CMID
INNER JOIN
(SELECT P.CMID AS PARENT,P.NAME AS PARENTNAME FROM CMOBJNAMES P where P.LOCALEID between 24 and 52) temp
ON CMOBJECTS.PCMID = TEMP.PARENT
WHERE     (CMOBJECTS.CLASSID = 10)
AND SUBSTR(TEMP.PARENTNAME,1,1) NOT IN ('1','2','3','4','5','6','7','8','9') AND
TEMP.PARENTNAME NOT LIKE 'Backup%') temp1
inner join
(SELECT  CMREFNOORD1.CMID AS PID, CMREFNOORD1.REFCMID, CMOBJNAMES.NAME
FROM         CMREFNOORD1 INNER JOIN
                      CMOBJECTS ON CMREFNOORD1.REFCMID = CMOBJECTS.CMID INNER JOIN
                      CMOBJNAMES ON CMOBJECTS.CMID = CMOBJNAMES.CMID
WHERE     (CMREFNOORD1.PROPID = 31 AND CMOBJNAMES.LOCALEID between 24 and 52)) temp2
on temp1.cmid = temp2.pid and LOCALEID between 24 and 52;

2
投票

不确定这是否会对任何人有帮助,但我们的版本没有名为 CMOBJNAMES_BASE 的表。

这对我有用:

select ob2.cmid, c.name as classname, n.name as objectname, o.DELIVOPTIONS as deliveryoptions, z2.name as owner
from CMOBJPROPS2 p
inner join CMOBJPROPS26 o on p.cmid=o.cmid
inner join CMOBJECTS ob on ob.cmid=o.cmid
inner join CMOBJECTS ob2 on ob.pcmid=ob2.cmid
inner join CMOBJNAMES n on n.cmid=ob2.cmid
inner join CMCLASSES c on ob2.classid=c.classid
left join CMREFNOORD2 z1 on z1.cmid = p.cmid
left join CMOBJPROPS33 z2 on z2.CMID = z1.REFCMID
where ACTIVE = 1 order by z2.name, objectName

0
投票

我正在开发一个项目,需要为 Cognos 中的所有报告构建报告目录。我最近获得了对 Cognos Content Store(SQl 服务器数据库)的访问权限,因此一直在浏览这些表..幸运的是我找到了这个线程:)

Micheal Singer 发布的 sql 脚本适用于我们的 Cognos 版本(v 7.7),但我只是想问 where 子句中的“active =1”到底意味着什么,因为我正在查看不同的活动状态标志CMOBJECTS 表 ..

其中disabled = 0或disabled为null(获取活动记录)

另外,我看到提到通过 xml 获取每个报告的列名称,但是 CMOBJPROOPS13 表没有给出每个报告中使用的所有参数/列名称和顺序的列表吗?

我需要获取每个报告运行的次数、运行者、连接到的源以及任何其他相关信息,以便我们可以评估哪些报告将迁移到新系统。任何用于此目的的表格指针将不胜感激。内容存储中是否有可用表格的文档?我似乎无法在网上找到任何内容(很多损坏的链接)。

仅供参考,这是 Micahael Singer 发布的 sql 脚本,适用于我们在 cognos 7.7 中..

select ob2.cmid, c.name as classname, n.name as objectname, o.DELIVOPTIONS as 
deliveryoptions, z2.name as owner
from CMOBJPROPS2 p
inner join CMOBJPROPS26 o on p.cmid=o.cmid
inner join CMOBJECTS ob on ob.cmid=o.cmid
inner join CMOBJECTS ob2 on ob.pcmid=ob2.cmid
inner join CMOBJNAMES n on n.cmid=ob2.cmid
inner join CMCLASSES c on ob2.classid=c.classid
left join CMREFNOORD2 z1 on z1.cmid = p.cmid
left join CMOBJPROPS33 z2 on z2.CMID = z1.REFCMID
where ACTIVE = 1 order by z2.name, objectName
© www.soinside.com 2019 - 2024. All rights reserved.