计算字段¶
计算字段是利用 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;
}