可以使用数据表向数据集添加新字段。 数据表可用于添加字段,例如增长率、损失率和随时间的变化,方法为从数据集中选择字段并应用运算符和函数。
注:
- 数据表格可以提供数据的典型视图,显示限制为 2,000 行。 以升序或降序对表格进行排序可以查看顶部 2,000 行以及底部 2,000 行。 所有计算均会在完整数据集上执行。
- 新计算字段仅显示在您的工作簿中,而不会显示在原始数据集中。 例如,在将计算字段 percentchange 添加到从 Microsoft Excel 添加的 CommodityPrices 数据集后,percentchange 字段将位于您的工作簿中,但不会添加到原始 Excel 文件中。 如果要保留工作簿之外的计算字段,则可以通过共享数据集创建新的要素图层。
- 还可以使用查找答案中的计算百分比变化、计算比例和计算 Z 得分以计算字段。
提示:
可以使用数据表将归一化数据添加到地图、图表和表的数据集。 在计算数据并将其添加到您的数据集后,需要更改字段类型以采用比率/比例字段 形式表示该数据。 有关数据归一化的详细信息,请参阅分区统计图。
将字段添加到数据集
要向数据集添加字段,请完成以下步骤:
运算符
计算字段可能需要数学和逻辑运算符。 以下运算符可用于计算字段:
运算符 | 使用 |
---|---|
+ | 加。 |
- | 减。 |
× | 乘。 等效的键盘命令是 *。 |
÷ | 除。 等效的键盘命令是 /。 |
xy | 幂函数。 等效的键盘命令是 ^。 |
< | 小于。 |
> | 大于。 |
= | 等于。 |
<= | 小于或等于。 |
>= | 大于或等于。 |
<> | 不等于。 |
, | 逗号,用作函数中语法组件之间的分隔符。 |
( | 左括号。 |
) | 右括号。 |
AND | 逻辑运算符,必须满足所有条件。 |
OR | 逻辑运算符,必须满足其中一个条件。 |
IS NULL | 一个二进制运算符,用于测试字段中的值是否为空。 当测试值不为空时,输出值为 0;当测试值为空时,输出值为 1。 |
IS NOT NULL | 一个二进制运算符,用于测试字段中的值是否不为空。 当测试值为空时,输出值为 0;当测试值不为空时,输出值为 1。 |
注:
数学运算符(例如 +、-、> 和 =)与数字和比率/比例字段兼容。 函数(例如 CONCATENATE() 和 DATEDIF())可以分别用于代替字符串字段和日期/时间字段的某些数学运算符。
IS NULL 和 IS NOT NULL 运算符与除位置之外的所有字段类型(字符串、数字、比率/比例和日期/时间)兼容。 一些具有空值的字符串字段可以配置为空字符串。 在这些情况下,IS NULL 和 IS NOT NULL 将不会返回预期的结果。 相反,应使用 field="" 和 field<>"" 表达式分别代替 field IS NULL 和 field IS NOT NULL。
AND 和 OR 运算符可用于连接具有与其对应逻辑函数不同的语法的条件。 以下示例显示了使用函数和运算符的等效计算:
注:
在计算字段时,必须在 IF() 函数内使用 AND 和 OR。
函数 | 运算符 |
---|---|
IF(AND(MeanAge>=18, MeanAge<=33),"Millennial","Other") | IF(MeanAge>=18 AND MeanAge<=33,"Millennial","Other") |
IF(OR(Crime="Theft", Crime="Theft from vehicle", Crime="Shoplifting"), "Larceny", "Other") | IF(Crime="Theft" OR Crime="Theft from vehicle" OR Crime="Shoplifting", "Larceny", "Other") |
函数
可以使用数据表中的 fx 按钮或输入计算函数字段来访问函数。 函数分为四种类型:字符串、数值、日期和逻辑。
在计算中添加函数时,弹出窗口将显示函数语法。 您可以使用关闭按钮 移除弹出窗口,或通过单击输入计算函数字段中的函数来重新显示弹出窗口。
字符串函数
大多数字符串函数使用字符串输入生成字符串输出。 但是以下两个函数例外:VALUE() 函数和 FIND() 函数,这两个函数均使用字符串输入生成数值输出。
字符串函数中的输入文本可以为文字(用引号括起的文本)或类别字段值。 下表使用类别字段作为示例,并且使用可在这些字段中找到的示例值。 字段值中使用引号演示了字段具有分类数据。
语法 | 描述 | 示例 |
---|---|---|
CONCATENATE(text1, [text2], ... ) | 连接两个或多个字符串值。 | 加利福尼亚州学校的数据集包含街道地址字段、城市字段和邮政编码字段。 可以使用 CONCATENATE() 函数创建邮寄地址的单个字段:
|
FIND(find_text, within_text, [start_num]) | 提供字符串或文本字段内指定文本(一个或多个字符)的位置。 与诸如 MID()、LEFT() 或 RIGHT() 等其他函数结合使用时,FIND() 函数可能最有用。 | 数据集包含带街道地址的字段(包括数值和街道名称)。 要按街道对数据进行分类,可使用 MID() 函数从剩余地址中移除街道名称。 但是,每个数值的长度不同,因此无法对各行执行 start_num。 可使用 FIND() 函数找到 start_num。
|
LEFT(text, [num_chars]) | 返回文本字段的一部分。
| 交通事故数据集包括具有事故日期的类别字段,其中包括星期、日期和年份。 要按星期来研究事故,可使用 LEFT() 函数计算新字段以显示字段的前三个字符(从星期开始):
|
LOWER(text) | 将返回所有数据均转换为小写形式的字符表达式。 | 公共事业部门正在编写需要更换的街道符号列表。 向列表添加新条目后,Status 字段的格式变得不标准,因此无法使用唯一值来显示这些符号。 可使用 LOWER() 函数对 Status 字段进行标准化,以便全部显示小写字母:
|
MID(text, start_num, [num_chars]) | 返回文本字段的一部分。
| 加利福尼亚州学校的数据集包含街道地址字段、城市字段和邮政编码字段。 可以使用 MID() 函数从街道地址中分离街道名称:
|
RIGHT(text, [num_chars]) | 返回文本字段的一部分。
| 国家公园数据集包括具有公园名称和两位州代码的字段。 要按州对公园进行符号化,可使用 RIGHT() 函数来添加和计算新字段:
|
SUBSTITUTE(source_text, old_text, new_text) | 用指定的新文本替换字符串中的旧文本。
| 坑洼位置的数据集包含具有街道名称的字段。 当 Main Street 更名为 5th Street 时,需要更新数据集。 可使用 SUBSTITUTE() 函数更新 street_name 字段:
注:SUBSTITUTE() 函数将以 new_text 替换所有出现的 old_text。 例如,在函数 SUBSTITUTE("aba", "a", "c") 中,结果文本为“cbc”。 |
TRIM(text) | 将返回移除末尾多余空格的字符串。 | 要素服务包含在值的开头和结尾处存在多余空格的文本字符串。 可使用 TRIM() 函数移除多余的空格:
|
UPPER(text) | 将返回所有数据均转换为大写形式的字符表达式。 | NGO 总部位置的数据集包含组织全名及其缩写(如果适用)的字段。 可使用 UPPER() 函数对缩写进行标准化,以便全部显示大写字母:
|
VALUE(text, [format]) | 将文本转换为数值。
注:如果未提供 format,则 VALUE() 函数中的嵌套函数可能会输出意外的结果。 因此,建议在使用 VALUE() 函数时指定 format。 VALUE() 函数目前不支持将文本转换为负数。 | 零售店数据集具有含收入金额的类别字段。 可使用 VALUE() 函数将 Revenue 字段转换为数值。
|
数值函数
数值函数使用数值输入生成数值输出。 数值函数通常与其他函数结合使用,或者作为一种转换数据的方法。
输入数值可以为文字数值或数值字段。 为了更好地显示各个函数的用法,以下某些示例使用数值作为输入,而非字段。
语法 | 描述 | 示例 |
---|---|---|
ABS(number) | 返回绝对值。 |
|
AVG(number) | 返回平均值。 |
|
CEILING(number) | 将数字向上舍入为最近的 1 的倍数。 |
|
COS(number) | 指定角的三角余弦值,以弧度为单位。 可使用以下公式将度转换为弧度:
|
|
FLOOR(number) | 将数字向下舍入为最近的 1 的倍数。 |
|
LN(number) | 指定浮点表达式的自然对数。 自然对数使用常量 e 作为底数值(近似于 2.72) |
|
LOG(number) | 以指定数为底的数值的对数。 默认底数为 10。 |
|
MAX(number) 或 MAX(date) | 返回最大值。 |
|
MIN(number) 或 MIN(date) | 返回最小值。 |
|
POWER(number, power) | 表达式的指定幂值。 |
|
ROUND(number, num_digits) | 将数值四舍五入到指定位数。
|
|
SIN(number) | 指定角的三角正弦值,以弧度为单位。 可使用以下公式将度转换为弧度:
|
|
STDEV(number) | 数值字段的标准差。 |
|
SUM(number) | 返回总值。 |
|
TAN(number) | 返回输入表达式的正切值。 可使用以下公式将度转换为弧度:
|
|
日期函数
日期函数可以使用日期字段、文本或没有任何输入,具体取决于使用的函数。 DATEVALUE() 函数可用于替换 DATEDIF() 或 TIMEDIF() 函数中的日期字段。
注:
在 DATEDIF() 和 DATEADD() 中使用的日期/时间字段必须采用包含日期的格式(换言之,采用日期和时间格式或者仅日期格式)。 将不接受仅时间的日期/时间字段。
在 TIMEDIF() 中使用的日期/时间字段必须采用包含时间的格式(换言之,采用日期和时间格式或者仅时间格式)。 不接受仅日期的日期/时间字段。
语法 | 描述 | 示例 |
---|---|---|
DATE(year, month, day, [hour, minute, second], [AM/PM]) | 使用三个或更多单独的字段或值创建日期/时间字段。 接受以下规范:
注:所有输入字段均可以是数值或字符串,AM/PM 参数除外。 数值必须为整数值。 两位数年份必须为字符串。 如果您将 DATE() 函数与数据库数据集配合使用,并指定了任何时间参数(hour、minute 或 second),则必须输入所有时间参数的输入值。 | 餐厅数据集所包含的字符串字段中带有最近卫生检查的日期和时间。 可以使用 DATE() 函数创建检查的日期字段:
注:此示例中结果日期的格式将采用 24 小时制。 要使用 12 小时制,您必须指定 AM 或 PM。 相同的示例函数可以写成 DATE(2016, Month, Day, Hour, Min, 00, "AM")。 |
TIME(hour, minute, second) | 使用三个单独的字段或值创建日期/时间字段。 接受以下规范:
注:所有输入字段均可以是数值或字符串,AM/PM 参数除外。 数值必须为整数值。 | 医院记录的数据集包含病人的到达时间。 可以使用 TIME() 函数为记录创建时间字段:
注:此示例中结果时间的格式将采用 24 小时制。 要使用 12 小时制,您必须指定 AM 或 PM。 相同的示例函数可以写成 TIME(Hour, Min, 00, "AM")。 |
DATEADD(date, integer, [unit]) | 向输入字段中的日期添加指定的时间量。
如果未提供任何单位,则将使用 "D"。 向日期/时间字段添加月份时,输出将为相应月份的同一天,不考虑该月份中的天数。 如果该月份的相应日期在新月份中无效,则将使用该月份的最后一天。 例如,如果计算向输入字段添加三个月,并且原始日期之一为 2021 年 11 月 30 日,则输出值 2022 年 2 月 30 日无效。 由于 2022 年不是闰年,因此结果将记录为 2022 年 2 月 28 日。 | 公共卫生部门负责保存卫生区内患者的疫苗记录。 某种特定疫苗具有两针剂,这两针剂必须至少间隔 60 天,并且不超过 180 天。 DATEADD() 可用于创建字段,其中包含患者有资格接种第二剂的首个日期和最后一剂的截止日期。 有资格接种日期:
最终日期:
|
TIMEADD(time, integer, unit) | 向输入字段中的时间添加指定的时间量。
| 将以协调世界时间 (UTC) 记录数据集的日期和时间,需要将其转换为中部标准时间 (CST)。 可以使用 TIMEADD() 函数创建带有 CST 时间的日期/时间字段:
|
DATEDIF(start_date, end_date, [unit]) | 计算两个日期之间经过的时间。 start_date 必须早于 end_date,否则输出将为负值。
如果未提供任何单位,则将使用 "D"。 针对每个单位的结果执行四舍五入,如下所示:
| 餐厅数据集包含其最近卫生检查的日期。 可以使用 DATEDIF() 函数计算两次卫生检查之间经过的天数: 示例 1:
示例 2:
示例 3:
|
TIMEDIF(start_time, end_time, [unit]) | 计算两个日期/时间值之间经过的时间。 start_time 必须早于 end_time,否则输出将为负值。
如果未提供任何单位,则将使用 "ss"。 针对每个单位的结果执行四舍五入,如下所示:
| 医院收集记录的数据集中包括外科手术的开始和结束时间。 可以使用 TIMEDIF() 函数计算每个病人手术所消耗的时间:
|
DATEVALUE(date_text, [format]) | 将文本转换为日期。
注:如果未提供 format,则 DATEVALUE() 函数中的嵌套函数可能会输出意外的结果。 因此,建议在 DATEVALUE() 内嵌套函数时指定 format。 如果未提供 format,则未使用分隔符指定的日期(例如 "10312016")将视为毫秒。 因此,如果输入日期时未使用分隔符,建议指定一种格式。 如果指定日期时使用了分隔符,但是没有 format,则将猜测一种格式。 如果无法猜测格式,则将应用默认 "MM-DD-YY"。 DATEVALUE() 函数只能读取用引号括起的文本或字符串字段。 日期/时间字段无法用作 DATEVALUE() 函数的输入。 | 餐厅数据集包含其最近卫生检查的日期。 可使用 DATEVALUE() 函数指定自上次检查后经过的天数,从而指定当前日期:
可以通过多种方法对日期和时间进行格式化。 以下示例是一些将文本转换为日期格式的方法:
|
NOW() | 以日期/时间格式返回当前日期和时间。 将根据协调世界时间 (UTC) 记录时间。 | 餐厅数据集包含其最近卫生检查的日期。 可使用 NOW() 函数指定自上次检查后经过的天数,从而指定当前日期:
|
逻辑函数
逻辑函数使用字符串或数值输入生成字符串或数值输出。 输入内容可以为文字(用引号括起的文本或常数)或字段值。 下表使用字段和文本值的组合作为示例,并且使用可在给定字段中找到的示例值。
语法 | 描述 | 示例 |
---|---|---|
AND(condition,condition, ...) | 测试两个或多个条件,如果满足所有条件,则返回 TRUE。 AND() 应该在 IF() 函数的 condition 参数内使用。
| 数据集包含生活在每个区块组中的人的平均年龄。 市场研究人员希望了解哪些区块组主要包含千禧一代。 平均年龄在千禧一代年龄范围内的区块组可以通过 IF() 和 AND() 函数组合进行查找:
|
IF(condition, TRUE_expression, [FALSE_expression]) | 测试某一条件,并根据结果返回 TRUE 或 FALSE 值。
TRUE_expression 和 FALSE_expression 可以是任何有效的表达式,其中包括嵌套 IF() 函数。 TRUE_expression 和 FALSE_expression 的数据类型应该相同(例如,两者都是字符串或两者都是数值)。 | 数据集包含涵盖商店收入和费用的字段,可用于查找商店的状态(是否已发布净利润或净亏损)。 可使用 IF() 函数查找各个商店的状态:
|
ISNULL(field)* | 测试字段中的值是否为空。 当测试值不为空时,输出值为 0;当测试值为空时,输出值为 1。
ISNULL() 可单独使用或用于 IF() 函数的 condition 参数。 | 数据集包含涉及骑行者的交通事故的位置,以及发生事故的街道上的自行车道类型。 对于在没有自行车道的街道上发生的事故,RouteType 字段留空。 数据集可更新为使用 IF() 和 ISNULL() 函数组合填入空值。
|
ISNOTNULL(field)* | 测试字段中的值是否为空。 当测试值为空时,输出值为 0;当测试值不为空时,输出值为 1。
ISNOTNULL() 可单独使用或用于 IF() 函数的 condition 参数。 | 数据集包含涉及骑行者的交通事故的位置,以及发生事故的街道上的自行车道类型。 对于在没有自行车道的街道上发生的事故,RouteType 字段留空。 数据集可更新为使用 IF() 和 ISNOTNULL() 函数组合填入空值。
|
OR(condition,condition, ...) | 测试两个或多个条件,如果至少满足一个条件,则返回 TRUE。 OR() 应该在 IF() 函数的 condition 参数内使用。
| 一个数据集可包含整个城市犯罪发生的位置。 犯罪分析师想要通过与其他类似罪行进行比较来分析盗窃罪的模式。 为了将盗窃罪与其他罪行进行比较,分析师必须首先确定每种罪行是否应视为盗窃罪。 犯罪类型可以使用 IF() 和 OR() 函数的组合进行确定:
|
*没有数据的某些字段可以配置为空,而非 null。 在这些情况下,ISNULL() 和 ISNOTNULL() 将不会返回预期的结果。 相反,应使用 field="" 和 field<>"" 表达式分别代替 ISNULL(field) 和 ISNOTNULL(field)。