Присоединённое агрегирование

Преобразование joinaggregate вычисляет итоговые значения и добавляет их к каждой исходной записи в новых полях. Это позволяет сочетать исходные значения с групповыми итогами, например рассчитывать долю записи в общей сумме. В отличие от обычного агрегирования, исходная структура таблицы сохраняется: записи дополняются итогами, а не сводятся к одной записи на группу. Это частный случай оконного преобразования, в котором frame всегда равен [null, null].

Содержание страницы

Определение полей присоединённого агрегирования

// Любая спецификация представления
{
  ...,
  "transform": [
    {
      // Присоединённое агрегирование
      "joinaggregate": [{
          "op": ...,
          "field": ...,
          "as": ...
      }],
      "groupby": [
        "..."
      ]
    },
     ...
  ],
  ...
}

Определение преобразования

Свойство Тип Описание
joinaggregate JoinAggregateFieldDef[] Обязательные определения полей присоединённого агрегирования и вычислений для них.
groupby FieldName[] Поля для разбиения объектов данных на отдельные группы. Если не указаны, все записи образуют одну группу.

Определение итогового поля

Свойство Тип Описание
op AggregateOp Обязательная операция агрегирования, например "sum", "average" или "count". См. все поддерживаемые операции.
field FieldName Поле для вычисления функции агрегирования. Можно не указывать для функций, которые не используют поле, например "count".
as FieldName Обязательное имя выходного поля присоединённого агрегирования.

Примеры

Ниже показаны распространённые способы применения присоединённого агрегирования.

Доля от общей суммы

Сначала вычисляется общая сумма, затем для каждой записи рассчитывается её доля:

Отклонение от среднего

Можно отобрать фильмы, чей рейтинг выше общего среднего более чем на 2,5 балла:

В следующем примере фильм сравнивается со средним рейтингом за свой год выпуска, а не со средним по всему набору: отбираются фильмы с рейтингом более чем на 2,5 балла выше среднего за этот год.

Можно также не отбирать фильмы, а вычислить для каждой записи разность между её рейтингом и средним:

Контрастный цвет текста

Здесь текст накладывается на табличную тепловую карту. Подписи чёрные или белые в зависимости от num_cars. Если порог прописан вручную, например 40, нужно заранее знать диапазон значений:

joinaggregate вместе с calculate позволяет определить порог по данным автоматически: