如何从Cognos获取查询定义?

时间:2016-12-10 00:18:06

标签: sql cognos

是否可以查看Cognos查询中使用的SQL?

e.g。要获取报告的XML定义,您可以使用以下SQL(从https://stackoverflow.com/a/24335760/361842复制):

let userPhoneNumbers = Set(users.lazy.map{ $0.phoneNumber })
let filteredContacts = self.contacts.filter{ !userPhoneNumbers.contains($0.phoneNumber) }

...从该XML中,您经常可以找到提供基础SQL的SELECT CMOBJNAMES.NAME AS ObjName , CMOBJECTS.PCMID , CMCLASSES.NAME AS ClassName , cast(CMOBJPROPS7.spec as xml) ReportDefinition FROM CMOBJECTS INNER JOIN CMOBJNAMES ON CMOBJECTS.CMID = CMOBJNAMES.CMID INNER JOIN CMCLASSES ON CMOBJECTS.CLASSID = CMCLASSES.CLASSID LEFT OUTER JOIN CMOBJPROPS7 ON CMOBJECTS.CMID = CMOBJPROPS7.CMID WHERE CMOBJECTS.CLASSID IN (10, 37) ORDER BY CMOBJECTS.PCMID; 元素。但是,在使用现有查询的地方,很难看到数据的来源。

我喜欢上述SQL的等价物来查找查询定义;虽然到目前为止还没有找到任何这样的专栏。

如果失败了,有没有办法通过UI找到这个定义?我查看了查询工作室,发现了查询sqltext,其中提供了有关查询列的一些信息,但没有使数据的来源清晰。

注意:通过查询,我可以在查询工作室的以下屏幕截图中引用lineage之类的内容:

Cognos Queries

...将在Cognos报告中引用,例如:

R5BZDDAN_GRAPH

更新

为了他人的利益,这里是上述代码的修订版,用于撤回报告定义:

<query name="Q_DEMO">
  <source>
    <model/>
  </source>
  <selection autoSummary="false">
    <dataItem aggregate="none" name="REG_REG" rollupAggregate="none">
      <expression>[AdvRepData].[Q_R5BZDDAN_GRAPH].[REG_REG]</expression>
    </dataItem>
    <dataItem aggregate="none" name="REG_ORG" rollupAggregate="none">
      <expression>[AdvRepData].[Q_R5BZDDAN_GRAPH].[REG_ORG]</expression>
    </dataItem>
    <!-- ... -->

1 个答案:

答案 0 :(得分:1)

术语:

  • 查询主题可以被视为表格
  • 查询项可以视为列

对于您的示例,SQL 可能R5BZDDAN_GRAPH查询主题中定义,而该主题又在Framework Manager模型中定义。框架管理器模型在.cpf文件中定义,该文件根本不在内容存储库中。 (虽然它是一个XML文件)。此文件已“发布”到Cognos以生成包。

在实际的cognos服务器(.cqe文件)上还有一个框架管理器文件的缓存版本,尽管通常不建议依赖此

我说你的SQL 可能被定义。如果查询主题是 SQL 查询主题,那么它就是定义的位置。如果查询主题是模型查询主题,那么它只是来自其他查询主题的查询项的列表。这些可能来自许多其他查询主题,然后在Framework Manager中定义了连接。因此,没有定义实际的SQL - 它在运行时生成

我不确定您的最终要求,但还有其他三种获取SQL的方法:

  • 在Report Studio中,您可以“在每个查询上显示生成的SQL”
  • 在Framework Manager中,您可以选择一个或多个查询主题并显示生成的SQL
  • 您可以在数据库上使用监视工具来查看正在提交的SQL

如果您只想知道报告中如何生成数字,最直接的解决方案是监控您的数据库。

最后请记住,在极少数情况下,Framework Manager中定义的SQL可能会被编写报告的方式改变