【问题标题】:Crystal Reports Date by Year Comparison on a Running TotalCrystal Reports 按年份比较运行总计
【发布时间】:2012-04-20 21:15:21
【问题描述】:

我正在使用 Crystal Reports XI R2。

我的表有按日期划分的交易数据。我有一个按天设置的组和一个摘要,以计算每天的事务数。我还设置了一个运行总计,以便为每一天提供年初至今的计数。当然,它会随着年份的变化而重置。

我的目标是能够找出昨天的 YTD 计数与去年同一日期的相同计数之间的差异。

编辑:我错报了目标。不是仅仅能找到昨天的差异,而是能够找到一系列日子中的每一天。

【问题讨论】:

  • 你的数据源是什么?如果数据库可以在这里完成一些繁重的工作,可能会更容易。
  • 当然可以,但我仍处于“试用”期,还没有直接 sql 访问数据库的权限。

标签: crystal-reports


【解决方案1】:

创建这两个公式字段:

//{@LastYearToDate}
If {table.dateField} IN LastYearYTD Then
  1
Else
  0

//{@ThisYearToDate}
If {table.dateField} IN YearToDate Then
  1
Else
  0

在 ReportFooter 部分的每个字段中插入摘要。

【讨论】:

    【解决方案2】:

    我终于搞定了。这样做可能有一种更清洁的方法,但是....

    我将日期(以文本 yyyy-mm-dd 开始)转换为文本 mm/dd/yyyy 格式:

    stringvar yyyyear := {table.dateField}[1 to 4]; 
    stringvar mmonth := {table.dateField}[6 to 7];;
    stringvar dday := {table.dateField}[9 to 10];
    
    mmonth + "/" + dday + "/" + yyyyear
    

    按此字段分组,并在组标题中插入计数摘要。为每个日期的 mm/dd 部分创建了一个单独的字段:

    {@textDate}[1 to 5]
    

    添加了一个标志来查看当前组标题中的日期是否与前一个匹配:

    if previous({@mm/dd}) = {@mm/dd}
        then 1
    else 0
    

    使用共享变量存储每年的 YTD 总计(2 个公式):

    shared numbervar totalsCurentYear;
    
    if {@prevDateFlag} = 1 then 
        totalsCurrentYear := totalsCurrentYear + Sum ({@transactionCount}, {@textDate});
    
    totalsCurrentYear
    

    |

    shared numbervar totalsLastYear;
    
    if {@prevDateFlag} = 1 then 
        totalsLastYear := totalsLastYear + Sum ({@transactionCount}, {@textDate});
    
    totalsLastYear    
    

    将这两个都放入组页脚(被抑制),并添加一个字段来对组页眉进行减法。

    【讨论】:

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