显示日期在组和图表Crystal Reports上结束

时间:2013-12-16 20:21:29

标签: date crystal-reports

我有一个Crystal Reports,它按日期范围提取数据并按WEEK分组。数据也显示在图表中。一切正常。但是,我遇到了一个问题。

当我按WEEK分组时,它会在分组和图表中显示开始日期。我想显示结束日期。我写了一个公式来处理这个,但是,由于某种原因,日期已经关闭:

totext(cdate(dateadd("d",6,date({CallDate}))),"MM/dd/yyyy")

例如,我的日期范围是11/10/2013 - 11/23/2013。如果我在没有公式的情况下运行它,它会像这样分组:

  

2013年11月10日

     

2013年11月17日

我想要显示

  

2013年11月16日

     

2013年11月23日

如果我使用上面的公式运行它,我得到以下输出:

  

2013年11月20日

     

2013年11月27日

我甚至不确定他们的公式如何计算20和26.关于如何解决这个问题的任何建议?

2 个答案:

答案 0 :(得分:0)

这有点棘手。除非另有说明,CR假定星期日是一周的第一天。因此,例如,要获得一周的第一天是星期一(默认CR周中的数字2),此公式将为您提供一周的第一天:

If DayOfWeek({@Today}) = 2 Then
{@Today}
Else If DayOfWeek({@Today}) = 3 Then
dateadd ("d",-1,{@Today})
Else If DayOfWeek({@Today}) = 4 Then
dateadd ("d",-2,{@Today})
Else If DayOfWeek({@Today}) = 5 Then
dateadd ("d",-3,{@Today})
Else If DayOfWeek({@Today}) = 6 Then
dateadd ("d",-4,{@Today})
Else If DayOfWeek({@Today}) = 7 Then
dateadd ("d",-5,{@Today})
Else If DayOfWeek({@Today}) = 1 Then
dateadd ("d",-6,{@Today})

为了得到你一周中的最后一天,这应该是正常工作周的星期日,这个公式会给你:

If DayOfWeek({@Today}) = 1 Then
dateadd("d", +6, {@Today})
Else If DayOfWeek({@Today}) = 2 Then
dateadd("d", +5, {@Today})
Else If DayOfWeek({@Today}) = 3 Then
dateadd("d", +4, {@Today})
Else If DayOfWeek({@Today}) = 4 Then
dateadd ("d",+3,{@Today})
Else If DayOfWeek({@Today}) = 5 Then
dateadd ("d",+2,{@Today})
Else If DayOfWeek({@Today}) = 6 Then
dateadd ("d",+1,{@Today})
Else If DayOfWeek({@Today}) = 7 Then
{@Today}

所以你的日子是:

周日(1)

星期一(2)

星期二(3)

星期三(4)

星期四(5)

星期五(6)

星期六(7)

因此,在您的情况下,获取结束日期的公式应为:

totext(cdate(dateadd("d",+6,date({CallDate}))),"MM/dd/yyyy")

答案 1 :(得分:0)

似乎更容易将日期转换为周数值,然后添加到达周末日期所需的天数。

Modified from Source:

dateadd("ww",datepart("ww",{Command.REPORTDATE})-1,date(year({Command.REPORTDATE}),01,01)-dayofweek(date(year({Command.REPORTDATE}),01,01)))+7

如果您希望周在另一天结束,请调整公式末尾的+7。

WeekEndingSaturday

Proof sample report