我在提示页面上有一个静态选择的报告。用户可以选择“完整详细信息”或“汇总”。
有关简化示例,请说我的报告包含以下列:客户,产品,日期,数量,价值。
我希望能够根据详细级别选项显示/隐藏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
答案 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的解决方案中只有一个不同的值,但这是需要考虑的事情。