在加工/整理/计算数据、或生成数据图时,可以使用表达式来构造数据值:以JavaScript代码实现计算逻辑、以数据列名为参数。
若脚本为空,则返回空字符串。
脚本可以包含Nashorn可以解析的任何合法元素(ECMAScript 5.1)。
脚本应当最终是一个数值。
脚本可以包含以下占位符:(占位符相当于脚本的变量名)
#{表行号}
#{数据行号}
#{<列名>}
#{<列名>-<统计名>}
界面提供按钮列出所有合法的占位符、以方便粘贴。
悬停或点击按钮"示例",可以粘贴示例代码。
悬停或点击按钮"历史",可以粘贴历史代码。
点击按钮"脚本"以从树“JavaScript”中复制代码。
点击按钮"选择"以从树“行表达式”中复制代码。
点击按钮"保存"以把当前表达式写入树“行表达式”中。
在MyBox计算表达式时:
占位符被内部变量替换,然后内部变量被映射为每行中列的实际数据值。
统计值是用所有数据来计算的。
当处理所有数据时,若脚本包含"#{表行号}"则它会失败。
行表达式 | 含义 |
---|---|
#{数据行号} | 整个数据的行号 |
#{表行号} | 当前页的行号 |
Math.abs(#{数字列1}) + Math.PI * Math.sqrt(#{数字列2}) | 数学计算 |
#{数字列1} - #{数字列2-均值} | "数字列1"的值与"数字列2"的平均值之间的差值 |
if ( #{字符串列} != null ) #{字符串列}.length else -1 |
"字符串列"值的长度 |
if ( #{字符串列} != null ) #{字符串列}.replace(/hello/ig,'Hello') else null |
把"字符串列"的值中所有"hello"(忽略大小写)替换"Hello" |
if ( #{字符串列} != null ) #{字符串列}.toLowerCase() else null |
"字符串列"值的小写 |
if ( #{字符串列} != null ) #{字符串列}.split(',') else null |
把"字符串列"的值按逗号分隔 |
function formatDate(date) { var y = date.getFullYear(); var m = date.getMonth() + 1; m = m < 10 ? ('0' + m) : m; var d = date.getDate(); d = d < 10 ? ('0' + d) : d; var h =date.getHours(); h = h < 10 ? ('0' + h) : h; var M =date.getMinutes(); M = M < 10 ? ('0' + M) : M; var s =date.getSeconds(); s = s < 10 ? ('0' + s) : s; return y + '-' + m + '-' + d + ' ' + h + ':' + M + ':' + s; } if (#{时间列} != null) formatDate(new Date(#{时间列})); else null; |
格式化"时间列"的值 |
if ( #{时间列} != null ) new Date(#{时间列}).getFullYear() else null |
"时间列"值的年份 |
“行过滤"是特殊的"行表达式”,用来作为过滤数据行的条件:
当脚本为空时,表示不过滤,所有行都通过。
脚本应当最终是一个布尔值(“true"或"false”)。
用户可以选择当值为true或false时通过行。
若脚本值既不是true也不是false, 如脚本错误的情形,则此行不通过。
可以设置取用数据的最多行数。
行过滤 | 含义 |
---|---|
#{数据行号} % 2 == 0 | 数据行号为偶数 |
#{表行号} % 2 == 1 | 当前页的奇数行 |
!isNaN(#{某列} - 1) | "某列"的值是数字 |
#{数字列} > 7 | "数字列"的值大于7 |
#{数字列1} - #{数字列2} < 100 | "数字列1"与"数字列2"的值差小于100 |
#{数字列1} < #{数字列2-均值} | "数字列1"的值小于"数字列2"的平均值 |
#{字符串列} == '' | "字符串列"的值为empty |
#{字符串列} != null | "字符串列"的值不为null |
if ( #{字符串列} != null ) #{字符串列}.length > 9 else undefined |
"字符串列"值的长度大于9 |
if ( #{字符串列} != null ) #{字符串列}.search(/Hello/ig) >= 0 else undefined |
"字符串列"的值包含字符串"Hello"(忽略大小写) |
if ( #{字符串列} != null ) #{字符串列}.startsWith('Hello') else undefined |
"字符串列"的值以"Hello"开头 |
if ( #{字符串列} != null ) var array = [ 'A', 'B', 'C']; array.includes(#{字符串列}) else undefined |
"字符串列"的值为’A’或’B’或’C’ |
if ( #{时间列} != null ) #{时间列}.startsWith('2016-05-19 09') else undefined |
"时间列"值的月份是'2016-05-19 09' |
if ( #{时间列} != null ) new Date(#{时间列}).getTime() > new Date('2016/05/19 09:23:12').getTime() else undefined |
"时间列"的值晚于’2016/05/19 09:23:12’ |
if ( #{时间列} != null ) new Date(#{时间列}).getDay() == 0 else undefined |
"时间列"的值是星期日 |