Crystal Reports使用可选参数进行过滤

时间:2014-05-09 18:05:38

标签: crystal-reports

我正在处理Crystal Reports XI中的报告,该报告允许某人使用许多可选的动态参数来过滤帮助台票证。如果我为每个参数做出选择,它会返回预期的结果,但如果我遗漏任何参数,它就不会返回任何内容,当我查看它所说的SQL查询时,"没有SQL查询是因为记录选择公式没有返回记录而使用。"我目前有以下代码用于记录选择:

{Incident.State:} = "C" and
{Incident.Close Date & Time} in {?BDate} to {?EDate} and
If HasValue({?Group}) Then (
    {Groups.Code} = {?Group} 
) 
and
If HasValue({?Category}) Then (
    {Incident.Subject Description} = {?Category} 
)
and
If HasValue({?Staff}) Then (
    {Incident_Details.Login ID} = {?Staff} 
)
and
If HasValue({?Community}) Then (
    {Incident.Company Name} = {?Community}
)

对我来说,这似乎应该有效,如果我省略了If语句以验证参数是否有值,我会得到一个错误,所以看起来HasValue工作正常。有什么想法吗?

2 个答案:

答案 0 :(得分:4)

您的问题源于未明确处理可选参数配置。在记录选择公式中使用if语句时,很容易遇到此问题。相反,明确处理参数DO和DO没有值的情况。像这样:

...
(not(hasvalue({?Group})) or {Groups.Code}={?Group})
and
(not(hasvalue({?Category})) or {Incident.Subject Description} = {?Category})
and
(not(hasvalue({?Staff})) or {Incident_Details.Login ID} = {?Staff} )
and
(not(hasvalue({?Community})) or {Incident.Company Name} = {?Community})

这样做有效地告诉CR如果没有值则忽略参数,否则根据在这些参数中输入的内容选择记录。

答案 1 :(得分:1)

记录选择公式通过返回true或false来指示是否必须使用记录。考虑到这一点,如果通知某些值,则公式必须返回True,如果它符合某些标准。如果在过滤器上没有通知任何内容,则公式必须始终返回True。

尝试这样的事情:

{Incident.State:} = "C" and
{Incident.Close Date & Time} in {?BDate} to {?EDate} and
(If HasValue({?Group}) Then (
    {Groups.Code} = {?Group} 
) else 
 (True)) 
and
(If HasValue({?Category}) Then (
    {Incident.Subject Description} = {?Category} 
) else 
 (True)) 
and (
If HasValue({?Staff}) Then (
    {Incident_Details.Login ID} = {?Staff} 
) else 
 (True)) 
and (
If HasValue({?Community}) Then (
    {Incident.Company Name} = {?Community}
) else 
 (True))