公式引用 V2
当前
可以在 Vault 中创建公式来完成各种任务。Vault 使用类似 Excel™ 的公式语言,包括函数和运算符,来计算日期、文本字符串以及数字。
Expression Engine 版本:以下内容引用了于 2019 年 4 月随 19R1 发布的更新版公式语法(Expression Engine V2)。如需为 19R1 之前创建的研究编写规则表达式,请参阅公式参考(V1)。
概念
请回顾以下概念,以熟悉 Vault 中公式的工作原理。
什么是公式
公式是一组用于创建期望结果的指令。例如,化学公式(两个 H 和一个 O 构成 H2O)。这并不是方程式的概念,因为氢和氧并不“等于”水,但可以用它们制造水。在某些情况下,公式是一种特殊类型的方程式,显示不同变量之间的关系。在这种情况下,公式是通过替换变量的值来进行评估(而非求解)的。
评估公式后,Vault 返回一个值或 True/False。
公式在哪里使用
公式在 Vault CDMS 中的多个地方使用:
- 数据验证规则
- 衍生条目
- 单位转换
- 视图中的衍生列
- 公式字段
- 字段默认值
公式的组成元素
公式由一个或多个表达式和参数组成。每个表达式包含值、函数、运算符、引用和变量,用于计算结果。参数是运算符或函数对表达式结果的操作。
术语 | 定义 |
---|---|
表达式 | 表达式是方程式或公式中的单个部分,由值、变量、运算符和/或函数组成。公式可能包含一个或多个表达式。 |
函数 | 函数是公式中的执行者。它们可以对公式中的表达式和值执行任务,以输出结果。 |
运算符 | 运算符是公式中的执行者。它们可以对公式中的表达式和值执行任务,以输出结果。 |
参数 | 参数是表达式用于函数时,函数对表达式结果进行操作的部分。 |
变量 | 变量是公式中的占位符值,在评估时 Vault 会将其替换为实际值。例如,如果在规则公式中引用数据收集条目的值,该数据收集条目的值就是变量。当 Vault 评估该条目的规则时,会用已收集的数据替换条目变量。 |
参考 | 引用是公式中的占位符值,指向与评估公式的对象相关的对象字段。 |
评估 | 当 Vault 评估公式时,意味着 Vault 已将所有变量替换为它们的执行值,并计算了公式中的表达式和参数结果。评估公式后,Vault 返回一个值、True 或 False。 |
True | 当公式返回 true 时,意味着 Vault 在公式中填入变量值后,结果成功通过了公式中的操作。例如,如果检查 Field 1 是否小于 10($field1.value__v < 10 ),当 Field 1 的值为 6 时,公式返回 true。 |
False | 当公式返回 false 时,意味着 Vault 在公式中填入变量值后,结果未能通过公式中的操作。例如,如果检查 Field 1 是否小于 10($field1.value__v < 10 ),当 Field 1 的值为 15 时,公式返回 false。 |
运算符与函数&
运算符和函数是公式中的执行者。它们可以对公式中的表达式和值执行任务,以输出结果。
“运算符”和“函数”有什么区别?
所有运算符都是函数,但并非所有函数都是运算符。运算符仅返回与输入相同的数据类型,而函数则可以返回不同的数据类型。例如,考虑运算符 Add()
和函数 Value()
。这两者都被视为数学函数。当将两个数字相加时,公式返回一个数字。Add(2, 2)
返回 4
。当使用 Value()
函数时,输入文本,公式输出数字。Value(Right(“Veeofen 20”, 2)
返回数字 20
,而不是文本字符串。
变量与引用&
可以在公式中使用变量和引用作为执行数据的占位符。当系统评估公式时,Vault 会将变量和引用替换为它们的实际执行值。每当在 Studio 中编写数据验证规则时,每次使用标识符调用数据收集条目时,都在使用变量。在 Vault 公式的上下文中,引用是指向相关对象值的变量,而不是指向对象值。例如,在使用 $site__vr.status__v
时,Vault 会将该引用替换为研究中心对象的状态值。
运算符
在构建公式时,使用以下运算符。除非另有说明,所有运算符在任何可以包含公式的地方都可用。
数学运算符
数学运算符在表达式中执行数学运算。
运算符 | 描述 |
---|---|
Add | 计算两个值的和 |
Subtract | 计算两个值的差 |
Multiply | 计算两个值的乘积 |
Divide | 计算两个值的商 |
Remainder | 计算一个值除以另一个值的余数 |
Parenthesis | 优先计算括号内的表达式 |
Add
计算两个值的和
语法
+
用途
value1 + value2
数据类型
Add 运算符接受以下数据类型:
-
数字
-
日期时间与数字(将数字解释为天数)
-
日期与数字(将数字解释为天数)
-
日期时间与时间
-
日期与间隔
-
日期时间与间隔
示例
表达式 | 说明 |
---|---|
Lesion_measurement_1 + Lesion_measurement_2 |
将两个输入的测量值相加 |
First_injection + 15 |
在首次注射日期上加 15 天,以确定第二次注射日期 |
Subtract
计算两个值的差
语法
-
用途
value1 - value2
数据类型
Subtract 运算符接受以下数据类型:
-
数字
-
日期
-
日期时间
-
日期时间与数字(将数字解释为天数)
-
日期与数字(将数字解释为天数)
-
日期与日期时间(将日期时间转换为日期)
-
日期与间隔
-
日期时间与间隔
-
时间与时间(返回分钟差)
示例
表达式 | 说明 |
---|---|
Second_injection_date - First_injection_date |
计算两次注射日期之间的天数 |
Multiply
计算两个值的乘积
语法
*
用途
value1 * value2
数据类型
Multiply 运算符接受以下数据类型:
- 数字
示例
表达式 | 说明 |
---|---|
$value__v * 2.205 |
将重量从千克转换为磅 |
Divide
计算两个值的商
语法
/
用途
value1 / value2
数据类型
Divide 运算符接受以下数据类型:
- 数字
示例
表达式 | 说明 |
---|---|
(Weight / (Height * Height)) * 703 |
计算受试者的 BMI(使用英制单位) |
Remainder
计算一个值除以另一个值的余数
语法
%
用途
value1 % value2
数据类型
Remainder 运算符接受以下数据类型:
- 数字
示例
表达式 | 说明 |
---|---|
@EventGroup.sequence__v % 2 |
如果当前事件组的序列号是偶数,返回 0;如果是奇数,返回 1 |
Parenthesis
优先计算括号内的表达式
语法
()
用途
(expression1)expression2
数据类型
Parenthesis 运算符接受以下数据类型:
示例
表达式 | 说明 |
---|---|
(Lesion_measurement_1 + Lesion_measurement_2)/2 |
返回 2 次测量的平均值 |
逻辑运算符
逻辑运算符在表达式中执行逻辑运算。
运算符 | 描述 |
---|---|
等于 | 计算两个值是否相等 |
不等于 | 计算两个值是否不相等 |
小于 | 计算一个值是否小于另一个值 |
小于等于 | 计算一个值是否小于等于另一个值 |
大于 | 计算一个值是否大于另一个值 |
大于等于 | 计算一个值是否大于等于另一个值 |
And | 计算两个值或表达式是否均为 true |
Or | 计算两个值或表达式中的至少一个是否为 true |
等于
计算两个值是否相等
语法
=
用途
value1 = value2
数据类型
等于运算符接受以下数据类型:
-
数字
-
文本
-
日期
-
日期时间
-
日期时间与日期(将日期时间转换为日期)
-
是/否
-
选项列表(两个选项列表必须都是单值选项)
-
选项列表与文本
示例
表达式 | 说明 |
---|---|
Assessment_taken = "No" |
如果针对“Assessment Taken”选择的值为“No”,则返回 true |
备注
-
当日期与日期时间进行比较时,Vault 会将日期时间转换为日期,并使用 Vault 的时区。
-
选项列表公式和运算符会评估值名称,而不是值标签。例如,一个选项列表 Level (
level__v
) 有三个值,分别命名为study_level__v
、country_level__v
和site_level__v
,标签分别为 Study、Country 和 Site。要评估选项列表的值,需使用名称定义公式,例如level__v = "country_level__v"
,而不是使用标签。
不等于
计算两个值是否不相等
语法
!=
用途
value1 != value2
数据类型
不等于运算符接受以下数据类型:
-
数字
-
文本
-
日期
-
日期时间
-
日期时间与日期(将日期时间转换为日期)
-
是/否
-
选项列表(两个选项列表必须都是单值选项)
-
选项列表与文本
示例
表达式 | 说明 |
---|---|
Assessment_date != Visit_date |
如果评估日期与访问日期不相同,则返回 true |
Severity != "Severe" |
如果选择的 Severity 值与“Severe”不同,则返回 true |
备注
-
当日期与日期时间进行比较时,Vault 会将日期时间转换为日期,并使用 Vault 的时区。
-
选项列表公式和运算符会评估值名称,而不是值标签。例如,一个选项列表 Level (level__v) 有三个值,分别命名为 study_level__v、country_level__v 和 site_level__v,标签分别为 Study、Country 和 Site。要评估选项列表的值,需使用名称定义公式,例如 level__v = “country_level__v”,而不是使用标签。
小于
计算一个值是否小于另一个值
语法
<
用途
value1 < value2
数据类型
小于运算符接受以下数据类型:
-
数字
-
日期
-
日期时间
-
日期与日期时间(将日期时间转换为日期)
示例
表达式 | 说明 |
---|---|
Informed_consent_date < Birth_date |
如果受试者的出生日期晚于知情同意日期,则返回 true |
Tumor_size_1 < Tumor_size_2 |
如果第一个肿瘤的大小小于第二个肿瘤的大小,则返回 true |
备注
-
当日期与日期时间进行比较时,Vault 会将日期时间转换为日期。
小于等于
计算一个值是否小于等于另一个值
语法
<=
用途
value1 <= value2
数据类型
小于等于运算符接受以下数据类型:
-
数字
-
日期
-
日期时间
-
日期与日期时间(将日期时间转换为日期)
示例
表达式 | 说明 |
---|---|
Informed_consent_date <= Birth_date |
如果受试者的出生日期晚于或等于知情同意日期,则返回 true |
Tumor_size_1 <= Tumor_size_2 |
如果第一个肿瘤的大小小于或等于第二个肿瘤的大小,则返回 true |
备注
-
当日期与日期时间进行比较时,Vault 会将日期时间转换为日期。
大于
计算一个值是否大于另一个值
语法
>
用途
value1 > value2
数据类型
大于运算符接受以下数据类型:
-
数字
-
日期
-
日期时间
-
日期与日期时间(将日期时间转换为日期)
示例
表达式 | 说明 |
---|---|
Tumor_size_1 > Tumor_size_2 |
如果第一个肿瘤的大小大于第二个肿瘤的大小,则返回 true |
Informed_consent_date > Birth_date |
如果受试者的出生日期早于知情同意日期,则返回 true |
备注
-
当日期与日期时间进行比较时,Vault 会将日期时间转换为日期。
大于等于
计算一个值是否大于等于另一个值
语法
>=
用途
value1 >= value2
数据类型
大于等于运算符接受以下数据类型:
-
数字
-
日期
-
日期时间
-
日期与日期时间(将日期时间转换为日期)
示例
表达式 | 说明 |
---|---|
Tumor_size_1 > Tumor_size_2 |
如果第一个肿瘤的大小大于或等于第二个肿瘤的大小,则返回 true |
Informed_consent_date > Birth_date |
如果受试者的出生日期早于或等于知情同意日期,则返回 true |
备注
-
当日期与日期时间进行比较时,Vault 会将日期时间转换为日期。
And
计算两个值或表达式是否均为 true
语法
&&
也可以使用 And()
来代替 &&
。
用途
(expression) && (expression)
数据类型
And 运算符接受以下数据类型:
示例
表达式 | 说明 |
---|---|
Adverse_Event = "Other" && IsBlank(Other_Specify) |
如果选择的不良事件是“Other”且“Other specify”为空,则返回 true |
Or
计算两个值或表达式中的至少一个是否为 true
语法
||
也可以使用 Or()
来代替 ||
。
用途
(expression) || (expression)
数据类型
Or 运算符接受以下数据类型:
示例
表达式 | 说明 |
---|---|
100 > Weight || Weight > 200 |
如果受试者体重小于 100 或大于 200,返回 true |
文本运算符
文本运算符在表达式中执行文本操作。
运算符 | 描述 |
---|---|
连接 | 连接两个或多个文本字符串 |
连接
连接两个或多个文本字符串
语法
&
也可以使用 Concat()
来代替 &
。
用途
text & text
数据类型
连接运算符接受以下数据类型:
示例
表达式 | 说明 |
---|---|
"Study: " & @Study.name__v |
返回文本字符串 "Study: ",与当前研究的名称结合 |
函数
在构建公式时,使用以下函数。除非另有说明,所有函数在任何可以包含公式的地方都可用。
数学函数
数学函数在表达式中执行数学运算。
函数 | 描述 |
---|---|
Abs | 计算数字的绝对值 |
Average | 计算提供数字的平均值 |
Ceiling | 返回大于该值的下一个整数 |
Floor | 返回小于该值的下一个整数 |
Max | 返回集合中的最大值 |
Median | 计算其参数的中位数。此函数接受数字数据类型的参数。 |
Min | 返回集合中的最小值 |
Power | 计算一个数的幂(指数) |
Round | 将值四舍五入到定义的小数位数 |
Sqrt | 返回数字的平方根 |
Sum | 计算提供数字的总和 |
Value | 将文本字符串作为数字返回 |
Abs
计算数字的绝对值
语法
Abs()
用途
Abs(number)
示例
表达式 | 说明 |
---|---|
Abs(Lesion_measurement_1 - Lesion_measurement_2) |
返回第一个病灶与第二个病灶的测量差值作为正值,无论哪个测量值更大 |
Average
计算提供数字的平均值
语法
Average()
用途
Average(number, number, number...)
示例
表达式 | 说明 |
---|---|
Average(lesion_measurement_1, lesion_measurement_2, legion_measurement_3) |
返回三次病灶测量的平均值作为数字 |
Ceiling
返回大于该值的下一个整数
语法
Ceiling()
用途
Ceiling(number)
示例
表达式 | 说明 |
---|---|
Ceiling(14.2) |
返回 15(14.2 四舍五入到最接近的整数) |
Ceiling(-14.2) |
返回 -14(-14.2 四舍五入到最接近的整数) |
Floor
返回小于该值的下一个整数
语法
Floor()
用途
Floor(number)
示例
表达式 | 说明 |
---|---|
Floor(14.2) |
返回 14(14.2 向下四舍五入到最接近的整数) |
Ceiling(-14.2) |
返回 -15(-14.2 向下四舍五入到最接近的整数) |
Max
返回集合中的最大值
语法
Max()
用途
Max(number, number...)
示例
表达式 | 说明 |
---|---|
Max(Lesion_measurement_1, Lesion_measurement_2) > 5 |
如果两个病灶测量值之间的最大值大于 5,则返回 true |
备注
- 可以将此函数与数字、日期和日期时间数据类型一起使用。不能在单个
Max()
请求中混合数据类型。如果需要混合日期和日期时间,请使用 DateValue 将日期时间转换为日期。
Median
计算其参数的中位数。此函数接受数字数据类型的参数。
语法
Median()
用途
Median(number, number...)
示例
表达式 | 说明 |
---|---|
Median(@EventGroup[*].e_visit.measurements.ig_measurements.lesion_size) |
返回治疗访视重复事件组中所有病灶大小条目的中位数值。 |
Min
返回集合中的最小值
语法
Min()
用途
Min(number, number...)
示例
表达式 | 说明 |
---|---|
Min(Lesion_measurement_1, Lesion_measurement_2) < 5 |
如果两个病灶测量值之间的最小值大于 5,则返回 true |
备注
- 可以将此函数与数字、日期和日期时间数据类型一起使用。不能在单个
Min()
请求中混合数据类型。如果需要混合日期和日期时间,请使用 DateValue 将日期时间转换为日期。
Power
计算一个数的幂(指数)
语法
Power()
用途
Power(number, number)
示例
表达式 | 说明 |
---|---|
(8.22 * Power(pulse_period, 0.3558)) > 440 |
当受试者的 QT 间期(通过 pulse_period 项计算得出)大于 440 时,返回 true |
QT / (Power(RR, 1/3)) |
Power 函数在 CDMS 中的一个常见用途是使用 Fridericia (QTcF) 公式计算 QTcF 间期值,QTcF = QT / (RR^1/3) |
Round
将值四舍五入到定义的小数位数
语法
Round()
用途
Round(number, number of decimal places)
示例
表达式 | 说明 |
---|---|
Round(5.5, 0) |
返回 6(5.5 四舍五入到 0 位小数) |
Round(5.54, 1) |
返回 5.5(5.54 四舍五入到 1 位小数) |
Round(-5.5, 0) |
返回 -6(-5.5 四舍五入到 0 位小数) |
备注
- Vault 根据小数点右侧的数字对数字进行四舍五入。如果该数字大于 5,Vault 向上四舍五入或远离零。如果该数字小于 5,Vault 向下四舍五入或朝向零。
Sqrt
返回数字的平方根
语法
Sqrt()
用途
Sqrt(number)
示例
表达式 | 说明 |
---|---|
Sqrt(25) |
返回数字 5 |
备注
- 数字必须为正。
Sum
计算提供数字的总和
语法
Sum()
用途
Sum(number, number, number...)
示例
表达式 | 说明 |
---|---|
Sum(morning_dose_amount, evening_dose_amount) |
返回早晨和晚间剂量的总和 |
Value
将文本字符串作为数字返回
语法
Value()
用途
Value(text)
示例
表达式 | 说明 |
---|---|
Value(Right("S1234", 4)) |
返回数字 1234 |
备注
- 如果在 Value 函数中输入的文本无法解析为数字,则会收到错误提示。
逻辑函数
逻辑函数在表达式中执行逻辑运算。
函数 | 描述 |
---|---|
And | 当所有表达式都为真时,返回 true |
Case | 将表达式的值与每个情况值进行比较,并返回对应的结果。如果没有值匹配,则返回最后一个参数。 |
If | 确定表达式是 true 还是 false。如果为 true,则返回给定的值;如果为 false,则返回另一个值。 |
Includes | 当选项列表包含与定义字符串或单值选项列表匹配的名称时,返回 true |
IsBlank | 如果值为空,返回 true |
IsNumber | 当值为数字时,返回 true |
Not | 当表达式为假时,返回 true;当表达式为真时,返回 false |
Or | 如果任意条件为真,则返回 true |
And
当所有表达式都为真时,返回 true
语法
And()
也可以使用 &&
来代替 And()
。
用途
And(expression, expression)
示例
表达式 | 说明 |
---|---|
And(Adverse_Event = "Other", IsBlank(Other_Specify)) |
如果选择的不良事件是“Other”且“Other specify”字段为空,则返回 true |
Case
将表达式的值与每个情况值进行比较,并返回对应的结果。如果没有值匹配,则返回最后一个参数。
语法
Case()
用途
Case(expression1, value1, result1, value2, result2, else_result)
数据类型
Case 函数接受以下数据类型:
-
数字
-
文本
-
是/否
-
选项列表
示例
表达式 | 说明 |
---|---|
Case(Severity, "MILD", "No need to check", "MODERATE", "Random checks needed", "SEVERE", "Check mandatory", "No answer") |
根据输入的严重程度,返回是否需要进行强制检查 |
备注
- 在处理选项列表字段时,例如 picklist__c,字段返回值的名称(study__v),而不是值的标签(Study)。
If
确定表达式是 true 还是 false。如果为 true,则返回给定的值;如果为 false,则返回另一个值。
语法
If()
用途
If(expression1, value1, value2)
示例
表达式 | 说明 |
---|---|
If(Diabetes = "Type 2", Measurement_1 * 2, Measurement_2 *2) |
如果糖尿病类型选择为“Type 2”,则返回测量值 1 乘以 2,否则返回测量值 2 乘以 2 |
Includes
当选项列表包含与定义字符串或单值选项列表匹配的名称时,返回 true
语法
Includes()
用途
Includes(string/picklist value)
示例
表达式 | 说明 |
---|---|
Includes(cl_colors, 'RED') |
如果“Colors”字段中选择的值之一是 Red,则返回 true |
备注
- Vault Platform 支持多值选项列表。对于 CDMS,使用 FindValue() 函数查找从选项列表中选定的值。
IsBlank
如果值为空,返回 true
语法
IsBlank()
用途
IsBlank(expression)
示例
表达式 | 说明 |
---|---|
IsBlank(Assessment_taken) && IsBlank(Assessment_date) |
如果“Assessment Taken”和“Assessment Date”都没有输入值,则返回 true |
IsNumber
当值为数字时,返回 true
语法
IsNumber()
用途
IsNumber(text)
示例
表达式 | 说明 |
---|---|
If(IsNumber(Measurement_1), Measurement_1/100, 0) |
如果测量值 1 是数字,则返回测量值 1 除以 100 |
Not
当表达式为假时,返回 true;当表达式为真时,返回 false
语法
Not()
用途
Not(expression)
示例
表达式 | 说明 |
---|---|
Not(IsBlank(Assessment_date)) |
如果评估日期不为空,返回 true |
Or
如果任意条件为真,则返回 true
语法
Or()
用途
Or(expression, expression)
示例
表达式 | 说明 |
---|---|
Or(100 > Weight, Weight > 200) |
如果受试者体重小于 100 或大于 200,返回 true |
文本函数
逻辑函数在表达式中执行逻辑运算。
函数 | 描述 |
---|---|
Concat | 连接两个或多个文本字符串 |
Find | 返回字符串在文本字符串中的位置 |
Left | 返回从文本字符串开头算起的指定数量字符 |
长度 | 返回指定文本字符串的字符数 |
Lower | 将指定字符串中的所有字母转换为小写 |
Middle | 返回两个指定位置之间的指定数量文本字符 |
Right | 返回从文本字符串末尾算起的指定数量文本字符 |
Substitute | 将字符串中的旧文本替换为新文本 |
Text | 根据指定格式将值转换为文本 |
Trim | 删除文本字符串开头和结尾的空格和制表符 |
Upper | 将指定字符串中的所有字母转换为大写 |
Concat
连接两个或多个文本字符串
语法
Concat()
也可以使用 &
来代替 Concat()
。
用途
Concat(text, text...)
示例
表达式 | 说明 |
---|---|
Concat("Study: ", @Study.name__v) |
返回文本字符串 "Study: ",与当前研究的名称结合 |
Find
返回字符串在文本字符串中的位置
语法
Find()
用途
Find(find_text, within_text)
示例
表达式 | 说明 |
---|---|
Find(" ", "4280 Hacienda Dr, Pleasanton, CA") |
返回 5,这是地址中的第一个空格的位置 |
Left
返回从文本字符串开头算起的指定数量字符
语法
Left()
用途
Left(text, number)
示例
表达式 | 说明 |
---|---|
Left(name__v, 5) & "-" & abbvreviation__v |
返回产品名称的前 5 个字符,并与其缩写组合 |
长度
返回指定文本字符串的字符数
语法
Length()
用途
Length(text)
Lower
将指定字符串中的所有字母转换为小写
语法
Lower()
用途
Lower(text)
示例
表达式 | 说明 |
---|---|
Lower("Company A") |
返回文本字符串“company a” |
Middle
返回两个指定位置之间的指定数量文本字符
语法
Middle()
用途
Middle(text, start_position, count)
示例
表达式 | 说明 |
---|---|
Middle("4280 Hacienda Dr, Pleasanton, CA", 6, 13) |
返回文本字符串“Hacienda”,其为所提供文本的第 6 个到第 13 个字符 |
Right
返回从文本字符串末尾算起的指定数量文本字符
语法
Right()
用途
Right(text, number)
示例
表达式 | 说明 |
---|---|
Value(Right("S1234", 4)) |
返回数字 1234 |
Substitute
将字符串中的旧文本替换为新文本
语法
Substitute()
用途
Substitute(text, old_text, new_text)
示例
表达式 | 说明 |
---|---|
Substitute(ConMed_date, "UN", "15") |
将未知日期中的“UN”部分替换为“15” |
Text
根据指定格式将值转换为文本
语法
Text()
用途
Text(value, "format")
示例
表达式 | 说明 |
---|---|
"The minimum Screening Date is " & Text(MinDate(Screening_Date), "yyyy-mm-dd") |
返回文本“The minimum Screening Date is ”,后跟以 yyyy-mm-dd 格式显示的筛查日期 |
备注
-
d 1(某月中的第几日,1 位数)
-
dd 01(某月中的第几日,2 位数)
-
ddd Thu(星期几,3 个字母缩写)
-
dddd Thursday(星期几,全拼)
-
mm 03(月份,2 位数)
-
mmm Mar(月份,3 个字母缩写)
-
mmmm March(月份,全拼)
-
yy 17(年份,2 位数)
-
yyyy 2017(年份,4 位数)
-
dd-mm-yyyy 31-03-2017
-
yyyymmdd 20170331
-
dd.mmm.yyyy 30.Mar.2017
-
yyyy-mm-dd 2017-03-30
-
mmmm yyyy March 2017
-
dddd dd/mm/yy Thursday 31/03/17
Trim
删除文本字符串开头和结尾的空格和制表符
语法
Trim()
用途
Trim(text)
示例
表达式 | 说明 |
---|---|
Trim(" Phase III ") |
返回文本字符串“Phase III”,并删除了字符串前后的空格 |
Upper
将指定字符串中的所有字母转换为大写
语法
Upper()
用途
Upper(text)
示例
表达式 | 说明 |
---|---|
Upper("Company A") |
返回文本字符串“COMPANY A” |
聚合函数
聚合函数在表达式中对聚合标识符的值进行操作。其中一些聚合函数也可用于任何标识符类型,但在此列出是为了提供聚合标识符可用的完整函数列表。
函数 | 描述 |
---|---|
AllEqual | 检查所有聚合标识符的值是否相等。如果值相等,则返回 true,否则返回 false。 |
Average | 返回聚合标识符的所有值的平均值。 |
Count | 返回聚合标识符实例的数量(例如,指定重复表单的实例数量)。 |
CountIf | 返回指定值在所有指定标识符中的出现次数。 |
FindValue | 检查表达式中的标识符值中是否至少存在一个给定值。 |
First | 返回聚合标识符的第一个值(按最低序列号排序)。 |
GetAllMatches | 返回第三个参数中的数组,这些数组的值与第二个参数中与第一个参数匹配的实例中的值相匹配。传递的两个标识符必须具有相同的值数量,因此必须使用相同的聚合路径。 |
HasDuplicates | 如果任何 2 个或更多数组的所有标识符值相等,则返回 true。如果重复项是 null 或为空值,则不返回 true。默认情况下忽略空值或 null 值。 |
IsBlank | 如果数组为空,则返回 true。如果数组中至少有一个值,即使该值为 null,也返回 false。 |
IsAnyBlank | 检查标识符中的任何值是否为空。如果有任何空值,返回 true。 |
Last | 返回聚合标识符的最后一个值(按最高序列号排序)。 |
Max | 返回聚合标识符中值的最大值(最高、最大)。 |
Median | 计算其参数的中位数。此函数接受数字数据类型的参数。 |
Min | 返回聚合标识符中值的最小值(最低、最小)。 |
NoBlanks | 返回删除所有 null 值后的值数组,保留传递值的原始顺序。 |
Sum | 返回聚合标识符值的总和。 |
AllEqual
检查所有聚合标识符的值是否相等。如果值相等,则返回 true,否则返回 false。
语法
AllEqual()
用途
AllEqual(Identifier, Identifier, ...)
示例
表达式 | 说明 |
---|---|
AllEqual(@EventGroup[*].e_visit.measurements.ig_measurements.lesion_size) |
如果治疗访视重复事件组中的所有实例的病灶大小相等,则返回 true。 |
Average
返回聚合标识符的所有值的平均值。
语法
Average()
用途
Average(Identifier), Average(Identifier, Identifier)
示例
表达式 | 说明 |
---|---|
Average($Visit1.Visit1.Measurements[*].Lesion.LesionSize) |
返回重复测量表单中所有病灶大小条目的平均值。 |
Count
返回聚合标识符实例的数量(例如,指定重复表单的实例数量)。
语法
Count()
用途
Count(Identifier, Identifier, ...)
示例
表达式 | 说明 |
---|---|
Count($eg_common.e_common.adverse_event[*].AE.AETERM) |
返回病例手册中重复不良事件表单的 AETERM 条目的实例数量。 |
备注
- 此函数包括空(或 null)值。如果某条目为空或标记为特意留空,它也会包含在计数中。使用
NoBlanks
函数移除所有 null 值。
CountIf
返回指定值在所有指定标识符中的出现次数。
语法
CountIf()
用途
CountIf(Value, Identifier, Identifier)
示例
表达式 | 说明 |
---|---|
CountIf("Y", $eg_common.e_common.adverse_event[*].ig_ae.AESER) |
返回病例手册中所有不良事件表单中 Is the Adverse Event serious 条目设置为“是”(“Y”)的次数。 |
FindValue
检查表达式中的标识符值中是否至少存在一个给定值。
语法
FindValue()
用途
FindValue(value, identifier)
示例
表达式 | 说明 |
---|---|
FindValue("SERIOUS", $Logs.Logs.Adverse_event[*].AE_Details.AESER) |
如果在不良事件表单的任何实例中的 AE Seriousness 条目内找到值“SERIOUS”,则返回 |
First
返回聚合标识符的第一个值(按最低序列号排序)。
语法
First()
用途
First(Identifier)
示例
表达式 | 说明 |
---|---|
First($Visit1.Visit1.Measurements.Lesion[*].LesionSize) > Last($Visit1.Visit1.Measurements.Lesion[*].LesionSize) |
比较第 1 次访视中重复条目组病灶中的第一个病灶大小输入与最后一个病灶大小。 |
GetAllMatches
返回第三个参数中的数组,这些数组的值与第二个参数中与第一个参数匹配的实例中的值相匹配。传递的两个标识符必须具有相同的值数量,因此必须使用相同的聚合路径。
语法
GetAllMatches()
用途
GetAllMatches(Value, Identifier, Identifier)
示例
表达式 | 说明 |
---|---|
GetAllMatches(10, @Form.measurement[*].lesion_size, @Form.measurement[*].date |
返回测量条目组中病灶大小为 10 的所有实例的日期条目值。 |
备注
- 聚合路径:
- 如果第一个标识符是
$EG[*].EV.F.IG.IT
,则第二个标识符应以$EG[*]
开头。 - 如果第一个标识符是
$EG.EV.F[*].IG.IT
,则第二个标识符应以$EG.EV.F[*]
开头。 - 如果第一个标识符是
$EG.EV.F.IG[*].IT
,则第二个标识符应以$EG.EV.F.IG[*]
开头。 - 如果第一个标识符是
$EG[*].EV.F[*].IG[*].IT
,则第二个标识符应以$EG[*].EV.F[*].IG[*]
开头。 - 如果第一个标识符是
$EG[*].EV.F[*].IG.IT
,则第二个标识符应以$EG[*].EV.F[*]
开头。 - 如果第一个标识符是
$EG[*].EV.F.IG[*].IT
,则第二个标识符应以$EG[*].EV.F.IG[*]
开头。 - 如果第一个标识符是
$EG.EV.F[*].IG[*].IT
,则第二个标识符应以$EG.EV.F[*].IG[*]
开头。
- 如果第一个标识符是
HasDuplicates
如果任何 2 个或更多数组的所有标识符值相等,则返回 true。如果重复项是 null 或为空值,则不返回 true。默认情况下忽略空值或 null 值。
语法
HasDuplicates()
用途
HasDuplicates(Identifier1, Identifier2, Identifier3)
示例
表达式 | 说明 |
---|---|
HasDuplicates($EG.EV.AE[*].AEIG.AEITEM) |
如果不良事件条目的值在所有不良事件表单中相等,则返回 true。 |
HasDuplicates($EG.EV.AE[*].AEIG.AEITEM, $EG.EV.AE[*].AEIG.AESTARTDATE) |
如果不良事件条目和不良事件开始日期的值在所有不良事件表单中相等,则返回 true。 |
HasDuplicates($EG.EV.AE[*].AEIG.AEITEM, $EG.EV.AE[*].AEIG.AESTARTDATE, $EG.EV.AE[*].AEIG.AEENDDATE, $EG.EV.AE[*].AEIG.SERIOUS) |
如果不良事件条目、不良事件开始日期、不良事件结束日期的值相等且该事件在不良事件表单中为 Serious,则返回 true。 |
IsBlank
如果数组为空,则返回 true。如果数组中至少有一个值,即使该值为 null,也返回 false。
语法
IsAnyBlank()
用途
IsBlank(expression)
示例
表达式 | 说明 |
---|---|
IsBlank(@Form.ig_physexam[*].specify_abnormalities) |
如果 Specify Abnormalities 条目在所有体检重复条目组的实例中为空,则返回 true。 |
IsAnyBlank
检查标识符中的任何值是否为空。如果有任何空值,返回 true。
语法
IsAnyBlank()
用途
IsAnyBlank(Identifier, Identifier, ...)
示例
表达式 | 说明 |
---|---|
IsAnyBlank(@Form.ig_phsexam[*].specify_abnormalities) |
如果 Specify Abnormalities 条目的任何实例在所有体检重复条目组的实例中为空,则返回 true。 |
Last
返回聚合标识符的最后一个值(按最高序列号排序)。
语法
Last()
用途
Last(Identifier)
示例
表达式 | 说明 |
---|---|
Last($Visit1.Visit1.Measurements.Lesion[*].DATE) > First($Visit1.Visit1.Measurements.Lesion[*].DATE) |
比较第 1 次访视中重复条目组病灶的最后一个病灶大小输入与第 1 次访视的第一个病灶大小。 |
Max
返回聚合标识符中值的最大值(最高、最大)。
语法
Max()
用途
Max(Identifier), Max(Identifier, Identifier)
示例
表达式 | 说明 |
---|---|
Max($Visit1.Visit1.Measurements[*].Lesion.LesionSize) $Screening.Screening.InitialMeasurement.Lesion.InitialLesionSize) |
返回初次测量表单和所有测量表单实例中病灶大小条目的最大值。 |
Median
计算其参数的中位数。此函数接受数字数据类型的参数。
语法
Median()
用途
Median(number, number...)
示例
表达式 | 说明 |
---|---|
Median(@EventGroup[*].e_visit.measurements.ig_measurements.lesion_size) |
返回治疗访视重复事件组中所有病灶大小条目的中位数值。 |
Min
返回聚合标识符中值的最小值(最低、最小)。
语法
Min()
用途
Min(Identifier), Min(Identifier, Identifier)
示例
表达式 | 说明 |
---|---|
Min($Visit1.Visit1.Measurements[*].Lesion.LesionSize, $Screening.Screening.InitialMeasurement.Lesion.InitialLesionSize) |
返回初次测量表单和所有测量表单实例中病灶大小条目的最小值。 |
NoBlanks
返回删除所有 null 值后的值数组,保留传递值的原始顺序。
语法
NoBlanks()
用途
NoBlanks(Identifier, Identifier, ....)
示例
表达式 | 说明 |
---|---|
NoBlanks(@Form.ig_physexam[*].specify_abnormalities) |
返回所有体检重复条目组的实例中 Specify Abnormalities 条目的非空值。 |
Sum
返回聚合标识符值的总和。
语法
Sum()
用途
Sum(Identifier)
示例
表达式 | 说明 |
---|---|
Sum($Screening.Screening.Measurements[*].Lesion.LesionSize) |
返回重复测量表单所有实例中所有病灶大小条目的总和。 |
日期和日期时间函数&
日期和日期时间函数在表达式中执行日期和日期时间的计算。
函数 | 描述 |
---|---|
日期 | 从年、月、日值返回日期值 |
DateValue | 返回日期时间的日期部分 |
Day | 返回某月中的第几日 |
Days | 以时间间隔的形式返回指定的天数 |
Hour | 返回当前小时,范围为 0 到 23 |
Hours | 以时间间隔的形式返回指定的小时数 |
Minute | 返回当前分钟,范围为 0 到 59 |
Minutes | 以时间间隔的形式返回指定的分钟数 |
Month | 返回日期中的月份 |
Months | 以时间间隔的形式返回指定的月数 |
NetWorkdays | 返回两(2)个日期/日期时间之间的工作日天数。该函数支持混合使用日期和日期时间。使用日期时间时,请注意时区。此函数还接受用于周末和节假日时间表的可选参数。管理员可以通过业务管理 > 节假日时间表(Business Admin > Holiday Schedules)配置节假日。 |
Now | 返回当前日期和时间 |
Second | 返回当前秒数,范围为 0 到 59 |
StartOfDay | 返回在指定时区当天开始的 UTC 日期时间 |
Time | 根据指定的小时、分钟和秒数返回时间 |
Today | 返回用户的当前日期。可以使用可选参数“timezone”返回特定时区的当前日期。 |
Weekday | 根据日期或日期时间返回星期几,结果为 1 到 7 的数字 |
Workday | 返回一个日期,该日期是排除周末和可选节假日后的未来几天。此函数还接受用于周末和节假日时间表的可选参数。管理员可以通过业务管理 > 节假日时间表(Business Admin > Holiday Schedules)配置节假日。 |
Year | 返回指定日期或日期时间的年份。如果未提供日期或日期时间,则返回当前年份。 |
Years | 以时间间隔的形式返回指定的年数 |
MaxDate | 将日期的未知部分替换为可能的最大值 |
MinDate | 将日期的未知部分替换为可能的最小值 |
MaxDateTime | 将日期时间的未知部分替换为可能的最大值 |
MinDateTime | 将日期时间的未知部分替换为可能的最小值 |
InWindow | 如果日期在指定的时间窗内(基于参考日期),则返回 true |
SiteDateTime | 根据研究中心时区,自动从日期条目和时间条目创建日期时间 |
SiteDateValue | 返回日期时间条目中的日期,并自动转换为研究中心时区 |
日期
从年、月、日值返回日期值
语法
Date()
用途
Date(year, month, day)
示例
表达式 | 说明 |
---|---|
Date(2018, 3, 14) |
返回日期 2018-03-14 |
Date(year(today), month(today())+1, day(today())) |
返回距离当前日期一个月的日期 |
Date(year(today()), month(today()), day(today())) + Time(12,0,0) |
返回今天中午的日期和时间 |
DateValue
返回日期时间的日期部分
语法
DateValue()
用途
DateValue(datetime)
示例
表达式 | 说明 |
---|---|
DateValue(Vitals_exam_date) |
返回生命体征检查的日期部分,不包括时间,同时适应 Vault 的时区转换 |
If(Right(VSDTC , 4) = "UNKZ", DateValue(MinDateTime(VSDTC), UTC), DateValue(MinDateTime(VSDTC), @Site.timezone__v)) |
此示例显示了使用 SiteDateValue() 的表达式,用于不允许未知的日期时间条目 |
Day
返回某月中的第几日
语法
Day()
用途
Day(date)
示例
表达式 | 说明 |
---|---|
Day(Injection_date) |
返回注射日期月份中的第几日 |
Days
以时间间隔的形式返回指定的天数
语法
Days()
用途
Days(number)
示例
表达式 | 说明 |
---|---|
Injection_date + Days(10) |
返回注射日期后 10 天的日期 |
Hour
返回当前小时,范围为 0 到 23
语法
Hour()
用途
Hour()
示例
表达式 | 说明 |
---|---|
Hour() |
返回用户的当前小时 |
Hours
以时间间隔的形式返回指定的小时数
语法
Hours()
用途
Hours(number)
示例
表达式 | 说明 |
---|---|
InWindow(Vitals_time, Injection_time, Hours(2), Hours(5), false, false) |
如果生命体征收集时间在注射时间后的 2 到 5 小时之间,则返回 true |
备注
-
在当前版本中,此函数仅可用于定义 InWindow() 函数中的时间间隔。
-
此函数不返回日期时间或时间条目中的小时数。
-
不要使用此函数与小数点配合使用。相反,使用
Minutes()
函数与等效的分钟数,例如Minutes(30)
代替Hours(0.5)
。
Minute
返回当前分钟,范围为 0 到 59
语法
Minute()
用途
Minute()
示例
表达式 | 说明 |
---|---|
Minute() |
返回用户的当前分钟 |
Minutes
以时间间隔的形式返回指定的分钟数
语法
Minutes()
用途
Minutes(number)
示例
表达式 | 说明 |
---|---|
InWindow(Vitals_time, Injection_time, Minutes(30), Minutes(45), false, false) |
如果生命体征收集时间在注射时间后的 30 到 45 分钟之间,则返回 true |
备注
- 在当前版本中,此函数仅可用于定义 InWindow() 函数中的时间间隔。
Month
返回日期中的月份
语法
Month()
用途
Month(date), Month(datetime)
示例
表达式 | 说明 |
---|---|
Month(Injection_date) |
返回注射日期所在的月份,结果为数字 |
Months
以时间间隔的形式返回指定的月数
语法
Months()
用途
Months(number)
示例
表达式 | 说明 |
---|---|
Injection_date + Months(2) |
返回审计开始日期后 6 个月的日期 |
NetWorkdays
返回两(2)个日期/日期时间之间的工作日天数。该函数支持混合使用日期和日期时间。使用日期时间时,请注意时区。此函数还接受用于周末和节假日时间表的可选参数。管理员可以通过业务管理 > 节假日时间表(Business Admin > Holiday Schedules)配置节假日。
语法
NetWorkdays()
用途
NetWorkdays(start_date/datetime, number_of_days, weekend_number, holiday_schedule)
示例
表达式 | 说明 |
---|---|
NetWorkdays($screening.screening_visit.event_date__v, $baseline.baseline_visit.event_date__v,1, "United States") |
返回基于美国节假日的筛查访视日期( |
Now
返回当前日期和时间
语法
Now()
用途
Now(), Now(Timezone)
示例
表达式 | 说明 |
---|---|
Round((Now() - Birth_Date)/365, 0) |
返回当前日期的受试者年龄 |
备注
-
Now() 不带
时区
参数时返回当前的 UTC 日期时间。 -
使用
时区
参数可以指定返回当前日期时间的时区。请参阅输入格式列表。 -
要返回研究中心时区的当前日期,可以使用
DateValue(Now(), @Site.timezone__v)
。
Second
返回当前秒数,范围为 0 到 59
语法
Second()
用途
Second()
示例
表达式 | 说明 |
---|---|
Second() |
返回用户的当前秒数 |
StartOfDay
返回在指定时区当天开始的 UTC 日期时间
语法
StartOfDay()
用途
StartOfDay(day, "Timezone")
示例
表达式 | 说明 |
---|---|
StartOfDay(event_date, "Europe/Oslo") |
返回事件日期在欧洲/奥斯陆时区的当天开始时的 UTC 日期时间 |
Time
根据指定的小时、分钟和秒数返回时间
语法
Time()
用途
Time(hour, minute, second)
示例
表达式 | 说明 |
---|---|
Time(hour(now()), minute(now()), second(now()) - Time(12,30,0) |
返回两个时间之间的分钟差 |
Date(year(today()), month(today()), day(today())) + Time(12,0,0) |
返回代表今天中午的日期时间 |
Today
返回用户的当前日期。可以使用可选参数“timezone”返回特定时区的当前日期。
语法
Today()
用途
Today(), Today("timezone")
示例
表达式 | 说明 |
---|---|
Today() = Sample_collection_date |
如果样本采集日期等于用户时区的当前日期,返回 true |
Weekday
根据日期或日期时间返回星期几,结果为 1 到 7 的数字
语法
Weekday()
用途
Weekday(date), Weekday(datetime)
示例
表达式 | 说明 |
---|---|
If((Weekday(@Event.event_date__v) = 1) || (Weekday(@Event.event_date__v) = 7)), “Weekend Event Date”, “Not a weekend event date”) |
Workday
返回一个日期,该日期是排除周末和可选节假日后的未来几天。此函数还接受用于周末和节假日时间表的可选参数。管理员可以通过业务管理 > 节假日时间表(Business Admin > Holiday Schedules)配置节假日。
语法
Workday()
用途
Workday(start_date/datetime, number_of_days, weekend_number, holiday_schedule)
示例
表达式 | 说明 |
---|---|
Workday($Screening, Screening_visit.event_date__v,1,"United States") |
返回筛查访视日期后未来 10 个工作日(无周末和美国节假日)的日期。 |
Year
返回指定日期或日期时间的年份。如果未提供日期或日期时间,则返回当前年份。
语法
Year()
用途
Year(date)
示例
表达式 | 说明 |
---|---|
Year($Screening.Screening_Visit.Demographics.Creation_Criteria.DOB) |
从出生日期条目中返回年份。 |
Years
以时间间隔的形式返回指定的年数
语法
Years()
用途
Years(number)
示例
表达式 | 说明 |
---|---|
Today() + Years(1) |
返回明年同一天的日期 |
MaxDate
将日期的未知部分替换为可能的最大值
语法
MaxDate()
用途
MaxDate(unknown date), MaxDate(unknown date, timezone)
示例
表达式 | 说明 |
---|---|
MaxDate(2018-07-UN) |
返回 2018-07-31 |
MaxDate(2018-UN-UN) |
返回 2018-12-31 |
备注
-
使用 MaxDate() 包装带有未知部分的日期用于表达式。
-
对不带未知部分的日期使用 MaxDate(),只返回原始日期。
-
使用时区参数可以指定返回当前日期的时区。请参阅输入格式列表。
MinDate
将日期的未知部分替换为可能的最小值
语法
MinDate()
用途
MinDate(unknown date), , MinDate(unknown date, timezone)
示例
表达式 | 说明 |
---|---|
MinDate(2018-07-UN) |
返回 2018-07-01 |
MinDate(2018-UN-UN) |
返回 2018-01-01 |
备注
-
使用 MinDate() 包装带有未知部分的日期用于表达式。
-
对不带未知部分的日期使用 MinDate(),只返回原始日期。
-
使用时区参数可以指定返回当前日期的时区。请参阅输入格式列表。
MaxDateTime
将日期时间的未知部分替换为可能的最大值
语法
MaxDateTime()
用途
MaxDateTime(unknown date), MaxDateTime(unknown date, timezone)
示例
表达式 | 说明 |
---|---|
MaxDateTime(2018-07-UNT14:00) |
返回 2018-07-31T14:00 |
MaxDateTime(2018-12-UNTUN:UN) |
返回 2018-12-31T23:59 |
备注
-
对不带未知部分的日期时间使用
MaxDateTime()
,只返回原始日期时间。 -
对于未知时间,Vault 返回小时数 23,分钟数 59,即 23:59。
-
MaxDateTime()
不应单独用作设置某个条目值的函数,因为转换为 UTC 时间以获取标准化值会影响此函数。相反,应该使用此函数来执行需要已知日期时间进行评估的计算和比较。 -
使用时区参数可以指定返回当前日期时间的时区。请参阅输入格式列表。
MinDateTime
将日期时间的未知部分替换为可能的最小值
语法
MinDateTime()
用途
MinDateTime(unknown date), MinDateTime(unknown date, timezone)
示例
表达式 | 说明 |
---|---|
MinDateTime(2018-07-UNT14:00) |
返回 2018-07-01T14:00 |
MinDateTime(2018-12-UNTUN:UN) |
返回 2018-12-01T00:00 |
备注
-
对不带未知部分的日期时间使用
MinDateTime()
,只返回原始日期时间。 -
对于未知时间,Vault 返回小时数 00,分钟数 00,即 00:00。
-
MinDateTime()
不应单独用作设置某个条目值的函数,因为转换为 UTC 时间以获取标准化值会影响此函数。相反,应该使用此函数来执行需要已知日期时间进行评估的计算和比较。 -
使用时区参数可以指定返回当前日期时间的时区。请参阅输入格式列表。
InWindow
如果日期在指定的时间窗内(基于参考日期),则返回 true
语法
InWindow()
用途
InWindow(date, date, interval, interval, boolean, boolean)
数据类型
InWindow 函数接受以下数据类型:
-
日期
-
日期时间
-
时间
示例
表达式 | 说明 |
---|---|
InWindow(TestTime, ProcedureTime, Hours(1), Hours(3), false, false) |
如果测试时间在程序时间后的 1 到 3 小时之间,则返回 true |
InWindow(ControlDate, TestDate, Days(3), Days(7), true, false) |
如果控制日期在测试日期后的 4 到 7 天之间,则返回 true |
备注
-
只能比较相同数据类型的对象(日期与日期比较,日期时间与日期时间比较,时间与时间比较)。
-
时间间隔可以使用以下函数定义:Minutes()、Hours()、Days()、Months()、Years()。
-
两个布尔参数用于指示是否包含整体时间窗的下限(第一个参数)和上限(第二个参数)。true 表示排除边界时间,false 表示包含边界时间。
SiteDateTime
根据研究中心时区,自动从日期条目和时间条目创建日期时间
语法
SiteDateTime()
用途
SiteDateTime(date, time)
数据类型
SiteDateTime 函数接受以下数据类型:
-
日期
-
时间
示例
表达式 | 说明 |
---|---|
SiteDateTime(VSDate, VSTime) |
返回生命体征的日期和时间。 |
SiteDateValue
返回日期时间条目中的日期,并自动转换为研究中心时区
语法
SiteDateValue()
用途
SiteDateValue(datetime)
数据类型
SiteDateValue 函数接受以下数据类型:
- 日期时间
示例
表达式 | 说明 |
---|---|
SiteDateValue(2021, 6, 15, Injection_time) |
返回 2021 年 6 月 15 日在研究中心时区的注射时间 |
备注
- 当日期部分未知时,MinDateTime 和 MaxDateTime 不支持此函数。
弃用函数
以下函数在新表达式语法中不再可用。
连接
连接两个或多个文本字符串。此函数仅适用于使用 Expression Engine V1 的研究。请参阅使用 V2 时的替代函数。
语法
Concatenate(text, text)
替代函数
Concat()&
DateAdd
返回一个日期,该日期基于从起始日期(date)的偏移(interval)。此函数仅适用于使用 Expression Engine V1 的研究。请参阅使用 V2 时的替代函数。
语法
DateAdd(date, interval)
替代函数
date + number and date + interval
DateDiff
返回两个日期之间的天数差。此函数仅适用于使用 Expression Engine V1 的研究。请参阅使用 V2 时的替代函数。
语法
DateDiff(end, start)
替代函数
date - date
DateTimeAdd
返回一个日期时间值,该日期时间基于从起始日期时间(datetime)的偏移(interval)。此函数仅适用于使用 Expression Engine V1 的研究。请参阅使用 V2 时的替代函数。
语法
DateTimeAdd(datetime, interval)
替代函数
dateTime + number and dateTime + interval
DateTimeDiff
返回两个日期时间值之间的天数、小时数和分钟数差。此函数仅适用于使用 Expression Engine V1 的研究。请参阅使用 V2 时的替代函数。
语法
DateTimeDiff(end, start)
替代函数
dateTime - dateTime
IfBlank
如果第一个参数为空,则返回第二个参数。如果不为空,则返回第一个参数。此函数仅适用于使用 Expression Engine V1 的研究。请参阅使用 V2 时的替代函数。
语法
IfBlank(expression, expression)
替代函数
If(IsBlank())
IfNull
如果第一个参数为 null,则返回第二个参数。如果不为 null,则返回第一个参数。此函数仅适用于使用 Expression Engine V1 的研究。请参阅使用 V2 时的替代函数。
语法
IfNull(expression, expression)
替代函数
If(IsBlank())
IsNull
当值为 null 时,返回 true。此函数仅适用于使用 Expression Engine V1 的研究。请参阅使用 V2 时的替代函数。
语法
IsNull(expression, expression)
替代函数
If(IsBlank())
NumberEquals
如果两个数字参数相等,则返回 true。此函数仅适用于使用 Expression Engine V1 的研究。请参阅使用 V2 时的替代函数。
语法
NumberEquals(number, number)
替代函数
=
PicklistEquals
将选项列表值的基础标签与现有全局选项列表值的基础标签进行比较,并返回 true 或 false。此函数仅适用于使用 Expression Engine V1 的研究。请参阅使用 V2 时的替代函数。
语法
PicklistEquals(<picklist_field>, picklist_value__v)
替代函数
=
TextEquals
如果两个文本字符串相等,则返回 true。此函数仅适用于使用 Expression Engine V1 的研究。请参阅使用 V2 时的替代函数。
语法
TextEquals(text, text)
替代函数
=
TimeDiff
返回两个时间之间的分钟差。此函数将结束时间(end)与起始时间(start)相减。此函数仅适用于使用 Expression Engine V1 的研究。请参阅使用 V2 时的替代函数。
语法
TimeDiff(end, start)
替代函数
Time - Time
日期格式
可用的日期格式列于下表:
格式 | 示例 | 说明 |
---|---|---|
HH:ii | 11:30 | 小时和分钟 |
d | 1 | 某月中的第几日,1 位数 |
dd | 1 | 某月中的第几日,2 位数 |
ddd | Thu | 星期几,3 个字母缩写 |
dddd | Thursday | 星期几,全拼 |
mm | 3 | 月份,2 位数 |
mmm | Mar | 月份,3 个字母缩写 |
mmmm | March | 月份,全拼 |
yy | 17 | 年份,2 位数 |
yyyy | 2017 | 年份,4 位数 |
dd-mm-yyyy | 31-03-2017 | 第几日(2 位数),月份(2 位数),年份(4 位数) |
yyyymmdd | 20170331 | 年份(4 位数),月份(2 位数),第几日(2 位数),无空格 |
dd.mm.yyyy | 30.03.2017 | 第几日(2 位数),月份(2 位数),年份(4 位数),以句点(.)分隔 |
yyyy-mm-dd | 2017-03-30 | 年份(4 位数),月份(2 位数),第几日(2 位数) |
mmmm yy | March 2017 | 月份(全拼),年份(4 位数) |
dddd dd/mm/yy | Thursday 31/03/2017 | 星期几(全拼),第几日(2 位数),月份(2 位数),年份(4 位数),以斜杠(/)分隔 |
数字格式
可用的数字格式列于下表:
格式 | 示例输入 | 示例输出 | 说明 |
---|---|---|---|
0 | 10.1 | 10 | 数字,不带小数 |
# | 10.10 | 10 | 数字,不带小数,省略零 |
0.00 | 10.2531 | 10.25 | 数字,保留两位小数 |
#.## | 10.2501 | 10.25 | 数字,保留两位小数,省略零 |
$# | 100 | $100 | 数字,以货币形式显示 |
#,### | 1104 | 1,104 | 数字,从左边起每 3 位用逗号分隔(可多次使用逗号) |
- | 10 | -10 | 给表达式添加负号 |
% | 9 | %90 | 数字乘以 10 并显示为百分比 |
E | 12345 | 1.234E4 | 将尾数(即有效数字的数量)与指数分离,并使用科学记数法表示 |
系统变量
系统变量是系统定义用于存储值的动态对象,供一个或多个 Vault 应用程序引用。它们是动态的,因为它们的值会根据使用上下文变化。例如,@User
是一个系统变量,指向当前登录用户的配置文件,并允许访问多个属性,如用户的状态或电子邮件。
Vault Platform 系统变量
在当前版本中,Vault EDC 支持一个 Vault Platform 系统变量 @User。在编写规则时,可以引用此变量。
变量 | 描述 |
---|---|
@User | 引用当前登录的用户 |
@User
引用当前登录的用户
示例属性
-
@User.name__v
:返回当前用户的姓名 -
@User.status__v
:返回当前用户的状态 -
@User.email__v
:返回当前用户的电子邮件 -
@User.securityProfile__v
:返回当前用户的安全配置文件 -
@User.language__v
:返回当前用户的语言 -
@User.timezone__v
:返回当前用户的时区
示例用法
表达式 | 说明 |
---|---|
Case(@User.department__c, "Human Resources", "hr@sponsor.com", "Clinical Programming", "clinical_programming@company.com", "other@company.com") |
根据当前用户的部门返回电子邮件地址 |
Vault EDC 系统变量
EDC 有多个特定的系统变量,可在编写规则时使用。这些变量允许快速访问研究或病例手册层次结构中的对象。
以下对象和字段可在 Vault EDC 中用于系统变量:
研究
以下字段在研究(study__v
)对象中可用于系统引用和变量:
字段名称 | 字段标签 | 描述 | 规则表达式示例 |
---|---|---|---|
locked__v |
已锁定 | 返回研究的已锁定状态 | @Study.locked__v |
name__v |
名称 | 返回研究的名称 | @Study.name__v |
oid__v |
外部 ID | 返回研究的外部 ID | @Study.oid__v |
Study Country(研究国家/地区)
以下字段在研究国家/地区(study_country__v
)对象中可用于系统引用和变量:
字段名称 | 字段标签 | 描述 | 规则表达式示例 |
---|---|---|---|
name__v |
名称 | 返回与研究中心关联的研究国家/地区 | @StudyCountry.name__v |
country_abbreviation__v |
国家/地区缩写 | 返回研究国家/地区的国家/地区缩写 | @StudyCountry.country_abbreviation__v |
研究中心
以下字段在研究中心(site__v
)对象中可用于系统引用和变量:
字段名称 | 字段标签 | 描述 | 规则表达式示例 |
---|---|---|---|
locked__v |
已锁定 | 返回研究中心的已锁定状态 | @Site.locked__v |
name__v |
名称 | 返回该研究中心的研究中心编号 | @Site.name__v |
oid__v |
外部 ID | 返回研究中心的外部 ID | @Site.oid__v |
principal_investigator__v |
主要研究者 | 返回研究中心的主要研究者 | @Site.principal_investigator__v |
status__v |
状态 | 返回研究中心的状态 | @Site.status__v |
timezone__v |
时区 | 返回研究中心的时区 | @Site.timezone__v |
备注
- 对于研究中心,name__v 返回该研究中心记录的研究中心编号字段值。研究中心编号是 name__v 字段的标签。
病例手册
以下字段在病例手册(casebook__v
)对象中可用于系统引用和变量:
字段名称 | 字段标签 | 描述 | 规则表达式示例 |
---|---|---|---|
version__v |
版本 | 返回病例手册的版本 | @Casebook.version__v |
subject_status__v |
受试者状态 | 返回病例手册中的受试者状态(基于病例手册定义) | @Casebook.subject_status__v |
current_sdv_plan__v |
当前 SDV 计划 | 返回当前分配给受试者(病例手册)的 SDV 审查计划 | @Casebook.current_sdv_plan__v |
current_dmr_plan__v |
当前 DMR 计划 | 返回当前分配给受试者(病例手册)的 DMR 审查计划 | @Casebook.current_dmr_plan__v |
subject_name__v |
受试者 ID | 返回该病例手册中受试者的受试者 ID | @Casebook.subject_name__v |
var |
变量 | 可以用作标识符来表示为研究定义的病例手册变量 | @Var.enrolled_date |
事件组
以下字段在事件组(event_group__v
)对象中可用于系统引用和变量:
字段名称 | 字段标签 | 描述 | 规则表达式示例 |
---|---|---|---|
name__v |
名称 | 返回事件组的名称 | @EventGroup.name__v |
sequence__v |
顺序 | 返回事件组的序列号(适用于重复事件组) | @EventGroup.sequence__v |
事件
以下字段在事件(event__v
)对象中可用于系统引用和变量:
字段名称 | 字段标签 | 描述 | 规则表达式示例 |
---|---|---|---|
change_reason__v |
更改原因 | 返回事件的更改原因 | @Event.change_reason__v |
did_not_occur__v |
没有发生 | 如果事件未发生,返回 true | @Event.did_not_occur__v |
event_date__v |
事件日期 | 返回事件的事件日期 | 请参阅备注 |
name__v |
名称 | 返回事件的名称 | @Event.name__v |
sequence__v |
顺序 | 返回事件的序列号(适用于重复事件组中的事件) | @Event.sequence__v |
备注
- 在引用事件日期时,请始终定义事件。不要使用 @Event.event_date__v。对于完全限定的标识符,请使用 $EG.EVENT.event_date__v。
表单
以下字段在表单(form__v
)对象中可用于系统引用和变量:
字段名称 | 字段标签 | 描述 | 规则表达式示例 |
---|---|---|---|
change_reason__v |
更改原因 | 返回表单的更改原因 | @Form.change_reason__v |
form_status__v |
表单状态 | 返回表单的状态。选项包括:submitted__v、planned__v、blank__v、in_progress__v、in_progress_post_submit__v | @Form.form_status__v |
intentionally_left_blank__v |
特意留空 | 如果表单被标记为特意留空,返回 true | @Form.intentionally_left_blank__v |
name__v |
名称 | 返回表单的名称 | @Form.name__v |
sequence__v |
顺序 | 返回表单的序列号(适用于重复表单) | @Form.sequence__v |
submit_counter__v |
提交计数器 | 返回表单已提交的次数 | @Form.submit_counter__v |
备注
-
使用 $EG.EVENT.FORM.intentionally_left_blank 作为完全限定标识符的示例格式。
-
在 24R2 版本中,in_progress_post_submit__v 表单状态的标签从“提交后进行中”(In Progress Post Submit)更改为“编辑中”(In Edit)。变量未更改,仍然是 in_progress_post_submit__v。
条目
以下字段在条目(item__v
)对象中可用于系统引用和变量:
字段名称 | 字段标签 | 描述 | 规则表达式示例 |
---|---|---|---|
change_reason__v |
更改原因 | 返回条目的更改原因 | @Item.change_reason__v |
has_value_changed__v |
值是否更改 | 如果自上次规则运行以来,值已更改,则返回 true。仅在使用 @Form 标识符用于发送电子邮件规则时可用 | @Item.has_value_changed__v |
intentionally_left_blank__v |
特意留空 | 如果条目被标记为特意留空,返回 true | @Item.intentionally_left_blank__v |
lab_modifier__v |
实验室修改器 | 返回该条目的实验室修改器 | @Item.lab_modifier__v |
previous_submit_value__v |
先前提交值 | 返回上次表单提交时的条目值 | @Item.previous_submit_value__v |
translated_unit__v |
已转换的单位 | 返回分配给单位类型条目中的单位的标准单位名称 | @Item.translated_unit__v |
unit__v |
单位 | 返回分配给类型条目的单位名称 | @Item.unit__v |
value__v |
值 | 返回该条目的值 | @Item.value__v |
value_normalized__v |
归一化的值 | 返回该条目的归一化的值 | Item.value_normalized__v |
value_translated__v |
已转换的值 | 将该值转换为标准单位 | Item.value_translated__v |
备注
-
不要对日期数据类型的条目使用 value__v。默认情况下,日期类型条目在任何计算中使用 value_normalized__v,强制使用 value__v 会导致执行错误。
-
使用 $EG.EVENT.FORM.IG.ITEM.change_reason__v 作为完全限定标识符的示例格式。
-
数学函数可以用于单位条目类型。
-
Vault 自动将单位条目的标识符值转换为标准单位。例如,@Form.IG.UNITITEM.value_translated__v。可以使用 {{@Form.IG.UNITITEM.value__v}} 返回无单位的数值。
请注意,部分定义的路径也支持规则表达式。例如,@EventGroup.EVENT.field__v、@EventGroup.EVENT.FORM.field__v、@EventGroup.EVENT.FORM.IG.ITEM.field__v、@Event.FORM.field__v、@Event.FORM.IG.ITEM.field__v
。
系统引用
在 Vault 公式的上下文中,引用是指向相关对象值的变量,而不是指向对象值。例如,在使用 $study__vr.phase__v 时,Vault 会将该引用替换为与当前研究中心关联的研究对象的阶段值。
Vault Platform 系统引用
以下系统引用可作为 Vault Platform 的一部分使用,因此可以在应用程序中提供公式的任何地方使用这些引用:
对象到相关对象
允许公式访问与当前上下文对象相关的对象的属性。
用途
relationship__vr.name__vr
示例
principal_investigator__vr.research_and_focus_areas__v = "Macular Degeneration"
如果当前研究中心(对象)的主要研究者在黄斑变性方面有研究重点,则返回 True。
Vault EDC 系统引用
以下系统引用作为 Vault EDC 的一部分提供,因此只能在 EDC(数据验证规则、单位转换等)接受公式的应用程序区域中使用。
EDC 研究层次结构中的对象遵循以下顺序:
研究 → 研究中心 → 病例手册 → 事件组 → 事件 → 表单 → 条目组 → 条目
EDC 表达式可以引用研究层次结构中的多个不同对象及其属性。要引用这些对象,它们在研究层次结构中的访问路径必须使用特定语法编写。
每个引用必须以 $
符号或 @
符号开头,并且对象和属性之间必须用句点(.
)分隔。
以下对象和字段可在 Vault EDC 中用于系统引用与变量:&
研究
以下字段在研究(study__v
)对象中可用于系统引用和变量:
字段名称 | 字段标签 | 描述 |
---|---|---|
locked__v |
已锁定 | 返回研究的已锁定状态 |
name__v |
名称 | 返回研究的名称 |
oid__v |
外部 ID | 返回研究的外部 ID |
Study Country(研究国家/地区)
以下字段在研究国家/地区(study_country__v
)对象中可用于系统引用和变量:
字段名称 | 字段标签 | 描述 |
---|---|---|
name__v |
名称 | 返回与研究中心关联的研究国家/地区 |
country_abbreviation__v |
国家/地区缩写 | 返回研究国家/地区的国家/地区缩写 |
研究中心
以下字段在研究中心(site__v
)对象中可用于系统引用和变量:
字段名称 | 字段标签 | 描述 |
---|---|---|
locked__v |
已锁定 | 返回研究中心的已锁定状态 |
name__v |
名称 | 返回该研究中心的研究中心编号 |
oid__v |
外部 ID | 返回研究中心的外部 ID |
principal_investigator__v |
主要研究者 | 返回研究中心的主要研究者 |
status__v |
状态 | 返回研究中心的状态 |
timezone__v |
时区 | 返回研究中心的时区 |
备注
- 对于研究中心,name__v 返回该研究中心记录的研究中心编号字段值。研究中心编号是 name__v 字段的标签。
病例手册
以下字段在病例手册(casebook__v
)对象中可用于系统引用和变量:
字段名称 | 字段标签 | 描述 |
---|---|---|
version__v |
版本 | 返回病例手册的版本 |
subject_status__v |
受试者状态 | 返回病例手册中的受试者状态(基于病例手册定义) |
current_sdv_plan__v |
当前 SDV 计划 | 返回当前分配给受试者(病例手册)的 SDV 审查计划 |
current_dmr_plan__v |
当前 DMR 计划 | 返回当前分配给受试者(病例手册)的 DMR 审查计划 |
subject_name__v |
受试者 ID | 返回该病例手册中受试者的受试者 ID |
var |
变量 | 可以用作标识符来表示为研究定义的病例手册变量 |
事件组
以下字段在事件组(event_group__v
)对象中可用于系统引用和变量:
字段名称 | 字段标签 | 描述 |
---|---|---|
name__v |
名称 | 返回事件组的名称 |
sequence__v |
顺序 | 返回事件组的序列号(适用于重复事件组) |
事件
以下字段在事件(event__v
)对象中可用于系统引用和变量:
字段名称 | 字段标签 | 描述 |
---|---|---|
change_reason__v |
更改原因 | 返回事件的更改原因 |
did_not_occur__v |
没有发生 | 如果事件未发生,返回 true |
event_date__v |
事件日期 | 返回事件的事件日期 |
name__v |
名称 | 返回事件的名称 |
sequence__v |
顺序 | 返回事件的序列号(适用于重复事件组中的事件) |
备注
- 在引用事件日期时,请始终定义事件。不要使用 @Event.event_date__v。对于完全限定的标识符,请使用 $EG.EVENT.event_date__v。
表单
以下字段在表单(form__v
)对象中可用于系统引用和变量:
字段名称 | 字段标签 | 描述 |
---|---|---|
change_reason__v |
更改原因 | 返回表单的更改原因 |
form_status__v |
表单状态 | 返回表单的状态。选项包括:submitted__v、planned__v、blank__v、in_progress__v、in_progress_post_submit__v |
intentionally_left_blank__v |
特意留空 | 如果表单被标记为特意留空,返回 true |
name__v |
名称 | 返回表单的名称 |
sequence__v |
顺序 | 返回表单的序列号(适用于重复表单) |
submit_counter__v |
提交计数器 | 返回表单已提交的次数 |
备注
-
使用 $EG.EVENT.FORM.intentionally_left_blank 作为完全限定标识符的示例格式。
-
在 24R2 版本中,in_progress_post_submit__v 表单状态的标签从“提交后进行中”(In Progress Post Submit)更改为“编辑中”(In Edit)。变量未更改,仍然是 in_progress_post_submit__v。
条目
以下字段在条目(item__v
)对象中可用于系统引用和变量:
字段名称 | 字段标签 | 描述 |
---|---|---|
change_reason__v |
更改原因 | 返回条目的更改原因 |
has_value_changed__v |
值是否更改 | 如果自上次规则运行以来,值已更改,则返回 true。仅在使用 @Form 标识符用于发送电子邮件规则时可用 |
intentionally_left_blank__v |
特意留空 | 如果条目被标记为特意留空,返回 true |
lab_modifier__v |
实验室修改器 | 返回该条目的实验室修改器 |
previous_submit_value__v |
先前提交值 | 返回上次表单提交时的条目值 |
translated_unit__v |
已转换的单位 | 返回分配给单位类型条目中的单位的标准单位名称 |
unit__v |
单位 | 返回分配给类型条目的单位名称 |
value__v |
值 | 返回该条目的值 |
value_normalized__v |
归一化的值 | 返回该条目的归一化的值 |
value_translated__v |
已转换的值 | 将该值转换为标准单位 |
备注
-
不要对日期数据类型的条目使用 value__v。默认情况下,日期类型条目在任何计算中使用 value_normalized__v,强制使用 value__v 会导致执行错误。
-
使用 $EG.EVENT.FORM.IG.ITEM.change_reason__v 作为完全限定标识符的示例格式。
-
数学函数可以用于单位条目类型。
-
Vault 自动将单位条目的标识符值转换为标准单位。例如,@Form.IG.UNITITEM.value_translated__v。可以使用 {{@Form.IG.UNITITEM.value__v}} 返回无单位的数值。
示例
备注:以下示例使用了对象和记录的示例名称。要使用这些引用,必须用您自己研究中的值替换名称。
例如,要访问研究结束时生命体征收集的日期,可使用以下表达式(具体取决于研究在 EDC Studio 中的构建方式和对象的名称):
$End_of_Study.End_of_Study_Visit.Vital_Signs.General_Information.Date.value__v
该引用访问的是研究结束时生命体征收集的日期(日期条目在生命体征表单的常规信息条目组中,位于研究结束访视事件中,属于研究结束事件)。
这种引用对象的方式同样适用于系统变量。
例如,如果表达式是在生命体征表单上评估的(此时该表单被视为当前表单),可以使用:
@Form.General_Information.Date.value__v
还可以访问其他级别的属性,例如事件或表单:
$Cohort_A.Visit_1.event_date__v
该引用访问的是队列 A 事件组中的第一次访视(访视 1 事件)的事件日期。
定义简短路径
指定访问表达式中所有对象的完整路径可能很长且繁琐,因此您可能希望使用 #define 语句定义简短路径,以引用表达式中经常使用的表单或条目组(或任何其他对象)。
可以在 #define 语句中同时使用系统引用和系统变量。
定义简短路径的语法是:
#define vitals_info “$End_of_Study.Vital_Signs.General_Information”
然后可以使用对象 vitals_info
访问相关对象和属性。
上一节中的示例:
$End_of_Study.End_of_Study_Visit.Vital_Signs.General_Information.Date.value__v
可以简化为:
vitals_info.Date.value__v
构建公式
可以使用的公式编辑器功能,该功能能否使用取决于在 Vault 中使用公式的具体位置。关于特定功能区域的公式详细信息,请参阅:
有效字段与数据类型&
定义公式时,请确保公式中的运算符、函数、字段和值与字段的数据类型匹配。例如,不能在公式中使用日期字段来更新文本字段,除非使用文本函数进行转换。
Vault 会在公式中自动转换以下数据类型:
- 对象引用 → 文本
- 选项列表 → 文本(在对象上的公式字段或字段默认值中除外)
- 日期时间 → 日期(在对象上的公式字段或字段默认值中除外)
Vault 提供一些可用于转换数据类型的函数:
- 日期 → 文本:
Text(date, format)
- 数字 → 时间间隔:
Days(number)
、Months(number)
、Years(number)
、Hours(number)
、Minutes(number)
- 文本 → 数字:
Value(text)
标识符
构建用于规则或视图的公式时,可以使用标识符来引用研究数据,例如引用表单上的某个条目。
可以按层次结构定义标识符,直到唯一为止,并用句点(.
)分隔标识符:
$Event_group.Event.Form.Item_group.Item
然后再可以使用条目对象上的字段来引用收集的值:
$Event_group.Event.Form.Item_group.Item.value__v
在 Studio 规则编辑器中,Vault 可以在您输入时尝试自动完成标识符、变量、运算符和函数。按下 Ctrl + 空格键可查看下拉列表中的自动完成选项。如果在开始键入标识符之前按下 Ctrl + 空格键,Vault 会在下拉列表中列出所有有效标识符。
如果在多个地方使用设计定义,例如,如果在多个表单中使用某个条目,可以使用 @
指定要涵盖该定义的所有实例。
例如,要在多个表单中评估某个条目,可以使用 @Form.Item_group.Item
。可以在事件组、事件和表单级别使用此功能。
在禁用和设置条目值规则中,只能使用 @Form
标识符(不能使用 @EventGroup
、@Event
或 @ItemGroup
)。
#Define 语句
可以使用 #define 语句为标识符定义变量,这样就不必每次在公式中引用标识符时还重新编写它们。
例如,要为舒张压(Diastolic Blood Pressure)条目定义简化名称:
#define diastolic @Form.Vitals.Diastolic_blood_pressure.value__v
现在,每次在公式中使用 diastolic
时,Vault 会自动将其读取为 #define 语句中的标识符。
- 将 #define 语句放在公式的顶部,每行一个。
- 必须在每个公式中都包含 #define 语句。这些变量是在规则的上下文中定义的,因此无法跨多个规则使用单个 #define 语句。
注释
可以使用注释在公式中做备注。例如,可能希望添加简短的表达式说明,以便日后提醒自己如何使用。
要在公式中添加注释,请在公式顶部(第一行)输入注释文本,并将其用 /*
和 */
括起来。
/* This is a comment.*/
公式指南
编写公式时,请遵循以下指南:
- 小数点使用句点,而不考虑 Vault 区域设置。
- 公式的最大表达式长度为 1,500 个字符。
- 当公式包含多个表达式时,请使用括号 () 将表达式括起来。
- Vault CDMS 将数字视为浮点数,并在公式评估结束时对其进行解析。
函数
在公式表达式中添加函数时,请遵循以下指南:
- 函数名称区分大小写。
- 函数可以有一个或多个参数。不同函数允许不同数量的参数。
- Vault 从左到右处理公式。对于嵌套函数,Vault 先从左到右处理子函数,然后再处理父函数。
运算符
在公式表达式中添加运算符时,请遵循以下指南:
- 标准的运算顺序适用:乘法和除法优先于加法和减法,除非使用括号进行分组覆盖。
- 可以使用数学运算来添加数字和数字类型的字段。
- 不能在数学运算中使用日期类型字段。使用上述的各种日期函数。
布尔字段
编写引用“是/否”类型对象字段或布尔类型条目(复选框)的公式时,使用 true
表示“是”,使用 false
表示“否”(未勾选的复选框)。
空值处理
这决定了 Vault 在公式中处理空字段值的方式:
- 作为零:Vault 将空值替换为零,以继续完成公式计算。
- 作为空:Vault 将空值视为 null,导致整个表达式返回 null/空值。
示例
此示例展示不同的空值处理选项对此公式结果的影响:
公式:
NUM1 + NUM2
空值处理结果 | “作为零”结果 | “作为空”结果 |
---|---|---|
两者均为空 | 0 + 0 = 0 | null + null = null |
NUM1 | NUM1 + 0 = NUM1 | NUM1 + null = null |
NUM2 | 0 + NUM2 = NUM2 | null + NUM2 = null |
错误处理
任何语法错误都必须在创建或更新规则之前解决。操作从条件字段中点击移出时,如果公式语法不正确,Vault 会显示“表达式无效”(Expression is invalid)。以下是常见的语法错误:
- 返回的数据类型不匹配。例如,如果返回类型为日期,但表达式返回一个数字,那么将收到错误。
- 公式缺少结束括号,或者括号不匹配。
- 函数中参数的数量不正确。例如,在
if(expression, value 1, value 2)
函数中使用了三个参数。 - 函数具有不正确的参数值。
迁移(V1 到 V2)
Enhanced Vault Formulas 在使用公式的应用平台区域中自动可用,可供立即使用。
对于 EDC 特定的公式使用(规则和视图),必须在每个研究中启用 Enhanced Vault Formulas。
在 19R1 版本(2019 年 4 月发布)之前创建的研究无法升级到增强型公式语言。此类研究必须继续使用 V1 公式语言(请参阅此处的参考)来处理其规则和派生列映射。
如何为研究启用 Enhanced Vault Formulas
要在研究中启用 Enhanced Vault Formulas,需要:
- 验证研究中没有使用 V1 公式语言的任何公式。
- 导航到管理 > 业务管理(Admin > Business Admin)中的研究配置(Study Configuration)对象。
- 找到研究并点击打开它。
- 单击编辑。
- 在 Expression Engine 版本字段中,输入
2
。 - 点击保存。
您的研究现在正在使用增强型公式语言。
将现有设计移动到启用 Enhanced Vault Formulas 的新研究中
还可以选择创建一个新研究(新研究默认启用 Enhanced Vault Formulas),并将现有设计导入该新研究中。Vault 会导入系统管理的规则(必填、范围和未来日期验证检查)以及单位转换(自动将 value__v
替换为 $value__v
),但不导入自定义规则或派生列公式。
此方法会从设计中删除所有公式,包括自定义规则和派生列公式。
现在可以使用 Enhanced Vault Formulas 为规则、派生列和单位转换创建新的公式表达式。
其他资源
另有一些包含具体用例信息的帮助主题,详细说明了如何使用公式: