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,则会默认处理所有记录。 |
命令 <...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 命令时,可以缩进该组中列出的命令,从而提高命令块的可读性。