【问题标题】:Show Date Ending on the group and Chart Crystal Reports在组和图表 Crystal Reports 上显示结束日期
【发布时间】:2017-02-28 08:45:04
【问题描述】:

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

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

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

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

2013 年 11 月 10 日

2013 年 11 月 17 日

我要显示

2013 年 11 月 16 日

2013 年 11 月 23 日

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

2013 年 11 月 20 日

2013 年 11 月 27 日

我什至不确定他们的公式如何计算 20 和 26。关于如何解决此问题的任何建议?

【问题讨论】:

    标签: date crystal-reports


    【解决方案1】:

    这有点棘手。除非另有说明,否则 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")
    

    【讨论】:

    • 我实际上能够使用上面发布的公式进行分组。我添加的唯一修复它是它需要一个组排序导出。按升序对日期进行排序。然后分组工作正常。剩下的唯一问题是例如我的数据从 2013 年 11 月 6 日开始,所以结束日期应该是 2013 年 9 月 11 日。它增加了 6 天,第一行的结束日期始终是开始日期 + 6。我希望它是标准的周日至周六。
    • 那你用我上面的公式。您检查 DayOfWeek,然后相应地添加到您的星期六。
    • 我应该将 @Today 替换为 CallDate 字段还是实际上是今天的日期?
    • 将其替换为 CallDate 字段。 “今天”只是一个更简单的例子。
    【解决方案2】:

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

    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。

    Proof sample report

    【讨论】:

      猜你喜欢
      • 2023-03-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多