我正在尝试在提示页面上创建提示,以允许用户选择特定季度。例如,用户将从提示中选择“ 2018 Q1”,并且报告将知道“ 2018 Q1”的日期在7/1/2018到9/30/2018之间。这可能吗?我一直对静态选择感到困惑,但是我并没有走得太远。 我的Cognos知识将归为一般。
答案 0 :(得分:0)
有几种方法可以做到这一点。您没有在提示中指明是否希望用户动态选择。动态提示通常可提供更好的客户体验,并且所需维护更少。我将说明如何进行动态处理,如果要静态处理,则只需将值手动输入到提示中,而不是从查询中获取它们。其余说明适用。
例如,如果您希望提示显示“ 2018 Q1”,则可以从Date表中创建此字符串,如下所示:
[Year] + ' Q' + [Quarter]
如果您为此查询生成表格数据,则会在日期表中获得所有年/季度组合的列表:
2018 Q1
2018 Q2
2018 Q3
2018 Q4
2017 Q1
...
例如,如果您只想显示当年的季度,则可以添加此过滤器:
[Year] = year(current_date)
添加此过滤器后,您只会看到返回的上述输出的前四行。您的用户将有四个选择。
要将提示选择应用于您的报告,您只需在相关的报告查询中添加一个过滤器,以从用户那里获取输入并将其与数据进行比较:
[Year] + ' Q' + [Quarter] = ?quarterPrompt?
现在,这样做的方式可能会降低性能。为了应用过滤器,必须检查每一行,将其转换为字符串格式并进行比较。如果您需要更好的性能,则更好的过滤器方法如下:
[Year] = substring(?quarterPrompt?,1,4) AND [Quarter] = substring(?quarterPrompt?,7,1)
由于我们只转换了仅包含一个值而没有太多值的提示,因此性能得到了优化。
我的直觉告诉我,也许还有更好的方法。反复研究之后,我意识到,通过消除所有字符串解析,还有一种更有效的方式来处理此问题。这是要修改的过程的一部分:
在提示符查询中使用以下表达式创建第二个数据项:
[Year] * 100 + [Quarter]
对于每个年度和季度组合,您现在将有一个编码组合的数字。例如,对于2018年和第二季度,新数据项将返回201802。
这看起来类似于以下内容:
floor(?quarterPrompt?/100) = [Year]
AND mod(?quarterPrompt?,100) = [Quarter]
此纯数字操作具有比原始答案中基于子字符串的解析更好的性能,但效果相同。