首页 文章

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

提问于
浏览
1

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

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

我希望能够根据详细级别选择显示/隐藏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 回答

  • 3

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

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

    或者,如果你喜欢CASE

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

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

  • 1

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

    如果您的自定义聚合在其定义中包含[Date]列,则可能会在修改聚合函数本身时减少一些性能提升,以便在需要汇总总计时忽略[Date]列 .

    如果您的聚合函数是:

    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的解决方案中只有一个不同的值,但这是需要考虑的事情 .

相关问题