是否可以查看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报告中引用,例如:
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>
<!-- ... -->
答案 0 :(得分:1)
术语:
对于您的示例,SQL 可能在R5BZDDAN_GRAPH
查询主题中定义,而该主题又在Framework Manager模型中定义。框架管理器模型在.cpf
文件中定义,该文件根本不在内容存储库中。 (虽然它是一个XML文件)。此文件已“发布”到Cognos以生成包。
在实际的cognos服务器(.cqe
文件)上还有一个框架管理器文件的缓存版本,尽管通常不建议依赖此
我说你的SQL 可能被定义。如果查询主题是 SQL 查询主题,那么它就是定义的位置。如果查询主题是模型查询主题,那么它只是来自其他查询主题的查询项的列表。这些可能来自许多其他查询主题,然后在Framework Manager中定义了连接。因此,没有定义实际的SQL - 它在运行时生成
我不确定您的最终要求,但还有其他三种获取SQL的方法:
如果您只想知道报告中如何生成数字,最直接的解决方案是监控您的数据库。
最后请记住,在极少数情况下,Framework Manager中定义的SQL可能会被编写报告的方式改变