Newer
Older
// This file contains all transformation queries for JSONata
// see : https://docs.jsonata.org/
import * as jsonata from 'jsonata'; // old import style needed due to 'export = jsonata'
export const transformToAlgorithms = jsonata(`
(
$params := ["y", "pathology", "dataset", "filter", "x"];
$toArray := function($x) { $type($x) = 'array' ? $x : [$x]};
*.{
'label': label,
'description': desc,
'parameters': $toArray(parameters[$not(name in $params)].{
'description': desc,
'label': label,
'type': valueType,
'defaultValue': defaultValue,
'isMultiple': $boolean(valueMultiple),
'isRequired': $boolean(valueNotBlank),
'min': valueMin,
'max': valueMax
})
}
)
`);
export const transformToExperiment = jsonata(`
(
$params := ["y", "pathology", "dataset", "filter", "x"];
$toArray := function($x) { $type($x) = 'array' ? $x : [$x]};
{
"name": name,
"uuid": uuid,
"author": createdBy,
"viewed": viewed,
"status": status,
"createdAt": created,
"finishedAt": finished,
"shared": shared,
"updateAt": updated,
"domain": algorithm.parameters[name = "pathology"].value,
"variables": $split(algorithm.parameters[name = "y"].value, ','),
"coVariables": $toArray($split(algorithm.parameters[name = "x"].value, ',')),
"filter": algorithm.parameters[name = "filter"].value,
"datasets": $split(algorithm.parameters[name = "dataset"].value, ','),
"algorithm": {
"parameters" : $toArray(
algorithm.parameters[$not(name in $params)].({
"label": label,
"value": $split(value, ',')
})
)
const headerDescriptivie = `
$fnum := function($x) { $type($x) = 'number' ? $round($number($x),3) : $x };
$e := function($x, $r) {($x != null) ? $fnum($x) : ($r ? $r : '')};
$fn := function($o, $prefix) {
$type($o) = 'object' ?
$each($o, function($v, $k) {(
$type($v) = 'object' ? { $k: $v.count & ' (' & $v.percentage & '%)' } : {
$k: $v
}
)}) ~> $merge()
: {}
};`;
export const descriptiveModelToTables = jsonata(`
(
${headerDescriptivie}
$vars := $count($keys(data.model.*.data))-1;
$varNames := $keys(data.model.*.data);
$model := data.model;
[[0..$vars].(
$i := $;
$ks := $keys($model.*.data.*[$i][$type($) = 'object']);
{
'headers': $append("", $keys($$.data.model)).{
'name': $,
'type': 'string'
},
'data': [
[$varName, $model.*.($e(num_total))],
['Datapoints', $model.*.($e(num_datapoints))],
['Nulls', $model.*.($e(num_nulls))],
($lookup($model.*.data, $varName).($fn($)) ~> $reduce(function($a, $b) {
$map($ks, function($k) {(
{
$k : [$e($lookup($a,$k), "No data"), $e($lookup($b,$k), "No data")]
}
)}) ~> $merge()
})).$each(function($v, $k) {$append($k,$v)})[]
]
}
)]
)`);
export const descriptiveSingleToTables = jsonata(`
$.single.*@$p#$i.(
$ks := $keys($p.*.data[$type($) = 'object']);
{
'name': $,
'type': 'string'
},
'data' : [
[$keys(%)[$i], $p.*.($e(num_total))],
['Datapoints', $p.*.($e(num_datapoints))],
['Nulls', $p.*.($e(num_nulls))],
($p.*.data.($fn($)) ~> $reduce(function($a, $b) {
$map($ks, function($k) {(
$k : [$e($lookup($a,$k), "No data"), $e($lookup($b,$k), "No data")]
})).$each(function($v, $k) {$append($k,$v)})[]