0

在COGNOS Report Studio中有什么方法可以让我的查询在任何其他查询之前先运行?

用例:我有一份 COGNOS 报告,它比较 7-8 个存储过程 (sps) 的结果以找出数据差异。为此,我必须将 sps A 的结果与 sp B 的结果、B 与 C 的结果、A 与 D 的结果等连接起来。由于 COGNOS 没有结果缓存(本地缓存没有用)并且执行存储过程的速度很慢,因此我实现了一种伪缓存技术。在报告生成开始时,我将 3-4 个耗时的 sps 的结果存储到表中。在我想要比较数据的 COGNOS 查询中,我只需SELECT *在表格上执行一个操作。问题是如何确保这个缓存生成查询首先运行,这样我就不会遇到另一个查询在数据填充之前执行 SELECT * 的情况。

不优雅的解决方案:有一个虚拟提示,在实际提示之后自动提交。并将缓存生成查询作为虚拟/不可见提示的源查询。因此,在用户在提示中选择值后,会出现另一个提示,该提示会自动提交,因此缓存生成查询在任何其他查询之前运行。

附言

  1. 使用 cognos 的原因是,有问题的 sps 实际上是其他 COGNOS 报告的来源,因此通过比较 sps,我实际上是在比较不同的报告,而企业只想查看 PDF 格式的差异报告。

  2. 使用上面提到的伪缓存技术,我将报告的运行时间从 50 分钟减少到了 30 分钟。此解决方案的问题在于,当使用“通过邮件发送报告”选项运行报告时,有时它会超时,并且没有收到任何邮件。

请让我知道是否有任何其他方法可以在其他查​​询之前先运行 COGNOS 查询,如果可能,请提出一些提高性能的方法。


平台SQL 服务器和 COGNOS 报表工作室

4

4 回答 4

0

同意以上所有评论。

您可以使用 Cognos Cognos Job 运行存储过程来预先填写“差异”报告表,然后仅在该表上运行 Cognos Report 并一次性通过电子邮件发送出去。而且我不确定您的数据量是多少,但是对于任何合理的报告来说,30 分钟的时间就很长了(除非您正在搜索 GB 的数据,但无论如何您都应该在 ETL 中这样做)。

作为一般规则,我尝试在 ETL 执行期间进行所有数据检查,然后在加载作业中触发 Event Studio 代理,将数据错误/丢失/未加载的报告通过电子邮件发送给负责数据质量的人员。

于 2013-10-04T00:23:04.127 回答
0

可能将整个事情包装在另一个存储过程中,让它进行比较并将结果返回给 Cognos?

于 2013-09-05T19:10:31.117 回答
0

对于“实时”报告来说,这似乎不是一个好案例。我会利用 SQL 调度程序预先运行您的 SP,并将最后完成的日期写入调试表。让 Cognos 从调试表中读取您创建的表以及上次运行日期。

于 2013-09-05T15:04:00.900 回答
0

“因为 COGNOS 没有结果缓存......并且执行存储过程很慢”

不会比直接运行它们慢。我同意所有其他评论。您可以将它们包装在另一个存储过程中,但我实际上建议您退后一步并进行一些适当的性能调整(即索引和查询计划)

于 2013-10-03T00:09:41.620 回答