4

我有一个交叉表报告,用于计算我的产品的故障率;它有两个度量 (PASSCOUNT, FAILCOUNT) 和一个计算 FAILRATE (FAILCOUNT/PASSCOUNT+FAILCOUNT)

报告布局如下所示:

                   OEM
                   MODEL
TESTYEAR TESTMONTH PASSCOUNT FAILCOUNT FAILRATE

当我选择“总计”图标时,它会像这样在逻辑上将每一列相加

2012 OCT 7547  697  0.08
     NOV 9570  373  0.04
     DEC 1879  107  0.05
------------------------
Total   18996  1177 0.17

但是,我的用户希望 TOTAL FAILRATE 是

TOTAL FAILCOUNT/(TOTAL PASSCOUNT+TOTAL FAILCOUNT) 

这转化为

1177 / (18996+1177) = 0.058

如何在报告中创建此自定义总计?我正在阅读有关创建查询计算的信息,但我不清楚这是正确的方法。

Cognos Report Studio 8.4 IBM DB2 UDB

4

3 回答 3

3

在 Crosstab 中选择正确的总数很重要。
添加总行时,请确保选择自动摘要:
Cognos 自动摘要
此选项将确保聚合由每个查询数据项单独确定。
如果它仍然没有给你预期的结果,那么在查询资源管理器上,选择交叉表上正在使用的查询,然后在 FAILRATE 数据项上,选择计算选项(在属性面板上):
Cognos 聚合函数属性

于 2013-01-06T07:58:07.087 回答
3

你确实可以。有几种方法。

在您的报告查询中,您有组成所需计算的单个查询项工作正常(PASSCOUNT、FAILCOUNT 等...)。您可以在同一查询项列表中创建新的数据项/表达式并编辑定义。在左侧,您可以选择使用原始数据库数据源中的列,但您可以选择另一个窗格来实际重用您在同一查询中定义的其他查询项/计算(PASSCOUNT FAILCOUNT FAILRATE)。Cognos 知道,当您使用同一查询中的其他列创建表达式时,首先要解析这些查询项,以便解析依赖于它们的计算。您要确保您的计算/派生列列在其他相关查询项之后(实际上这可能无关紧要,但在查看时它是有意义的)。

摘要行可能/可能不会有点棘手。在我面前没有报告工作室,当您将总计部分添加到列表报告并使用新的失败率表达式时,它可能足够聪明...扩展正确的计算,或者您可能必须使用另一种方法来执行summary 是一个报表表达式。

您不是在查询中而是在报告的 gui 页面上创建一个报告表达式(它在工具箱中的边表、singltons 等......)。它有一个表达式构建器,就像在查询中一样,但是您会注意到函数集是不同的,因为它是在查询运行之后完成的,并且随着结果的返回,像您所做的那样简单的事情很好,这只是数学,但您会请注意,其他数据库函数在报表表达式中不可用,仅仅是因为它们出现在 html 输出中,而不是在针对数据库运行的查询期间。

希望这可以帮助。总之,您正在根据同一查询/结果集中其他列的汇总计算创建一个计算列。这在理论上与这条 SQL 语句相同,因为 SQL 不允许直接这样做,但希望它有助于解释 cognos 正在做什么。

从 SOMETABLE 中选择 1+2 作为 FAILCOUNT、2+3 作为 PASSCOUNT、(FAILCOUNT/PASSCOUNT+FAILCOUNT) 作为 FAILRATE -- Cognos 能够在同一查询中使用其他聚合计算列的结果,如果您生成 sql,您可以看到如何它安排 SQL 来执行此操作。

谢谢,

蒂姆

于 2013-01-09T15:09:08.350 回答
0

在交叉表报告中发生的情况是先呈现列数据 n 然后呈现行级数据,因此这是您的问题的原因..要解决此问题,请单击列表列标题“失败”并为其分配解决顺序 = 1 ,只要 total 的求解顺序为 NULL 即可。诀窍是 Solve 顺序将在所有其他操作完成后控制 FAILRATE 的计算。

于 2014-09-19T00:45:55.157 回答