2014-06-20 52 views
2

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

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

谢谢。

+0

我不敢相信有人在那里甚至知道Cognos是什么!我认为我的公司是唯一使用它的公司。无论如何...你可以看看“分析”。这应该给你一个结果样本以及你正在寻找的数据类型。 – durbnpoisn

+0

你在询问很多不同的信息。报告元数据被隐藏在内容存储库中,并且不容易出去,尽管一些Google搜索可能会给您一些疑问。列定义,您可能不得不退出各个FM模型。 – Andrew

+0

@durbnpoisn - 是的,它在这里,我被我的部门分享了(暂时)。感谢分析技巧。 – jabs

回答

6

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

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,我相信在IBM Cognos 8 CMOBJNAMES_BASE表实际上是一个名为“CMOBJNAMES”,不_基础。

报表元数据作为XML存储在CMOBJPROPS7的'SPEC'列中。您可以解析此XML,以便删除报告中使用的列。这不是一个简单的任务。

如果您有时间而不是金钱,您可以编写自己的代码来解析该XML。如果你有更多的钱比时间,你可以购买第三方程序来完成这一点,如Motio或BSP Metamanager。

上面的查询对于构建一个干净的列列表不太有用,但对搜索特定的数据项很有用。例如,您想要在数据源中更改列,但不确定哪个报表使用该列。运行上面的查询,并搜索数据项。它将嵌入在Cognos MDX格式的XML中,即。 [Presentation View]。[Sales Summary]。[Sales]

编辑:如下所示,这是一个包含文件夹路径的查询。

-- 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; 
+0

我一直在寻找专门的列(标签),所以这个查询没有完全捕获它 - 此外,我被告知我们没有SDK,我明白这是访问内容存储所必需的。不管怎么说,还是要谢谢你。查询+1。 – jabs

+0

SDK不需要查询内容存储。内容存储库是Cognos自己创建的DB2数据库(eek,适用于演示,并非真正用于生产),或者更可能是您自己创建并指定Cognos的数据库。使用Cognos使用的登录到达内容存储库,您将拥有所有您需要的访问权限。检查返回的元数据,它具有用于构建最终网页的数据,因此它可能包含您正在查找的标签。 – Damienknight

+1

感谢Damienknight,查询已帮助。但是,我想知道是否有添加报表名称所在文件夹的方法? 例如,一些用户已经创建了一个文件夹,然后是一个子文件夹,然后保存报告。我们有一些营业额,事情没有记录,他们应该是。我需要根据报告中生成的以前保存的Excel文件中的列标题查找报告。 谢谢... – CWinKY