Шаблон:GREL clue

Материал из Поле цифровой дидактики
Версия от 19:58, 16 апреля 2026; Patarakin (обсуждение | вклад)
(разн.) ← Предыдущая версия | Текущая версия (разн.) | Следующая версия → (разн.)
Контекст: что хотим сделать Где и в каком режиме Пример Expression (GREL)
Преобразовать текстовую дату в тип Date (для временных рядов) Меню столбца с датой → Edit cells → Common transforms → To date (выбор GREL не нужен, но важно понимать, что OpenRefine внутри применяет преобразование типа) (автоматическое преобразование ISO‑строки, например `"2022-07-06T06:37:06Z"`)

— отдельное выражение не вводим

Вытащить год из даты в новый столбец (переменная времени \(t\)) Меню столбца с датой → Edit column → Add column based on this column… → язык: GREL
value.toDate().toString("yyyy")

Создаёт столбец `year` с годом, используемым как временной индекс

Построить строковое представление «год‑месяц» (для месячных рядов) Меню столбца с датой → Add column based on this column…
value.toDate().toString("yyyy-MM")

Например, "2024-03"

Очистить пробелы в начале/конце и узнать длину строки Меню столбца с текстом → Edit cells → Transform…
value.trim().length()

Полезно для диагностики «грязных» строк, где есть лишние пробелы

Заменить подстроку (очистка категорий) Меню столбца → Edit cells → Transform…
value.replace("old","new")

Например, объединить разные варианты написания категорий

Объединить значения двух столбцов (конструирование идентификатора панели) Меню любого из столбцов → Edit column → Add column based on this column…
cells["user"].value + "_" + cells["board_id"].value

Создаёт composite key вида "user_board", удобный для группировок

Превратить JSON‑массив в строку с разделителем (подготовка к Split multi-valued cells) Меню столбца с массивом (например, idBoards) → Edit cells → Transform…
value.join("|")

После этого используем Edit cells → Split multi-valued cells… с разделителем |

Посчитать количество строк с той же парой user–board (агрегация по ключу) В режиме Rows, любой столбец → Edit column → Add column based on this column…
length(
  filter(
    rows,
    r,
    r.cells["user"].value == cells["user"].value &&
    r.cells["board_id"].value == cells["board_id"].value
  )
)

Даёт частоту пары (аналог COUNT(*) GROUP BY user, board_id)

Посчитать сумму числового показателя по user–board (например, events) Аналогично: Add column based on this column…, предварительно столбец events → To number
sum(
  forEach(
    filter(
      rows,
      r,
      r.cells["user"].value == cells["user"].value &&
      r.cells["board_id"].value == cells["board_id"].value
    ),
    r, r.cells["events"].value
  )
)

Аналог SUM(events) GROUP BY user, board_id

Фильтровать строки, где значение содержит подстроку (кастомный facet) Меню столбца → Facet → Custom text facet…
value.contains("wiki_edit")

Возвращает true/false для фасета, удобно для выделения определённых типов событий