30 个最重要的 Analytics 函数

ACLScript 中的 30 个最重要的函数在很多不同任务中都很有用。请经常使用这些函数,以帮助您在您的脚本中准备、分析、转换和协调数据。

移除前导和后继空格

Analytics 表中的字符域通常包含前导或后继空格,因为域宽是固定的。当您需要使用字符域中的数据执行操作时,您可以移除这些空格,以便字符串只包含实际数据。

ALLTRIM()

返回从输入字符串中删除前导和结尾空格后得到的字符串。

说明

对您要用作另一函数的输入的任何字符域使用 ALLTRIM(),以便没有任何前导或后继空格会影响返回值是一种好的做法。

示例

Vendor_Number 域包含值 " 1254"。您需要从 Vendor_Number 中移除该额外空格,以便您可以将该域与另一表中的数据进行协调。

COMMENT 返回 "1254"
ALLTRIM(Vendor_Number)

同步字母大小写

Analytics 中的字符串比较区分大小写,因此,在使用数据执行任何比较、联接或关联之前,对域中的所有数据的大小写进行同步会很有用。

UPPER()

返回把字母字符转换为大写的字符串。

示例

Last_Name 域包含值 "Smith"。您需要使该值为大写,以便与另一表中的大写值进行比较。

COMMENT 返回 "SMITH"
UPPER(姓氏)

LOWER()

返回把字母字符转换为小写的字符串。

示例

Last_Name 域包含值 "Smith"。您需要使该值为小写,以便与另一表中的小写值进行比较。

COMMENT 返回 "smith"
LOWER(姓氏)

PROPER()

返回一个字符串,该字符串的每个单词的第一个字符都被设置为大写,其他字符则设置为小写。

示例

Last_Name 域包含值 "smith"。您需要在您的输出中将其显示为正确的名词。

COMMENT 返回 "Smith"
PROPER(Last_Name)

计算和分离字符串

当您需要从较长的字符串中提取一段数据时,或者测试有关该字符串的某些信息(如它的长度或内容)时,请使用下列函数。

SUBSTR( )

从字符串中返回一个指定的子串。

示例

GL_Account_Code 域包含值 "001-458-873-99"。您需要从字符串中提取前三个字节或字符。

COMMENT 返回 "001"
ASSIGN v_start_pos = 1
ASSIGN v_length = 3
SUBSTR(GL_Account_Code, v_start_pos, v_length)

LAST()

返回自字符串结尾起指定数量的字符。

示例

GL_Account_Code 域包含值 "001-458-873-99"。您需要从字符串中提取最后两个字节或字符。

COMMENT 返回 "99"
ASSIGN v_num_chars = 2
LAST(GL_Account_Code, v_num_chars)

SPLIT()

从字符串中返回一个指定的段。

示例

GL_Account_Code 域包含值 "001-458-873-99"。您需要从字符串中提取第二个代码段。

COMMENT 返回 "458"
ASSIGN v_delimiter = "-"
ASSIGN v_segment_num = 2
SPLIT(GL_Account_Code, v_delimiter, v_segment_num)

AT()

返回一个数字,该数字指定某个子串在字符值内的哪个位置开始出现。

示例

GL_Account_Code 域包含值 "001-458-873-99"。您需要确定值 "458" 的起始字节位置以测试 GL 代码的第二段是不是 "458"(起始位置 "5")。

COMMENT 返回 "5"
ASSIGN v_occurrence = 1
ASSIGN v_substring = "458"
AT(v_occurrence, v_substring, GL_Account_Code)

OCCURS()

返回指定字符值中子串出现次数的计数。

示例

GL_Account_Code 域包含值 "001-458-873-99"。您需要通过确保数据包含三个连字符,以确定 GL 代码被正确格式化。

COMMENT 返回 "3"
ASSIGN v_substring = "-"
OCCURS(GL_Account_Code, v_substring)

LENGTH()

返回某个字符串中的字符数。

示例

GL_Account_Code 域包含值 "001-458-873-99"。您需要通过确保数据包含三个连字符,以确定 GL 代码被正确格式化。

COMMENT 返回 "14"
LENGTH(GL_Account_Code)

转换数据类型

根据数据源和生成 Analytics 表的导入语句的不同,您可能需要将某个域中的值从一个数据类型转换为另一数据类型,以便操作是可能的。例如,要对作为字符导入的数据 ("12345") 执行算术运算,您必须将其转换为数值类型。

STRING()

将数值转换为字符串。

示例

Invoice_Amount 域包含值 12345.67。您需要将其转换为字符数据。

COMMENT 返回 "12345.67"
ASSIGN v_str_length = 8
STRING(Invoice_Amount, v_str_length)

VALUE()

将字符串转换为数值。

提示

VALUE( ) 经常被与 ZONED( ) 一起使用以添加前导零。

示例

Invoice_Amount 域包含值 "12345.67"。您需要将其转换为数值数据。

COMMENT 返回 12345.67
VALUE(Invoice_Amount, 2)

CTOD()

将字符或数值日期值转换为日期。还可以从字符或数值日期时间值中提取日期并将其作为日期返回。英文“Character to Date”的缩写。

示例

Submission_Date 域包含值 "April 25, 2016"。您需要将其转换为日期时间数据。

COMMENT 返回 `20160425`
ASSIGN v_date_format = "mmm dd, yyyy"
CTOD(Submission_Date, v_date_format)

DATE()

从指定的日期或日期时间中提取日期并将其以字符串形式返回。还可以返回当前操作系统日期。

示例

Submission_Date 域包含值 `20160425`。您需要将其转换为字符数据。

COMMENT 返回 "04/25/2016"
ASSIGN v_date_format = "MM/DD/YYYY"
DATE(Submission_Date, v_date_format)

添加前导零

当您需要协调需要前导零的域时,将数值数据转换为字符数据,并且向输出中添加前导零。

ZONED()

将数值数据转换为字符数据并将前导零添加至输出。

示例

Employee_Number 域包含值 "254879"。您需要将该值转换为具有前导零的 10 数字字符串。

提示

在使用数值作为 ZONED() 的输入之前,必须使用 VALUE() 函数将字符转换为数值数据。

COMMENT 返回 "0000254879"
ASSIGN v_str_length = 10
ASSIGN v_num_decimals = 0
ZONED(VALUE(Employee_Number, v_num_decimals), v_str_length)

BINTOSTR( )

返回由 ZONED 或 EBCDIC 字符数据转换成的 Unicode 字符数据。英文“Binary to String”的缩写。

说明

仅限于 Unicode 版本。对于非 Unicode 版本,请参阅上面的 ZONED()

示例

Employee_Number 域包含值 "254879"。您需要将该值转换为具有前导零的 10 数字字符串。

提示

在使用数值作为 ZONED() 的输入之前,必须使用 VALUE() 函数将字符转换为数值数据。然后使用 BINTOSTR() 将从 ZONED() 返回的 ASCII 数值转换为 Unicode。

COMMENT 返回 "0000254879"
ASSIGN v_str_length = 10
ASSIGN v_num_decimals = 0
ASSIGN v_str_type = "A"
BINTOSTR(ZONED(VALUE(Employee_Number, v_num_decimals), v_str_length), v_str_type)

提取日期时间部分

使用下列函数可隔离和提取日期时间值的特定组成部分。

MONTH( )

从指定的日期或日期时间中提取月份并将其以数值形式(1 到 12)返回。

示例

Transaction_Date 域包含值 `20160815 100252`。您需要将月份提取为具有前导零的字符数据。

COMMENT 返回 "08"
ASSIGN v_str_length = 2
ZONED(MONTH(Transaction_Date), v_str_length)

DAY( )

从指定的日期或日期时间中提取日期并将其以数值形式返回(1 到 31)。

示例

Transaction_Date 域包含值 `20160815 100252`。您需要将日提取为字符数据。

COMMENT 返回 "15"
ASSIGN v_str_length = 2
STRING(DAY(Transaction_Date), v_str_length)

YEAR( )

从指定的日期或日期时间中提取年份并使用 YYYY 格式将其以数值形式返回。

示例

Transaction_Date 域包含值 `20160815 100252`。您需要将年份提取为数值类型值。

COMMENT 返回 2016
YEAR(Transaction_Date)

HOUR( )

从指定的时间或日期时间中提取小时并将其以使用 24 小时时钟的数值形式返回。

示例

Transaction_Date 域包含值 `20160815 100252`。您需要将时提取为数值类型值。

COMMENT 返回 10
HOUR(Transaction_Date)

MINUTE( )

从指定的时间或日期时间中提取分钟并将其以数值形式返回。

示例

Transaction_Date 域包含值 `20160815 100252`。您需要将分提取为数值类型值。

COMMENT 返回 2
MINUTE(Transaction_Date)

SECOND( )

从指定的时间或日期时间中提取秒数并将其以数值形式返回。

示例

Transaction_Date 域包含值 `20160815 100252`。您需要将秒提取为数值类型值。

COMMENT 返回 52
SECOND(Transaction_Date)

CDOW()

返回指定日期或日期时间是星期几。英文“Character Day of Week”的缩写。

示例

Transaction_Date 域包含值 `20160815 100252`。您需要将日的名称提取为字符数据。

COMMENT 返回 "Mon"
CDOW(Transaction_Date, 3)

CMOY( )

返回指定日期或日期时间的月份名称。英文“Character Month of Year”的缩写。

示例

Transaction_Date 域包含值 `20160815 100252`。您需要将月份的名称提取为字符数据。

COMMENT 返回 "Aug"
CMOY(Transaction_Date, 3)

操纵字符串

使用下列函数移除或者替换字符域的片段。

INCLUDE()

返回一个仅包括指定字符的字符串。

示例

Address 域包含值 "12345 ABC Corporation"。您需要提取地址号码并排除公司名称。

COMMENT 返回 "12345"
ASSIGN v_chars_to_return = "0123456789"
INCLUDE(Address, v_chars_to_return)

EXCLUDE()

返回一个排除指定字符的字符串。

示例

Address 域包含值 "12345 ABC Corporation"。您需要提取公司名称并排除地址号码。

COMMENT 返回 "ABC Corporation"
ASSIGN v_chars_to_exclude = "0123456789" 
EXCLUDE(Address, v_chars_to_exclude)

REPLACE()

用新的字符串替换指定字符串的所有实例。

示例

Address 域包含值 "12345 Acme&Sons"。您需要将 "&" 字符替换为单词 " and "。

COMMENT 返回 "12345 Acme and Sons"
ASSIGN v_target_char = "&"
ASSIGN v_replacement_char = " and "
REPLACE(Address, v_target_char, v_replacement_char)

OMIT( )

返回一个或多个指定子串被删除的字符串。

示例

Address 域包含值 "12345 Fake St"。您需要提取不带街道后缀的地址。

COMMENT 返回 "12345 Fake"
ASSIGN v_chars_to_omit = "St"
OMIT(Address, v_chars_to_omit)

REVERSE()

返回字符以倒序排列的字符串。

示例

Report_Line 域包含值 "001 Correction 5874.39 CR "。您需要颠倒该值并省略任何前导或后继空格。

COMMENT 返回 "RC 93.4785 noitcerroC 100"
REVERSE(ALLTRIM(Report_Line))

BLANKS()

返回包含指定数量空格的字符串。

示例

您需要基于 region_code 域中的值为地区名称创建一个计算域。您必须确保您在命令末尾指定的默认值起码和最长的输入值一样长。

COMMENT BLANKS 返回一个包含 8 个 " " 字符的字符串。
ASSIGN v_length = 8
DEFINE FIELD region COMPUTED

"Southern" IF region_code = 1
"Northern" IF region_code = 2
"Eastern" IF region_code = 3
"Western" IF region_code = 4
BLANKS(v_length)
ACL 脚本指南 14.1