我有一个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.关于如何解决这个问题的任何建议?
答案 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)
似乎更容易将日期转换为周数值,然后添加到达周末日期所需的天数。
dateadd("ww",datepart("ww",{Command.REPORTDATE})-1,date(year({Command.REPORTDATE}),01,01)-dayofweek(date(year({Command.REPORTDATE}),01,01)))+7
如果您希望周在另一天结束,请调整公式末尾的+7。