Cognos - 有条件地隐藏列,并汇总其余列

时间:2014-10-21 05:38:08

标签: conditional cognos

我在提示页面上有一个静态选择的报告。用户可以选择“完整详细信息”或“汇总”。

有关简化示例,请说我的报告包含以下列:客户,产品,日期,数量,价值。

我希望能够根据详细级别选项显示/隐藏Date列,并将Quantity和Value列聚合到一个Customer / Product行中。我知道如何显示/隐藏列(将选择变量绑定到列的渲染变量),但这不会进行聚合,只会使列不可见。

我考虑过为完整明细和摘要做一个单独的报告页面,但在我的实际报告中,我有一个第二个选择框,用户可以选择一个字段来总结(例如客户或产品),以及报告将按该字段分组。目前我每页都做一次(其中5次)。以相同的方式进行细节选择意味着我需要10页。肯定有更好的方法。


详细信息:

Customer     Product     Date          Qty       Value
ABCD         Things      22/10/2014    10        1.00
                         21/10/2014    40        4.00
                         23/10/2014    50        5.00

总结(隐藏Date列之后的当前情况):

Customer     Product   Qty       Value
ABCD         Things    10        1.00
                       40        4.00
                       50        5.00

总结(我希望如何看待):

Customer     Product   Qty       Value
ABCD         Things    100       10.00


我正在使用Cognos Report Studio 10.1.1

2 个答案:

答案 0 :(得分:3)

你不应该只是隐藏列。 您还应该在所有行中为此列设置相同的值 而不仅仅是此列中的[日期]设置

    if (?HideDate? = 1) then ('') else ([Date])

或者,如果您更喜欢CASE

    case ?HideDate? when 1 then '' else [Date] end

替换?HideDate? = 1,你自己的条件

答案 1 :(得分:1)

如果您使用标准的Cognos'自动组并总结'功能,Alexey的答案非常棒。

如果您的自定义聚合在其定义中包含[Date]列,则在修改聚合函数本身时可能会略微提高性能,以便在需要汇总总数时忽略[Date]列。 / p>

如果您的汇总功能是:

total([Value] for [Customer],[Product],[Date])

..您可以将其更改为CASE语句,如下所示:

CASE ?HideDate?
WHEN 1 then total([Value] for [Customer],[Product]) 
ELSE total([Value] for [Customer],[Product],[Date]) 
END

'for'子句后面的数据项通常以结果SQL中的GROUP BY子句结束。在可能的情况下限制分组的项目可以帮助提高性能。在这种情况下,性能提升可能很小,因为在Alexey的解决方案中只有一个不同的值,但这是需要考虑的事情。