Calculated Fields


Calculated fields are used to convert raw values from existing data fields to calculated field values using Javascript functions, without modifying the existing data fields. Within each function, multiple basic data fields can be referenced.


Syntax


Each calculated field is a Javascript function.

Parameters


Name

Mandatory/Optional

Data Type

Description

rows

Mandatory

Object

Contains all data rows of a data field

row

Mandatory

Object

Reference of the current row

rowIndex

Mandatory

Number

The row number of the current row. The first row has a rowIndex of 0.

global

Mandatory

Object

Contains reference to all page parameters

locale

Optional

String

Contains multilingual configuration of content


Note

You don’t have to use all the parameters in your Javascript function.


Return Value


Value

Data Type

Description

value

Number/String (depends on configuration)

The calculated value


To use a parameter or any cell of each row, reference it like a Javascript object.

var cell_score = row['score'];
var global_param_time = global.time;


You may also use DTV built-in functions for your convenience.

  • DTVFunc.sum(fieldId): Returns the sum of all values of the data field

  • DTVFunc.average(fieldId): Returns the mean of all values of the data field


Examples


Converting Timestamp


You can use calculated fields to convert the raw Unix timestamp into a human-readable value. The function below converts the raw timestamp into the format 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;
  }
}


Calculating Total


DTV only supports the aggregation of values column-wise. To aggregate values row-wise, you can create a calculated field. For example, assume there are 3 data fields, each providing the number of cars for a different car type, per year. You can use the function below to return the total number of cars in each year.


function(rows, row, rowIndex, global){
    return row['sedan'] + row['suv'] + row['other'];
}


Formatting Values


You can use calculated fields to format basic data fields. For example, values for electrical current can be positive or negative, depending on its direction. Most of the time, however, only the magnitude is required. The function below returns the magnitude of the electrical current.


function(rows, row, rowIndex, global){
    var newCurrent = row['current'];
    if (newCurrent < 0) { // If the value is negative, convert it to positive
    newCurrent *= -1;
    }
    return newCurrent;
}


Internationalization


You can write if logic scripts to determine the current language and support internationalized presentation of content. A sample is as follows:


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;
}