计算字段


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