2017-07-17 92 views
0

我有几个不完全级联的值提示,但它们是相关的。举个例子:Cognos Report Studio过滤器对值提示中的可用选项进行筛选

  • 提示1:经理
  • 提示2:值班督查
  • 提示3:员工

所以,如果你在提示1选择了吉姆,提示2将被填充只转移Jim负责的主管,等等。对于实际的报告来说,真正重要的唯一提示是员工的最终提示,其余的只是筛选相关员工的名单。

我遇到的问题是,所有的提示都是可选的,取决于您想要的作用域的范围,而查看的查询实际上只是查看最终的提示值。如果最后一个没有填补,但让我们说换班经理是,我怎么才能让报告只显示我选择的轮班主管下的员工?

要说它的另一种方式,如果层次树是这个样子:

  • 吉姆
    • 泰瑞
      • 戴夫
      • 比尔
    • 乔恩
      • 阿曼达
      • 乔尔

其中每个级别代表一个不同的值提示,如果我选择吉姆的经理,和泰瑞作为值班主任,我的报告目前显示戴夫,比尔,阿曼达和乔尔的结果,但我只想看戴夫和比尔。

我有值提示过滤适当,所以如何才能让我的报告查看最终提示中的可用选项,如果没有明确选择,而不是根本不过滤员工?

回答

1

一般情况下,这是通过在名为“All”的所有提示中添加一个静态值来实现的。如果您在最终提示中选择“全部”,那么您可以在where子句中添加一些逻辑来识别此问题。例如:

([ManagerID] = ?pManagerID? OR ?pManagerID?='All') 
AND 
([SupervisorID] = ?SupervisorID? OR ?SupervisorID?='All') 
AND 
([EmployeeID] = ?EmployeeID? OR ?EmployeeID?='All') 

然后剩下的就是关于与提示宏等所有的摆弄,让您的提示可选的要求。

例如,如果你选择一个特定的管理和特定监事然后选择“全部”的员工及时,这是结果:

([ManagerID] = '050' OR ?pManagerID?='All') 
AND 
([SupervisorID] = '012' OR ?SupervisorID?='All') 
AND 
([EmployeeID] = 'All' OR ?EmployeeID?='All') 

简化,这意味着:

([ManagerID] = '050') 
AND 
([SupervisorID] = '012') 

所以它不会选择所有员工 - 它只会选择记录与您选择的ManagerID和SupervisorID

+0

问题是,我不想让所有的员工,只是在过滤提示中出现的员工。如果我使用“全部”选项,我将获得数据库中的所有员工,而不仅仅是已经过滤的两个员工。 –

+0

你试过了吗?我将添加更多解释 –

+0

现在,有两个人提出了相同的建议,您应该去尝试一下 –

0

您可以利用ORs的工作方式来构建解决方案。由于OR逻辑结构只需要一个子句来返回true,所以您可以使用此行为从特定到常规进行测试,并在适当的级别停止。

([EmployeeID] is not missing AND [EmployeeID] = ?EmployeeID?) 
OR 
([SupervisorID] is not missing AND [SupervisorID] = ?SupervisorID?) 
OR 
([ManagerID] is not missing AND [ManagerID] = ?ManagerID?) 

如果选择了员工,则使用OR中的第一个子句并过滤特定的员工。

如果没有员工被选中,但是主管是,那么第一个子句将返回false,第二个子句将被使用。

如果没有员工和管理员被选中,但经理是,那么第一个和第二个子句将返回假和最后一个子句将被使用。

+0

因此,这用作主查询的过滤器? –

+0

是的。这将是主查询中的一个过滤器。您可以将过滤器本身标记为“可选”。 – Johnsonium

+0

我试过这个,但我仍然得到比我预期更多的结果。 –

相关问题