GROUP 命令

在移至表中的下一个记录之前(只有一条通过该表的通道),对记录执行一个或多个 ACLScript 命令。 可以按条件控制命令执行。

语法

GROUP <IF test> <WHILE 测试> <FIRST 范围|NEXT 范围>
  命令
  <...n>
<ELSE IF 测试>
  命令
  <...n>
<ELSE>
  命令
  <...n>
END

说明

某些 Analytics 命令不能与 GROUP 命令一起使用。 有关详细信息,请参见可以在 GROUP 命令中使用的命令

参数

名称 描述
IF 测试

可选

一个条件表达式,它必须为真以便处理每个记录。 仅对满足条件的那些记录执行该命令。

说明

在应用任何范围参数(WHILE、FIRST、NEXT)之后,仅针对表中的剩余记录评估 IF 条件。

WHILE 测试

可选

一个条件表达式,它必须为真以便处理每个记录。 该命令被一直执行到条件的计算结果为假或者到达表的末尾为止。

说明

如果您将 WHILE 与 FIRST 或 NEXT 结合使用,请在达到一个限制时立即记下处理步骤。

FIRST 范围 | NEXT 范围

可选

要处理的记录数:

  • FIRST 从第一个记录开始处理,直到达到指定的记录数为止
  • NEXT 从当前选定的记录开始处理,直到达到指定的记录数为止

请使用范围指定要处理的记录数。

如果您省略 FIRST 和 NEXT,则会默认处理所有记录。

命令 <...n>

要在 GROUP 内部执行的一个或多个 ACLScript 命令。 有关 GROUP 内部支持的命令的完整列表,请参见可以在 GROUP 命令中使用的命令

如果前面存在 IF 或 ELSE IF,则该测试必须评估为真。

如果该命令被列于 ELSE 之下,在有尚未被前面的任一命令处理的记录的情况下,该命令被执行。 您可以包含多条命令,每条命令另起一行开始。

ELSE IF 测试

可选

为 GROUP 命令打开一个 ELSE IF 块 该条件测试不匹配 GROUP 命令测试或前面的任何 ELSE IF 测试的记录。

您可以包含多项 ELSE IF 测试,这些测试将从上至下依次执行,直到该记录被评估为真,并且跟在 ELSE IF 语句之后的命令被执行为止。

ELSE

可选

为 GROUP 命令打开一个 ELSE 块 对于在之前的所有测试中被评估为假的记录,执行后面的命令。

END GROUP 命令的末尾。

示例

简单 GROUP

简单组以 GROUP 命令开始,后跟一系列命令,然后以 END 命令终止:

GROUP
  COUNT
  HISTOGRAM ON Quantity MINIMUM 0 MAXIMUM 100 INTERVALS 10
  CLASSIFY ON Location SUBTOTAL Quantity
END

GROUP IF

条件组根据条件是 true 还是 false 来执行命令。 以下 GROUP 命令仅对其 Product_class 值小于 5 的记录执行:

GROUP IF Product_class < "05"
  COUNT 
  HISTOGRAM ON Quantity MINIMUM 0 MAXIMUM 100 INTERVALS 10
  CLASSIFY ON Location SUBTOTAL Quantity
END

GROUP IF ...ELSE

不满足测试条件的记录会被忽略,除非您包含一个 ELSE 块。

ELSE 语句后面可跟任何数量的命令。 在以下示例中,所有不满足条件的记录的数量域都被进行了合计:

GROUP IF Product_class < "05"
  COUNT 
  HISTOGRAM ON Quantity MINIMUM 0 MAXIMUM 100 INTERVALS 10
  CLASSIFY ON Location SUBTOTAL Quantity
ELSE
  TOTAL Quantity
END

GROUP IF...ELSE IF...ELSE

您可以在一个组中包含多个 ELSE/IF 块,只要每个 ELSE/IF 块包含不同的测试即可。 在以下示例中,ELSE IF 块和 ELSE 块生成四个合计:

GROUP IF Product_class < "05"
  COUNT 
  HISTOGRAM ON Quantity MINIMUM 0 MAXIMUM 100 INTERVALS 10
  CLASSIFY ON Location SUBTOTAL Quantity
ELSE IF Product_class = "05"
  TOTAL Quantity
ELSE IF Product_class = "06"
  TOTAL Quantity
ELSE IF Product_class = "07"
  TOTAL Quantity
ELSE
  TOTAL Quantity
END

嵌套的 GROUP 命令

嵌套组是指包含在其他组中的组。 嵌套组向您提供了功能强大的手段,来控制对哪些记录执行哪些命令。 大多数应用程序不需要如此高级的功能,但可在必要时使用嵌套组。

与其他组一样,使用 END 命令可终止嵌套组。 Analytics 只在所有组命令均被终止之后才开始处理数据:

GROUP IF Product_class < "05"
  COUNT
  STRATIFY ON Quantity SUBTOTAL Quantity MIN 0 MAX 100 INT 10
  GROUP IF Quantity > 0
    STATISTICS ON Quantity
    HISTOGRAM ON Quantity
  END
ELSE
  TOTAL Quantity
END

在此示例中,从 COUNT 开始的所有命令(包括下一个 GROUP)只在产品类别小于 05 的情况下执行。

如果数量大于零,则执行 STATISTICS 和 HISTOGRAM 命令。 但是,因为第二个 GROUP 命令被嵌套,所以仅对满足条件产品类别 < "05" 且数量 > 0 的记录执行 STATISTICS 和 HISTOGRAM 命令。

在 GROUP 内部生成系统变量

您可以使用 GROUP 为单个命令创建多个系统变量。

通常,当您运行命令如 TOTAL、COUNT 或 STATISTICS 时,只生成一个系统变量。 每当您运行该命令时,都会覆盖上次执行该命令得到的值。 在 GROUP 内部运行的命令会为 GROUP 内部命令的每个实例创建一个特定的变量。

在该示例中,TOTAL 命令为 Metaphor_Trans_2002 表中的每个产品类别计算 Amount 域的和。 当代码运行时,将生成以下变量,并且可以在 GROUP 之后的后续命令中使用它们:

  • TOTAL2 产品类别 03 的 Amount 域的和
  • TOTAL3 产品类别 05 的 Amount 域的和
  • TOTAL4 产品类别 08 的 Amount 域的和
  • TOTAL5 产品类别 09 的 Amount 域的和
OPEN Metaphor_Trans_2002
GROUP
  TOTAL AMOUNT IF PRODCLS = "03"
  TOTAL AMOUNT IF PRODCLS = "05"
  TOTAL AMOUNT IF PRODCLS = "08"
  TOTAL AMOUNT IF PRODCLS = "09"
END
CLOSE Metaphor_Trans_2002

备注

提示

有关 LOOP 和 GROUP 命令的详细教程,请参见分组和循环

可以在 GROUP 命令中使用的命令

下表列出了可在 GROUP 命令内部使用的 Analytics 命令。

如果某个命令未在下面列出,则无法在 GROUP 内部使用它。

AGE ASSIGN BENFORD
CLASSIFY COMMENT COUNT
CROSSTAB DUPLICATES EXPORT
EXTRACT GAPS GROUP
HISTOGRAM JOIN LIST
LOOP MERGE PROFILE
REPORT SEQUENCE STATISTICS
STRATIFY SUMMARIZE TOTAL
VERIFY    

分组和循环

GROUP 命令使您可以在移至下一条记录前对一条记录执行多个命令,这可以显著减少处理时间。

当您需要针对某个记录多次执行一系列命令时,可在 GROUP 命令内部使用 LOOP 命令。

将变量用于 GROUP

用户定义的变量

要在 GROUP 命令内部使用变量,必须在进入 GROUP 块之前定义该变量。

说明

尽管您可以在 GROUP 块内部初始化和定义变量,但不建议这样做。 在 GROUP 内部初始化的变量在被使用时可能导致意外结果。

在 GROUP 的内部,您可以使用变量替换来求变量的值。 变量保持输入 GROUP 时的值不变。

您不能在 GROUP 内部定义变量然后使用变量替换来引用它:

ASSIGN v_test = "hello"
GROUP
  ASSIGN v_test2 = "%v_test% world"
  COMMENT 以下内容无效: v_test3 = "%v_test2% again"
END

系统定义的变量

某些命令(如 TOTAL 和 STATISTICS)基于这些命令执行的计算生成系统变量。 如果您使用 GROUP 执行这些命令,则产生的任何系统变量都会被从 GROUP 内部命令的行号(排除空行)开始,一直到 n 为止连续编号。 对于 GROUP 中的每个行号,n 的值都会增加 1。

说明

您必须等待至 GROUP 完成处理,然后才能使用在 GROUP 内部创建的任何系统生成变量。 该命令必须针对表中的每个记录运行,该变量才会变得可用。 请在 GROUP 的结束 END 关键字之后使用这些变量。

在以下示例中,第一个 TOTAL 命令生成变量 TOTAL2,第二个命令生成 TOTAL4。 一旦 GROUP 完成,这两个变量就都可供在后续命令中使用:

GROUP
  TOTAL Discount IF Order_Priority = "Low"
  ASSIGN v_var = "test"			
  TOTAL Discount IF Order_Priority = "High"
END

语法说明

  • 需要使用为 GROUP 命令列出的多行语法,因此 GROUP 命令无法在命令行中输入。
  • 每条 GROUP 命令必须以 END 命令结束。
  • 在脚本中使用 GROUP 命令时,可以缩进该组中列出的命令,从而提高命令块的可读性。