Crystal Reports按日期比较运行总计

时间:2012-04-18 21:44:23

标签: crystal-reports

我正在使用Crystal Reports XI R2。

我的表格按日期包含交易数据。我有一个按天设置的小组和一个摘要来计算每天的交易数量。我还有一个运行总计设置,以给出每天的年份。当然,它会重置一年中的变化。

我的目标是能够找到昨天和去年同一天的同一天数之间的差异。

编辑:我错了目标。它不是能够在昨天找到差异,而是在几天内找到每一天。

2 个答案:

答案 0 :(得分:0)

创建这两个公式字段:

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

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

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

答案 1 :(得分:0)

我终于把它钉了下来。可能有一种更清洁的方式,但...... ....

我将日期(以文本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    

将这两者放入组页脚(已抑制)并添加一个字段以进行组头中的减法。