我正在处理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工作正常。有什么想法吗?
答案 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))