Crystal Reports - 记录过滤器中OR语句的顺序会影响结果

时间:2016-06-02 16:05:51

标签: filter crystal-reports report filtering

如果系统已将结果标记为不可接受,我有一份报告应该提取献血者结果记录。我使用的记录过滤器如下。我的问题是,根据OR语句的排序方式,报告中显示的结果会有所不同。就像现在一样,如果我的捐赠者根本没有QUAL_TEST结果,那么该捐赠者的不可接受的物理结果就不会出现在报告中。如果我翻转OR语句的顺序,那么出现具有不可接受的物理结果的捐赠者,但那些具有不可接受的QUAL_TEST结果但没有物理测试结果的人不会。 OR语句周围的括号是否没有做任何事情?

{DONOR_VISIT.VISIT_DATETIME} in {?Visit Start Date} to {?Visit End Date} and 
({DONOR_VISIT_QUAL_TEST.ACCEPTABLE_VALUE_CD} = "N" or 
{DONOR_VISIT_PHYSICAL.ACCEPTABLE_VALUE_CD} = "N")

2 个答案:

答案 0 :(得分:0)

正如你在这种情况下所描述的以及否定检查,你需要做出积极的检查。

假设您有Y如果结果良好,请尝试以下

{DONOR_VISIT.VISIT_DATETIME} in {?Visit Start Date} to {?Visit End Date} and 
(({DONOR_VISIT_QUAL_TEST.ACCEPTABLE_VALUE_CD} = "N" and
{DONOR_VISIT_PHYSICAL.ACCEPTABLE_VALUE_CD} = "N") or
({DONOR_VISIT_QUAL_TEST.ACCEPTABLE_VALUE_CD} = "N" and
{DONOR_VISIT_PHYSICAL.ACCEPTABLE_VALUE_CD} = "Y") or
({DONOR_VISIT_QUAL_TEST.ACCEPTABLE_VALUE_CD} = "Y" and
{DONOR_VISIT_PHYSICAL.ACCEPTABLE_VALUE_CD} = "N"))

如果两个结果都不好,如果不需要记录,那么删除下面并保持休息

({DONOR_VISIT_QUAL_TEST.ACCEPTABLE_VALUE_CD} = "N" and
{DONOR_VISIT_PHYSICAL.ACCEPTABLE_VALUE_CD} = "N") 

答案 1 :(得分:0)

比Null-ver晚得多!

我认为真正的原因是因为在这个过程中遇到了NULL。如果其中一个字段具有“N”但另一个字段为空(或NULL),则它将无法执行选择的任何部分,并且该记录将被忽略。一个简单的解决方案是将Crystal处理NULL值的方式更改为“NULLS的默认值”而不是“NULLS的例外”,或者编写公式以便NULL记录不会破坏您的公式。我相信非日期部分使用类似的东西就足够了:

(Not IsNull({DONOR_VISIT_QUAL_TEST.ACCEPTABLE_VALUE_CD}) and 
{DONOR_VISIT_QUAL_TEST.ACCEPTABLE_VALUE_CD} = "N") or 
(Not IsNull({DONOR_VISIT_PHYSICAL.ACCEPTABLE_VALUE_CD}) and 
{DONOR_VISIT_PHYSICAL.ACCEPTABLE_VALUE_CD} = "N")