【问题标题】:Cognos 8 Query to find all Report and Column NamesCognos 8 查询以查找所有报告和列名称
【发布时间】:2014-06-20 15:28:34
【问题描述】:

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

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

谢谢。

【问题讨论】:

  • 我不敢相信有人甚至知道 Cognos 是什么!我以为我的公司是唯一使用它的公司。无论如何...您可以查看“分析”。这应该会给你一个结果样本以及你正在寻找的数据类型。
  • 您要求提供很多不同的信息。报告元数据隐藏在 Content Store 中,不容易取出,尽管一些谷歌搜索可能会得到一些查询。列定义,您可能必须从单个 FM 模型中提取出来。
  • @durbnpoisn - 是的,它就在这里,我(暂时)被我部门的份额所困。感谢您提供有关分析的提示。
  • @durbnpoisn 是的,我们 Cognos 用户确实潜伏在 Stacks 中。在 stackoverflow 中,很多特定于应用程序的问题在此处被拒绝,但 SQL、框架和报告问题经常得到解决。顺便说一句,Cognos 是领先的商业智能工具。许多公司将其用于报告。精明的公司正在将其用于分析。借助 Cognos Express,小型商店现在也进入了 Cognos。你不是少数。
  • 根据您的预算,您可能想从 MotioPi motio.com/content/motiopi-cognos-administration-tools 购买该工具。 Cognos 与任何其他企业报告工具一样,经常受到指责,但它背后的业务支持并不是工具。垃圾进垃圾出。

标签: reporting cognos cognos-8


【解决方案1】:

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

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。如果您的钱多于时间,您可以购买第三方程序来完成此任务,例如 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;

【讨论】:

  • 我正在寻找列(标签),所以这个查询没有完全捕获它 - 另外,我被告知我们没有我理解的 SDK 访问内容存储。不管怎么说,还是要谢谢你。 +1 查询。
  • 查询内容存储不需要SDK。内容存储要么是 cognos 自己创建的 DB2 数据库(嗯,适合演示,而不是真正用于生产),或者更可能是您自己创建并指向 Cognos 的数据库。使用 Cognos 使用的登录名来访问内容存储,您将拥有所需的所有访问权限。检查返回的元数据,它包含用于构建最终网页的数据,因此它可能包含您正在寻找的标签。
  • 感谢 Damienknight,查询已经有所帮助。但是,我想知道是否有办法添加包含报告名称的文件夹?例如,一些用户创建了一个文件夹,然后创建了一个子文件夹,然后保存了报告。我们有一些营业额,但事情并没有像应有的那样被记录下来。我需要根据以前保存的 Excel 文件中的列标题来定位报告,该文件是从报告生成的。谢谢...
  • 这是个好问题。我继续并更新了答案以包含我编写的查询,该查询也显示文件夹路径。
【解决方案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

【讨论】:

  • 您使用的是哪个版本的 Cognos?我最近测试了这个脚本,它可以在 11r9 中运行。我猜你是在 11.1 还是 cognos express 的某个版本?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-09-23
  • 1970-01-01
  • 2017-02-08
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多