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)