如何使用水晶报告动态选择参数

时间:2011-07-28 17:24:08

标签: visual-studio crystal-reports

我一直在努力获取报告但没有成功。

我有一个报告,根据date和boolean的参数字段进行选择。目前我必须创建3个报告。一个基于日期,一个基于布尔值,一个基于两者。

但是,如果用户没有在参数中输入日期,我希望我的报告能够选择所有日期;如果用户没有选择一个,我希望选择所有布尔值。

目前我使用了这个

if ({?Start Date} = DateTimeValue('') or {?End Date} =DateTimeValue('')) then
   {rectReport.Call date} in DateTimeValue ('1753-01-01 00:00:00') to CurrentDateTime
else 
   ({rectReport.Call date} in {?Start Date} to {?End Date}) and {rectReport.EngineDown} = {?Engine Down}

我正在寻找的基本理念是用户可以决定只选择一个参数而不是两个参数。

任何帮助都将受到高度赞赏。 谢谢,

宾博

2 个答案:

答案 0 :(得分:1)

在Crystal 2008中,您可以选择使参数可选。您可以做的是使用两个参数创建一个报告,然后将这两个参数设置为可选。在您的记录选择公式中,您可以执行以下操作:

(if  (HasValue({?Startdate}) and HasValue({?Enddate}))
        then {table.datefield} in {?Startdate} to {?Enddate}
    else {table.datefield} in {defaultstartdate} to {defaultenddate})

and (if HasValue({?BoolParam}) then {table.boolfield} = {?BoolParam}
    else {table.boolfield} = {defaultbool})

如果您想在用户未输入参数时选择所有表,则可以省略else语句。

(注意:如果语法不正确,我很抱歉(我刚刚再次回到CR),但你明白了。)

编辑:由于CR10中没有可选参数,您是否只能使用日期的参数默认值?对于布尔值,您可以使用3个值创建一个参数:true,false和“all”,然后在运行报表时默认为“all”值。

答案 1 :(得分:0)

我不知道您的具体情况,但我们处理此问题的方式(特别是对于定义的时间段与用户指定的日期范围)是通过设置默认值。

我们的主要环境是BOE XI。

我们的参数可能是    ReportPeriod(字符串变量) 和    CustomDates(DateTime Range,但将作为两个离散日期)

ReportPeriod的示例参数可能是   1天   7天   上个月   自定义日期

公式用于计算将在记录选择中使用的日期限制。我从结束日期开始,因为它对我们的期间报告很方便。

@EndDate
  Select ?ReportPeriod
    Case
       "1 Day", "7 Days"   : CurrentDate
          // Conveniently defaults to MIDNIGHT
       "Last Month"  : Maximum(LastFullMonth)
       "CustomDates" : Maximum(?CustomDates)
          // Or discrete parameter for end date
       default : CurrentDate

@BeginDate
  Select ?ReportPeriod
    Case
       "1 Day"  :  DateAdd("d", -1, @EndDate)
       "7 Days" :  DateAdd("d", -7, @EndDate)
       "Last Month"  : Minimum(LastFullMonth)
       "CustomDates" : Minimum(?CustomDates)
          // Or discrete parameter for end date
       default : DateAdd("d", -1, @EndDate)

并且,除非必要,否则请注意不要使用CurentDateTime。每当您尝试单步执行报告时,选择都会发生变化:下午5:01:10 ...下午5:01:16 ...下午5:01:24 ......

发布报告时,我们设置默认日期(它不重要,它只用于CUSTOM,然后客户重置它),以及默认的ReportPeriod。

可以定期(基于ReportPeriod)安排报告,它将始终运行。 如果用户想要进行自定义日期(历史报告等),那么他们可以在报告期间选择该日期,然后设置他们需要的任何开始和结束日期。

有用吗?