APPEND 命令

通过在一个新 Analytics 表中附加两个或更多个 Analytics 表中的记录来组合这些记录。

语法

APPEND 表1, 表2, <...n> TO 表名称 <COMMONFIELDS> <OPEN> <ASCHAR> <ALLCHAR> <SOURCETABLE>

参数

名称 描述
表1, 表2, <...n>

要附加的表。

每个表中的记录被按照您指定表的顺序附加。 输出表包含表1 中的记录,后面跟表2 中的记录,依此类推。

源表可以具有不同或者相同的记录结构,并且可以是排序的或者非排序的。

TO 表名

要将命令结果发送到的位置:

  • 表名将结果保存到一个 Analytics 表

    请将表名指定为具有 .FIL 文件扩展名的带引号的字符串。 例如:TO "Output.FIL"

    默认情况下,表数据文件 (.FIL) 被保存到包含 Analytics 项目的文件夹。

    请使用绝对或相对文件路径将该数据文件保存到另外的现有文件夹:

    • TO "C:\Output.FIL"
    • TO "Results\Output.FIL"

    说明

    表名称被限制为不超过 64 个字母数字字符(不包括 .FIL 扩展名)。 该名称可以包括下划线字符 ( _ ),但不能包括其他特殊字符或任何空格。 该名称不能以数字开头。

COMMONFIELDS

可选

只将那些出现在所有被附加的表中的域包括在输出表中。

如果您省略 COMMONFIELDS,则将所有表中的所有域包括在输出表中。 输出表中不存在相应源表域的位置会出现空值。

提示

有关演示这两个选项的图表和屏幕截图,请参见附加表

说明

APPEND 命令不支持附加计算域。 有关详细信息,请参见计算域不受支持

什么使域成为“公共”域?

要使域被视为公共域,它们必须:

  • 出现在每个源表中
  • 具有完全相同的物理名称
  • 属于同一个数据类别:
    • 字符
    • 数值
    • 日期时间
    • 逻辑

相同的名称,不同的数据类别

如果两个域具有完全相同的名称但属于不同的数据类别,则会显示错误消息,并且不会执行 APPEND 命令。

该错误消息包含 APPEND 所指定的表集合中的所有数据类别冲突。 该消息被保存到命令日志中。

说明

您可以通过使用 ASCHAR 或 ALLCHAR 协调数据类别来避免此情况。

OPEN

可选

在命令执行后打开该命令创建的表。 仅当该命令创建输出表时有效。

ASCHAR

可选

通过将非字符域转换到字符数据类别,协调具有相同名称和不同数据类别的域。

例如,您附加两个表,其中一个表中的 Employee_ID 域是字符数据,而另外一个表中的该域是数值数据。 数值类型的 Employee_ID 域被转换为字符数据,而这两个域被没有错误地附加。

如果还指定了 ALLCHAR,则 ASCHAR 会被忽略。

ALLCHAR

可选

将要附加的所有表中的所有非字符域转换到字符数据类别。

这一向字符数据的全局转换可确保所有同名的域被没有错误地附加。

说明

附加后,您可以更改整个附加域的数据类别(如果对该域包含的数据合适的话)。

SOURCETABLE

可选

在输出表中包括源表域 (Source_Table)。

对于输出表中的每个记录,源表域标识该记录的源表。

提示

当您分析输出表中的数据时,包括您所附加的源表的名称可能提供有用的信息。

示例

附加三个每月交易表

下面的示例附加三个每月交易表,并且输出一个包括三个源表中的所有域的季度交易表:

APPEND Trans_Jan, Trans_Feb, Trans_Mar TO Trans_Q1

附加三个员工表并只包括公共域

下面的示例附加三个部门员工表并输出一个只包括三个源表中的公共域的主员工表:

APPEND Employees_central, Employees_east, Employees_west TO Employees_master COMMONFIELDS

附加三个员工表并协调具有不同数据类别的域

下面的示例附加了三个部门员工表,在这些表中,某些同名的域使用不同的数据类别。

第一个示例仅在出于协调需要时才将非字符域转换为字符数据类别:

APPEND Employees_central, Employees_east, Employees_west TO Employees_master ASCHAR

第二个示例无论是否出于协调需要都将所有非字符域转换为字符数据类别:

APPEND Employees_central, Employees_east, Employees_west TO Employees_master ALLCHAR

备注

说明

有关此命令工作原理的详细信息,请参见 Analytics 帮助

工作原理

APPEND 命令通过附加两个或更多个表并创建一个新表来组合这些表中的记录。 附加意味着将一组记录添加到另一组记录的底部。

具有相同物理名称和相同数据类别的源表域被直接附加到彼此。

具有在所有源表中唯一的物理名称的域被添加到输出表中,但不会被直接附加到任何其他域。

提示

如果您想要直接附加命名不一致的域,请在附加之前在表布局中标准化这些域的物理名称。 (假定这些域属于同一个数据类别,否则您使用 ASCHAR 或 ALLCHAR 协调这些域的数据类别。)

何时使用 APPEND

当您想要将来自多个表的数据与相同或类似的结构进行组合时,请使用 APPEND。 要将月度表或季度表组合到年度表中,APPEND 是一种很好的选择。

提示

单次执行 APPEND 命令可取代多次执行带有 APPEND 选项的 EXTRACT 命令。

但不能取代 JOIN 或 DEFINE RELATION

APPEND 一般而言不能取代 JOIN 或 DEFINE RELATION 命令,因为它不允许您基于公共键域中的匹配值或不匹配值包括或者排除记录。 使用 APPEND 时,每个源表中的所有记录都被包括在输出表中。

附加完全不同的表

您可以附加完全不同的表 – 即两个或者更多个不具有任何公共域的表。 在某些场合下,附加不同的表可以实现某种解析目的,尽管这不是 APPEND 的主要用途。

附加日期时间域

要附加两个或更多个日期时间域,必须满足以下条件:

  • 完全相同的物理名称
  • 完全相同的数据类别(日期时间)
  • 完全相同的数据子类型(日期、日期时间或时间)
  • 对时区指示符的使用完全相同 – 所附加的所有域都使用或者都不使用

如果两个日期时间域具有完全相同的名称但不满足其他条件之一,则会显示一条错误消息,并且不执行 APPEND 命令。

该错误消息包含 APPEND 所指定的表集合中所有未得到满足的条件。 该消息被保存到命令日志中。

说明

您可以通过将不同的日期时间域转换到字符数据类别来协调这些域,然后附加它们。 此方法使您可以组合单个表中的数据。 但是,根据源数据性质的不同,您可能无法将组合的数据重新转换到日期时间数据。

自动协调

在某些情况下,APPEND 命令自动协调域以便附加它们:

域的数据类别 所执行的协调
字符
  • 不同的域长度会被协调。
  • 不同的字符数据类型,如自定义、PCASCII 和 EBCDIC,被通过将域转换为 ASCII 或 UNICODE 数据类型加以协调。
数值
  • 不同的域长度会被协调。 这些域被转换到 ACL 数据类型。
  • 不同的已定义小数位数被协调。 小数位数被按照最大的小数位数进行标准化,必要时会向数值类型值添加后继零。 这些域被转换到 ACL 数据类型。
  • 不同的数值数据类型,如打印、浮点、EBCDIC 和 Micro,被通过将域转换到 ACL 数据类型加以协调。
日期时间
  • 源数据中的不同日期、日期时间或时间格式被通过将域转换到 Analytics 默认格式加以协调。
    • YYYYMMDD
    • YYYYMMDD hh:mm:ss
    • hh:mm:ss

何时不执行自动协调

Analytics 在下列情况下不自动协调域。 出现错误消息,并且未执行附加操作。

  • 两个具有相同名称的域属于不同数据类别。
  • 两个具有相同名称的日期时间域属于不同日期时间子类型(日期、日期时间或时间)。
  • 两个具有相同名称的日期时间域在使用时区指示符方面不一致。

说明

上面解释了用户指定的对具有相同名称和不同数据类别的域进行的协调。 要了解更多信息,请参考ASCHARALLCHAR

计算域不受支持

APPEND 命令不支持附加计算域。 当您附加表时,源表中的任何计算域都会被自动从输出表中排除。

如果某个源表中的计算域具有与另一源表中的物理域相同的名称,则会显示一条错误消息,并且不会执行 APPEND 命令。

提示

您在附加计算域时可以首先提取它以将其转换为物理域。 (有关详细信息,请参见EXTRACT 命令。)然后,您可以在附加操作中使用提取的表。

另一种方法是重新创建附加输出表中的计算域。

记录说明域不受支持

APPEND 命令不支持附加记录说明域。 当您附加表时,源表中的任何记录说明域都会被自动从输出表中排除。

如果某个源表中的记录说明域具有与另一源表中的物理域相同的名称,则会显示一条错误消息,并且不会执行 APPEND 命令。

当您向记录添加说明时,Analytics 会自动生成一个记录说明域。

记录长度

如果您在附加时包括所有源表中的所有域,则输出表中的记录长度可能比源表中的最长记录还要长。

如果输出记录长度超过 Analytics 最大值 32 KB,则会显示一条错误消息。

附加和小数位

特定行为控制着包括小数位的数值域的附加。

小数位设置

APPEND 命令使用在表布局的域定义中的小数位数设置中定义的小数位数。

说明

小数位数设置可能与源数据中的实际小数位数不同。 超过小数位数设置的小数位未定义,并且被在计算中四舍五入。

不一致的小数位数设置

如果被附加的数值域具有不一致的小数位数设置,则这些域被转换到 ACL 数据类型,并且被自动按最长小数位数设置进行协调。

源数据文件中任何超过最长小数位数设置的小数位都会被从 APPEND 生成的输出表中排除

一致的小数位数设置

如果被附加的数值域具有一致的小数位数设置,则不会发生数据类型转换或协调。

源数据文件中任何超过小数位数设置的小数位都会被包括在 APPEND 生成的输出表中。

排序

源表中的任何现有排序顺序都被分别保持在输出表中的各自记录集中。

即使对所有源表中的记录进行了排序,输出表仍被视为未排序,因为源记录被成组附加,而未考虑其他源表中的任何现有排序顺序。

例如,如果您附加月度表或季度表以创建年度表,则月度或季度数据的任何内部排序都会被保留下来。 如果需要,您可以在执行附加操作后对输出表进行排序。

域顺序如何工作

公共域

源表中的公共域不必具有相同的顺序即可附加。

例如,即使下列域具有不同的顺序,它们也会被正确地附加:

table_1 姓氏 | 名字 | 中间名
table_2 名字 | 中间名 | 姓氏

APPEND 命令中指定的第一个表决定了输出表中域的顺序。 因此,在上面的示例中,输出表中的顺序是:

  • 姓氏 | 名字 | 中间名

非公共域

源表中的非公共域按照它们出现在选定源表组中的顺序出现在输出表中。

例如,当附加这两个表时:

table_1 标题 | 姓氏 | 名字 | 中间名
table_2 名字 | 中间名 | 姓氏 | 生日

输出表中的顺序是:

  • 标题 | 姓氏 | 名字 | 中间名 | 生日

备用列标题

源表中的备用列标题出现在输出表中。 如果一个以上的源表对于相同域具有一个备用列标题,则第一个选定表中的标题优先。