计算表达式规则
写计算表达式的规则与大多数编程语言中的写表达式规则类似。计算表达式使用特定的语法和运算符、常数、函数以及 PTC RV&S 字段来执行计算。
例如,下图显示了一个简单的计算表达式,该计算表达式涉及用于执行聚合计算的一个函数和一个字段。
计算表达式用于在图表中计算多项中所出现的字段的总和。
下图显示了更复杂的计算表达式,该表达式组合了多个函数、字段、字段值与运算符,以在计算字段中执行计算:
| 为了清楚展示,此图概略显示了某些函数、字段、字段值和运算符。 |
计算字段中的计算表达式会确定项是否未有效的更改单。
| 创建计算表达式之前,请审阅下列重要考虑事项,以了解可接受的语法、运算符和常数。 |
重要考虑事项
常规
◦ 本指南未涵盖提供有关如何编写计算表达式的明确说明。但是本指南提供了一些简易与复杂的计算表达式示例,以阐明在字段、图表和报告中执行计算时可以采用的某些方式。
◦ 如果您未提供正确的计算表达式语法,则在保存计算表达式时,PTC RV&S 会显示详细的出错消息。
语法
◦ 要指定字段名,请将字段名包含在双引号内,例如,"Actual Cost"。
◦ 除非在引号内,否则将忽略空格和特殊字符,例如,"Defect Count"。
◦ 后会接“(” (括号) 的标识符视为函数。未接括号的标识符视为字段名。
◦ 计算字段可有效用作其他计算字段或计算表达式中使用的字段;但是,它们不可以递归。
算术运算符
计算表达式支持下列算术运算符:
◦ * (乘)
◦ / (除)
◦ + (加)
◦ - (减)
◦ - (相反数)
◦ Boolean-exp?true_exp:false_exp (条件式三元)
布尔运算符
计算表达式支持下列布尔运算符:
◦ == (等于)
◦ = (包含)
◦ != (不等于)
◦ <> (不包含)
◦ < (少于)
◦ > (大于)
◦ <= (少于或等于)
◦ >= (大于或等于)
◦ and
◦ or
expression boolean-operator expression
对于布尔字段,两个关键字是布尔常数:true 和 false。如果将计算字段标记为布尔字段,则计算表达式的结果必须是布尔值,例如:
空字段
在 PTC RV&S 中,无值的字段称为空字段。除在聚合表达式中外,包括空字段或不明确字段的计算表达式均会返回空值。
例如,要确定是否 Project End Date 日期字段为空,请输入:
"Project End Date"-today() > 0
或
"Project End Date" - today() <=0? false:true
要将空字段值指定为零,请使用 isEmpty 函数。例如:
isEmpty("QA Time", 0) + isEmpty("Development Time", 0)
使您能够添加两个持续时间并检索结果,即使其中一个值为空,也是如此。
| 如果计算字段可包含不明确的计算,作为最佳实践,PTC 建议将运算式包含在 IsEmpty() 函数中。这可确保将任何空计算字段值存储到历史记录,作为不明确计算表达式的结果。 |
日期、时间和时区
◦ 日期和日期/时间会视为计算表达式中的单独日期类型,并且无法分配给其他表达式。
◦ 显示的日期字段不会随用户所在的时区发生变化;不过,显示的日期/时间字段和时间条目会因用户所在的时区而异。
◦ 计算表达式将返回 PTC RV&S 客户端的时区中的日期/时间,并在 PTC RV&S 服务器的时区中执行计算 (如适用) 。
◦ 计算表达式不包括用于将日期/时间信息转为仅限日期的函数。此规则适用于表达式返回时间戳 (日期加时间) 值的所有情况。需要日期/时间信息时,请搭配使用计算表达式与时间戳字段。
◦ 日期表达式接受所有标准化的日期和时间戳格式。
◦ 在计算表达式中,支持含时间戳的下列操作:
▪ timestamp + integer constant; integer constant + timestamp
▪ timestamp - integer constant
▪ timestamp("timestamp-constant")
▪ timestamp - timestamp
▪ 可从整数常量中减去或加上时间戳,例如,now()+5 或 now() - 5
将以天为单位处理整数常量,例如,timestamp + integer constant 会获取指定的时间,然后加上指定的天数。两个时间戳相减时,两个日期之间的天数会舍入为最近的天数,并将此作为结果。使用其他操作符或浮点会导致出错。
用户和组字段
◦ 在计算表达式中,您可以比较单值和多值用户和组字段,例如,"Assigned User" = jriley 或 "Assigned Group" = Development。通过创建包括用户或组字段比较在内的计算表达式,您可以将计算字段的结果整合到可编辑性规则中。
◦ 您还可以比较计算表达式中的两个用户字段,例如,“Assigned User” = “Created By”。此时会返回逻辑值或者 true 或 false。
◦ 您还可以使用符号 me 用户名来表示检索项的用户。