如何编写选择标准公式

时间:2014-09-16 16:51:13

标签: crystal-reports report selection criteria

我是Crystal Rpts的新手......我在Windows 7 pro 64位上使用了13。我正在尝试为基本报告编写选择标准公式。这就是我想说的。

如果status.temp_date为空(null)但status.perm_date有一个日期(非空)

然后拉出status.perm_date所在的所有记录。 projectedstatus.projected_date和status.perm_date位于projectedstatus.projected_date的日期范围内(projectedstatus.projected_date {?开始日期}到projectedstatus.projected_date {?结束日期})

也拉

所有带有projectedstatus.projected_date的记录都在projectedstatus.projected_date {?start date}和projectedstatus.projected_date {?end date}之间

这是我写的:

(isnull({status.temp_date}) and not isnull({status.perm_date}) and 
{status.perm_date} < {projectedstatus.projected_date} and 
{projectedstatus.projected_date} in {?sdate} to {?edate} 

这只返回带有perm.date的记录....当前没有perm.date的活动记录和在所选日期范围内的projection.dates

然后我尝试了:

if(isnull({status.temp_date})) and not isnull({status.perm_date}) then 
{status.perm_date} < {projectedstatus.projected_date} and 
{projectedstatus.projected_date } in {?sdate} to {?edate} and

if (isnull({status.temp_date})) and isnull({status.perm_date}) and not isnull 
({projectedstatus.projected_date}) then 

{projectedstatus.projected_date} in {?sdate} to {?edate}

现在我没有得到任何记录.....

有什么建议吗?

1 个答案:

答案 0 :(得分:0)

我长时间使用过水晶报告,选择公式会写入每一行,如果你写的表达式为true,那么该记录就会被包括在内。 if返回false,则不包括该记录。

从你的代码片段中你必须使用if else if条件以便处理每个条件一个布尔值true或false应该从那里得到

你可以做的另一种方法是,如果很容易写出那些行不应该出现的否定情况,只需在if中写入该条件并返回false也有其他条件,返回为true,以便对于所有其他条件行被选中

例如,

if ((isnull({temp.date}) and not isnull({perm.date}) and (( {perm.date} < {projected.date} and NOT  {projected.date}  in {?sdate} to {?edate}) OR ({perm.date} > {projected.date}))) then FALSE ELSE TRUE

请检查语法一次。