提示页面静态选择

时间:2019-01-22 16:17:17

标签: cognos

我正在尝试在提示页面上创建提示,以允许用户选择特定季度。例如,用户将从提示中选择“ 2018 Q1”,并且报告将知道“ 2018 Q1”的日期在7/1/2018到9/30/2018之间。这可能吗?我一直对静态选择感到困惑,但是我并没有走得太远。 我的Cognos知识将归为一般。

1 个答案:

答案 0 :(得分:0)

有几种方法可以做到这一点。您没有在提示中指明是否希望用户动态选择。动态提示通常可提供更好的客户体验,并且所需维护更少。我将说明如何进行动态处理,如果要静态处理,则只需将值手动输入到提示中,而不是从查询中获取它们。其余说明适用。

动态(首选)

  1. 创建新查询
  2. 为查询命名,以表示其功能,例如“季度提示”
  3. 在查询中创建一个新的数据项,以包含您希望提示显示给用户的内容。

例如,如果您希望提示显示“ 2018 Q1”,则可以从Date表中创建此字符串,如下所示:

[Year] + ' Q' + [Quarter]

如果您为此查询生成表格数据,则会在日期表中获得所有年/季度组合的列表:

2018 Q1
2018 Q2
2018 Q3
2018 Q4
2017 Q1
...
  1. 将列表限制为仅要提示的四分之一范围。

例如,如果您只想显示当年的季度,则可以添加此过滤器:

[Year] = year(current_date)

添加此过滤器后,您只会看到返回的上述输出的前四行。您的用户将有四个选择。

  1. 将值提示的Query属性设置为新查询,并将“使用值”和“显示值”属性均设置为您在提示查询中定义的数据项

要将提示选择应用于您的报告,您只需在相关的报告查询中添加一个过滤器,以从用户那里获取输入并将其与数据进行比较:

[Year] + ' Q' + [Quarter] = ?quarterPrompt?

现在,这样做的方式可能会降低性能。为了应用过滤器,必须检查每一行,将其转换为字符串格式并进行比较。如果您需要更好的性能,则更好的过滤器方法如下:

[Year] = substring(?quarterPrompt?,1,4) AND [Quarter] = substring(?quarterPrompt?,7,1)

由于我们只转换了仅包含一个值而没有太多值的提示,因此性能得到了优化。

附录

我的直觉告诉我,也许还有更好的方法。反复研究之后,我意识到,通过消除所有字符串解析,还有一种更有效的方式来处理此问题。这是要修改的过程的一部分:

  1. 您需要添加一个新的数据项,作为“使用价值”传递到报表查询中。

在提示符查询中使用以下表达式创建第二个数据项:

[Year] * 100 + [Quarter]

对于每个年度和季度组合,您现在将有一个编码组合的数字。例如,对于2018年和第二季度,新数据项将返回201802。

  1. 更改提示属性。将“使用值”指向新创建的数据项。
  2. 在报表查询中更改过滤器以使用新的数值

这看起来类似于以下内容:

floor(?quarterPrompt?/100) = [Year]
AND mod(?quarterPrompt?,100) = [Quarter]

此纯数字操作具有比原始答案中基于子字符串的解析更好的性能,但效果相同。