计算字段¶
计算字段是利用 Javascript 函数将现有数据源中的原始值转换为计算字段值,无需修改现有数据源。在每个函数中,可以引用多个基本数据项。
语法¶
每个计算字段都是 Javascript 函数。
参数¶
名称 |
必需/可选 |
数据类型 |
说明 |
---|---|---|---|
当前数据集(rows) |
必需 |
对象 |
包含某个数据项的所有数据行 |
当前行(row) |
必需 |
对象 |
当前行引用 |
当前行标(rowindex) |
必需 |
编号 |
当前行的行号。第一行的 rowIndex 为 0。 |
全局(global) |
必需 |
对象 |
包含对所有页面参数的引用 |
语言(locale) |
可选 |
字符串 |
包含对内容的多语言配置 |
备注
你不必使用 Javascript 函数中的所有参数。
返回值¶
值 |
数据类型 |
说明 |
---|---|---|
值 |
数字/字符串(取决于配置) |
计算值 |
要使用参数或某行的任一单元格,参考 Javascript 引用对象语句。
var cell_score = row['score'];
var global_param_time = global.time;
为方便起见,你也可以使用内置函数。
DTVFunc.sum(fieldId):返回数据项的所有值的总和。
DTVFunc.average(fieldId):返回数据项的所有值的平均值。
示例¶
转换时间戳¶
你可以使用计算字段将原始 Unix 时间戳转换为用户可读的值。下面的函数将原始时间戳转换为格式 yyyy/m/dd HH:MM:SS
。
function(rows, row, rowIndex, global){
var timestamp = row['timestamp'];
var date = new Date(timestamp); // Converts the timestamp into a Date object
var year = date.getFullYear();
var month = date.getMonth() + 1;
var day = date.getDate();
var hour = date.getHours();
var minute = date.getMinutes();
var second = date.getSeconds();
if (isNaN(year)) {
return '';
} else {
return year + '/' + month + '/' + day + ' ' + hour + ':' + minute + ':' + second;
}
}
计算总计¶
数字孪生可视化仅支持按列聚合值。要按行聚合值,可以创建计算字段。例如,假设有 3 个数据项,每个数据项提供每种不同车型每年的汽车数量。你可以使用下面的函数返回每年的汽车总数。
function(rows, row, rowIndex, global){
return row['sedan'] + row['suv'] + row['other'];
}
格式值¶
你可以使用计算字段设置基本数据项的格式。例如,电流的值可以为正或负,具体取决于它的方向。但是,大多数时候只需要幅值。下面的函数返回电流的幅值。
function(rows, row, rowIndex, global){
var newCurrent = row['current'];
if (newCurrent < 0) { // If value is negative, convert it to positive
newCurrent *= -1;
}
return newCurrent;
}
多语言国际化¶
你可以通过编写 if 逻辑脚本判断当前语言,支持内容的国际化展示。示例如下:
function(rows, row, rowIndex, global){
var statusMapping = {
310101: {'zh-CN': '正常', 'en-US': 'Normal'},
310104: {'zh-CN': '异常', 'en-US': 'Error'},
310105: {'zh-CN': '未知', 'en-US': 'Unknow'}
};
var code = row["code"];
var status = statusMapping[code];
if (status) {
return status[locale] || code;
}
return code;
}