Vega: добавить недостающую информацию в данные


В kibana, в визуализации Vega-lite, я хотел бы создать граф состояний перехода приложения (AAAA) с течением времени. (график)
состояния имеют фиксированные значения ( init, start, running ...)

На оси х отметка времени,
На уровне государства,
Прямоугольник или полоса для отслеживания уровня состояния.

| ====
| ======
| ============
______________________________
t0 t1 t2....

мои данные поступают из запроса в ElasticSearch и имеют следующий формат.

timestamp  app  state
  t0    AAAA  Init
  t1    AAAA  start
  t2    AAAA  Running
  t3    AAAA  stopped

В vega я хотел бы представить состояние с помощью столбца или прямоугольника, например: состояние Init будет представлено прямоугольником, начиная с t0 и заканчивая в t1. но у меня нет этой информации! T1 находится в следующей строке данных

Можно ли рассчитать это значение, используя следующую строку. Данные будут такими.

timestamp  app  state    ends 
  t0    AAAA  Init         t1
  t1    AAAA  start        t2 
  t2    AAAA  Running      t3
  t3    AAAA  stopped      t4 


Любая помощь будет приветствоваться.

1 ответ

Вы можете сделать это с помощью преобразования окна, используя lead операция, чтобы найти следующее значение. Например:

{
  "data": {
    "values": [
      {"timestamp": 0, "app": "A", "state": "init"},
      {"timestamp": 10, "app": "A", "state": "start"},
      {"timestamp": 25, "app": "A", "state": "run"},
      {"timestamp": 30, "app": "A", "state": "stop"},
      {"timestamp": 40, "app": "B", "state": "init"},
      {"timestamp": 55, "app": "B", "state": "start"},
      {"timestamp": 75, "app": "B", "state": "run"},
      {"timestamp": 85, "app": "B", "state": "stop"},
      {"timestamp": 90, "app": null, "state": "init"}
    ]
  },
  "transform": [
    {"window": [{"op": "lead", "field": "timestamp", "as": "t_stop"}]},
    {"filter": "datum.app != null"}
  ],
  "encoding": {
    "color": {"type": "nominal", "field": "app"},
    "x": {"type": "quantitative", "field": "timestamp"},
    "x2": {"type": "quantitative", "field": "t_stop"},
    "y": {
      "type": "nominal",
      "field": "state",
      "sort": {"op": "sum", "field": "timestamp", "order": "ascending"}
    }
  },
  "mark": "bar",
  "$schema": "https://vega.github.io/schema/vega-lite/v2.6.0.json"
}

Другие вопросы по тегам