This is the best I could do. There might be a neater way with arrays, but I couldn't figure it out. The following assumes you are working with three years: 2003 to 2005. You can adjust to meet your needs, but you need a separate set of month variables for each year.
First sort your report by {ALL_ASSIGNMENTS.Date Assigned} and then by {ALL_ASSIGNMENTS.Date Completed}. Then create three formulas:
//{@calc}: to be placed in the detail section:
hileprintingrecords;
numbervar jan3;
numbervar feb3;
numbervar mar3;
numbervar apr3;
numbervar may3;
numbervar jun3;
numbervar jul3;
numbervar aug3;
numbervar sep3;
numbervar oct3;
numbervar nov3;
numbervar dec3;
numbervar jan4;
numbervar feb4;
numbervar mar4;
numbervar apr4;
numbervar may4;
numbervar jun4;
numbervar jul4;
numbervar aug4;
numbervar sep4;
numbervar oct4;
numbervar nov4;
numbervar dec4;
numbervar jan5;
numbervar feb5;
numbervar mar5;
numbervar apr5;
numbervar may5;
numbervar jun5;
numbervar jul5;
numbervar aug5;
numbervar sep5;
numbervar oct5;
numbervar nov5;
numbervar dec5;
numbervar i;
numbervar j := 12;
numbervar yr;
stringvar x;
for yr := 2003 to 2005 do(
for i := 1 to j do(
if (
IsNull({ALL_ASSIGNMENTS.Date Completed}) or
Date({ALL_ASSIGNMENTS.Date Completed}) > date(yr,i,15)
) and
Date({ALL_ASSIGNMENTS.Date Assigned}) <= date(yr,i,15) then (
x := totext(yr,"0000") +" "+ monthname(i) + ": " + (
if yr = 2003 then
totext(
select i
case 1 : jan3 := jan3 + 1
case 2 : feb3 := feb3 + 1
case 3 : mar3 := mar3 + 1
case 4 : apr3 := apr3 + 1
case 5 : may3 := may3 + 1
case 6 : jun3 := jun3 + 1
case 7 : jul3 := jul3 + 1
case 8 : aug3 := aug3 + 1
case 9 : sep3 := sep3 + 1
case 10 : oct3 := oct3 + 1
case 11 : nov3 := nov3 + 1
case 12 : dec3 := dec3 + 1
,0,"") else
if yr = 2004 then
totext(
select i
case 1 : jan4 := jan4 + 1
case 2 : feb4 := feb4 + 1
case 3 : mar4 := mar4 + 1
case 4 : apr4 := apr4 + 1
case 5 : may4 := may4 + 1
case 6 : jun4 := jun4 + 1
case 7 : jul4 := jul4 + 1
case 8 : aug4 := aug4 + 1
case 9 : sep4 := sep4 + 1
case 10 : oct4 := oct4 + 1
case 11 : nov4 := nov4 + 1
case 12 : dec4 := dec4 + 1
,0,"") else
if yr = 2005 then
totext(
select i
case 1 : jan5 := jan5 + 1
case 2 : feb5 := feb5 + 1
case 3 : mar5 := mar5 + 1
case 4 : apr5 := apr5 + 1
case 5 : may5 := may5 + 1
case 6 : jun5 := jun5 + 1
case 7 : jul5 := jul5 + 1
case 8 : aug5 := aug5 + 1
case 9 : sep5 := sep5 + 1
case 10 : oct5 := oct5 + 1
case 11 : nov5 := nov5 + 1
case 12 : dec5 := dec5 + 1
,0,"")) + chr(13))));
x
//{@maxformonth} to be placed in the detail section and suppressed:
whileprintingrecords;
stringvar x;
stringvar m;
numbervar yr;
numbervar i;
shared stringvar k;
for yr := 2003 to 2005 do(
for i := 1 to 12 do(
if (
previousIsNull({ALL_ASSIGNMENTS.Date Completed}) or
previous({ALL_ASSIGNMENTS.Date Completed}) > date(yr,i,15)
) and
Date(previous({ALL_ASSIGNMENTS.Date Assigned})) <= date(yr,i,15) then (
if left((totext(yr,"0000") +" "+ monthname(i)),8) = m then
m := "" else
m := x)));
if onlastrecord or
(left(m,instr(m,":")) <> left(x,instr(x,":"))
) then
k := k + m;
//{@display} for the report footer:
whileprintingrecords;
shared stringvar k;
Format {@display} to "Can Grow" so that the results for each month per year are displayed. I used the shared variable for the "k" variable so that it would be available for graphing.
-LB