如何在SSRS表达式中组合Multipe AND和OR?

时间:2017-03-02 21:21:31

标签: visual-studio reporting-services microsoft-dynamics

我一直试图解决这个问题,但是我无法让它嗡嗡作响。我在这里回顾了一些问题,但没有人有我遇到的确切问题。所以,我希望有人可以提供帮助。

我有一个查询,它在SSMS中运行完美。但是,此查询将被提供给报告。该报告有两个参数,开始日期和结束日期,由用户在运行时提供。我需要针对这些日期进行一系列检查,并且只撤回满足多个条件之一的记录,因此是OR。

我想在过滤器中执行此操作,只需为每个条件添加一个过滤器。但是,过滤器之间的默认行为是AND,我需要在我的复杂过滤器之间执行OR。所以我在网上找到了一个例子,并开始打字。

OR的任何一侧的表达式,单独站立时起作用。但是,只要我将它们与OR运算符组合在一起,我只返回与OR的正面(OR之前)匹配的记录,但不包括与背面匹配的记录(在OR之后)。

这是Dynamics CRM 2015的报告,我使用的是Visual Studio 2010。

以下是我在报告中添加的过滤器的屏幕截图: Screenshot of Filter

以下是此过滤器中的表达式:

=((Fields!xyz_StartDateNewStudent.Value <> Nothing) AND (Fields!xyz_StartDateNewStudent.Value >= Parameters!StartDate.Value) AND (Fields!xyz_StartDateNewStudent.Value <= Parameters!EndDate.Value)) Or ((Fields!xyz_StartDateCarryoverStudent.Value <> Nothing)  AND  (Fields!xyz_StartDateCarryoverStudent.Value <= Parameters!StartDate.Value) AND (Fields!xyz_GraduationDate.Value <> Nothing) AND (Fields!xyz_GraduationDate.Value <= Parameters!EndDate.Value))

任何人都可以解释为什么我的OR不能在方程的两端工作吗?

1 个答案:

答案 0 :(得分:2)

Unfortunately, SSRS expressions don't like Boolean logic. You would need to use an IIF:

=IIF((Fields!xyz_StartDateNewStudent.Value <> Nothing) 
  AND (Fields!xyz_StartDateNewStudent.Value >= Parameters!StartDate.Value) 
  AND (Fields!xyz_StartDateNewStudent.Value <= Parameters!EndDate.Value)) 
Or ((Fields!xyz_StartDateCarryoverStudent.Value <> Nothing)  
  AND  (Fields!xyz_StartDateCarryoverStudent.Value <= Parameters!StartDate.Value) 
  AND (Fields!xyz_GraduationDate.Value <> Nothing) 
  AND (Fields!xyz_GraduationDate.Value <= Parameters!EndDate.Value))
, True, False)