1

我正在使用 Crystal Reports 2011 并有一个按 YEAR(行)和 MONTH(列)显示数据的交叉表。我需要在任何给定时间报告 3 年的数据,但在 4 月份是我需要放弃较旧的一​​年以获取新的一年的时候。

例如,目前由于我们在 2 月,我正在报告 2010、2011 和 2012 年。一旦 4 月 1 日命中,我将报告 2011、2012 和 2013 年。所以我将在报告中删除 2010 年并选择 2013 年。我希望将其自动化,以便报告将自动更改其报告的年份。

我尝试了各种记录选择公式,但无法确定一个返回所需年份的公式。年份目前是手动调整的。每年 4 月 1 日,我手动调整报告以删除 3 年前的数据并开始包含当年数据。

我正在寻找有关如何解决此问题的建议。感谢帮助!

4

1 回答 1

1

我想我在评论中错误地陈述了适当的日期范围,但如果我理解正确,我们需要公式来执行以下操作:

  • 如果今天运行,报告将显示 2010 年 1 月 1 日至 2012 年 12 月 31 日的数据。
  • 如果在 4 月 1 日运行,它将显示从 2011 年 1 月 1 日到 2013 年 4 月 1 日的数据。

为此,我想出了以下公式字段:

  • 创建一个名为 的公式字段DateRangeFrom。它应该包含:

    IF datepart("m", CurrentDate) < 4 THEN
    // 如果我们在 1 月 - 3 月,则显示三年前 DateSerial (Year(DateAdd("yyyy", -3, CurrentDate)), 1, 1) 别的 // 如果我们在 4 月 - 12 月,则显示两年前 DateSerial (Year(DateAdd("yyyy", -2, CurrentDate)), 1, 1)

  • 创建另一个名为DateRangeTo. 它应该包含:

    IF datepart("m", CurrentDate) < 4 THEN
    // 如果我们在 1 月 - 3 月,则显示一年前 DateSerial (Year(DateAdd("yyyy", -1, CurrentDate)), 12, 31) 别的 // 如果我们在 4 月 - 12 月,则显示到当前日期 当前日期

  • 然后,您可以在记录选择公式中使用这些字段,如下所示:

    {YourTable.YourDateColumn} > {@DateRangeFrom}
        和 {YourTable.YourDateColumn} <= {@DateRangeTo}
     

编辑:

如果您只想按年份搜索,请删除这些DateSerial功能,并将您的记录选择公式更改为使用>=而不是>,您应该留下:

  • 创建一个名为 的公式字段DateRangeFrom。它应该包含:

    IF datepart("m", CurrentDate) < 4 THEN
    // 如果我们在 1 月 - 3 月,则显示三年前 年(DateAdd("yyyy", -3, CurrentDate)) 别的 // 如果我们在 4 月 - 12 月,则显示两年前 年(DateAdd("yyyy", -2, CurrentDate))

  • 创建另一个名为DateRangeTo. 它应该包含:

    IF datepart("m", CurrentDate) < 4 THEN
    // 如果我们在 1 月 - 3 月,则显示一年前 年(DateAdd("yyyy", -1, CurrentDate)) 别的 // 如果我们在 4 月 - 12 月,则显示到当前日期 年份(当前日期)

  • 然后,您可以在记录选择公式中使用这些字段,如下所示:

    {YourTable.YourDateColumn} >= {@DateRangeFrom}
        和 {YourTable.YourDateColumn} <= {@DateRangeTo}
     

于 2013-02-13T16:42:53.243 回答