笔者使用ReportingServices定义了一个顾客购买金额报表(按顾客类型及其地域分组汇总),筛选条件为存在消费金额的顾客。在筛选条件如下设置:
结果打开SQL的事件探查器抓到如下的SQL:
很明显红色框出的部分语句出现问题: 要求获取消费总额不为0且不为空的记录(该条件肯定永远满足:当为0时必然不为null,但为null时必然不为0,若存在具体金额则可能不为0且不为null,因此该条件想到于true),因此得到的结果将包含没有消费额的顾客,这不符合我们的预期(应该是ReportingServices的一个Bug)。结果如下:
那怎么办呢?没办法只好将筛选条件修改如下:
此时再次启动SQL事件探查器,获得如下生成的SQL(包括允许结果:这时我们看到结果正确了)。
所以应该是报表服务器在对.rdl文件定义的筛选条件翻译成SQL语句时出现了问题。