diff --git a/api/src/engine/connectors/exareme/transformations.ts b/api/src/engine/connectors/exareme/transformations.ts index 4706fa4e6f42692db75e9bce9d9dcf6e618b6c17..853dec62aba9fcf798671759dfc8f0155d8342b7 100644 --- a/api/src/engine/connectors/exareme/transformations.ts +++ b/api/src/engine/connectors/exareme/transformations.ts @@ -6,27 +6,40 @@ import * as jsonata from 'jsonata'; // old import style needed because of 'expor export const transientToTable = jsonata(` ( $e := function($x) {( - ($x != null) ? $x : '' + ($x != null) ? $x : '' )}; + $fn := function($o, $prefix) { + $each($o, function($v, $k) {( + $name := $join([$prefix,$k], '/'); + $type($v) = 'object' ? $fn($v, $name): { + $name: $v + } + )}) ~> $merge() + }; + result.data.[ - $.single.*@$p#$i.{ - 'groupBy' : 'single', - 'name': $keys(%)[$i], - 'metadatas': $keys(*).{ - 'name': $, - 'type': 'string' - }, - 'data' : [ - [$keys(%)[$i], $p.*.($e(num_total))], - ['Datapoints', $p.*.($e(num_datapoints))], - ['Nulls', $p.*.($e(num_nulls))], - ['std', $p.*.data.($e(std))], - ['max', $p.*.data.($e(max))], - ['min', $p.*.data.($e(min))], - ['mean', $p.*.data.($e(mean))] - ] - } + $.single.*@$p#$i.{ + 'groupBy' : 'single', + 'name': $keys(%)[$i], + 'metadatas': $append("", $keys(*)).{ + '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) { + $each($a, function($v, $k) {( + $val := $lookup($b,$k); + { + $k : [$v, ($val != null) ? $val : ''] + } + )}) ~> $merge() + }) ~> $each(function($v, $k) {$append($k,$v)}) + ] + } ] ) `);