"Count if" 在 Crystal 报告中(水平)

"Count if" in Crystal Reports (horizontally)

我正在使用 Crystal 报告。 我想计算每行具有 "Yes" 的所有单元格和具有 "No" 的所有单元格,如下图所示:

您需要使用自定义公式来计算它。在报表设计中创建公式字段,即 ff_Evaluateff_Yesff_No 并在公式编辑器中设置它们的值,如下所示:

  1. ff_Evaluate(检查每一列并添加到 yes 或 no var)

    WhilePrintingRecords;
    numberVar YesCount := 0;
    numberVar NoCount := 0;
    
    if {table.T0} = "Yes" then
        YesCount := YesCount + 1
    else if {table.T0} = "No" then
        NoCount := NoCount + 1;
    
    if {table.T1} = "Yes" then
        YesCount := YesCount + 1
    else if {table.T1} = "No" then
        NoCount := NoCount + 1;
    ...
    ...
    if {table.Tn} = "Yes" then
        YesCount := YesCount + 1
    else if {table.Tn} = "No" then
        NoCount := NoCount + 1;
    
  2. ff_Yes

    WhilePrintingRecords;
    EvaluateAfter ({@ff_Evaluate});
    numberVar YesCount;
    
  3. ff_No

    WhilePrintingRecords;
    EvaluateAfter ({@ff_Evaluate});
    numberVar NoCount;
    

现在将这些公式字段放在 Details 部分,然后 Suppress ff_Evaluate by Right Click 在上面,指向 Format Field,然后在 Common 选项卡中 select Suppress

假设列名为 T0T1T2T3T4。根据需要增加。

创建一个公式 (TOTAL),将其放入“详细信息”部分(如果需要,请隐藏它):

// create an array to contain the fields' values
Local Stringvar Array values := [{Command.T0},{Command.T1},{Command.T2},{Command.T3},{Command.T4}];

// global variables to contain tallies
Numbervar Y:=0;
Numbervar N:=0;

// generate tallies
Local Numbervar i;
For i:=1 To Ubound(values) Do (
    select values[i]
    case 'Y': Y:=Y+1
    case 'N': N:=N+1
)
;

创建一个公式 (Y),将其放在详细信息部分:

// display Y after tallies have been generated
EvaluateAfter({@TOTAL});
Numbervar Y;

创建一个公式 (N),将其放在详细信息部分:

// display N after tallies have been generated
EvaluateAfter({@TOTAL});
Numbervar N;

如有必要,您可以使用合计字段来计算每个值的总和。