如何在 SSRS 表达式中组合多个 AND 和 OR?
How to Combine Multipe AND and ORs in SSRS Expression?
一段时间以来,我一直在尝试解决这个问题,但我无法让它嗡嗡作响。我在这里回顾了很多问题,但没有人知道我遇到的确切问题。所以,我希望这里有人可以提供帮助。
我有一个查询,它在 SSMS 中完美运行。但是,此查询将被提供给报告。该报告有 2 个参数,开始日期和结束日期,由用户在运行时提供。我需要对这些日期进行一系列检查,并且只提取满足多个条件之一的记录,因此是 OR。
我想在过滤器中执行此操作,只需为每个条件添加一个过滤器。但是,过滤器之间的默认行为是 AND,我需要在我的复杂过滤器之间执行 OR。所以我在网上找到了一个例子,然后开始打字。
OR 两边的表达式单独使用时有效。但是,一旦我将它们与 OR 运算符组合在一起,我只会返回与 OR 的正面(OR 之前)匹配的记录,但不包括与背面(OR 之后)匹配的记录。
这是 Dynamics CRM 2015 的报告,我使用的是 Visual Studio 2010。
这是我在报告中放置的过滤器的屏幕截图:
这是这个过滤器中的表达式:
=((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 在等式的两端都不起作用?
不幸的是,SSRS 表达式不喜欢布尔逻辑。您需要使用 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)
一段时间以来,我一直在尝试解决这个问题,但我无法让它嗡嗡作响。我在这里回顾了很多问题,但没有人知道我遇到的确切问题。所以,我希望这里有人可以提供帮助。
我有一个查询,它在 SSMS 中完美运行。但是,此查询将被提供给报告。该报告有 2 个参数,开始日期和结束日期,由用户在运行时提供。我需要对这些日期进行一系列检查,并且只提取满足多个条件之一的记录,因此是 OR。
我想在过滤器中执行此操作,只需为每个条件添加一个过滤器。但是,过滤器之间的默认行为是 AND,我需要在我的复杂过滤器之间执行 OR。所以我在网上找到了一个例子,然后开始打字。
OR 两边的表达式单独使用时有效。但是,一旦我将它们与 OR 运算符组合在一起,我只会返回与 OR 的正面(OR 之前)匹配的记录,但不包括与背面(OR 之后)匹配的记录。
这是 Dynamics CRM 2015 的报告,我使用的是 Visual Studio 2010。
这是我在报告中放置的过滤器的屏幕截图:
这是这个过滤器中的表达式:
=((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 在等式的两端都不起作用?
不幸的是,SSRS 表达式不喜欢布尔逻辑。您需要使用 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)