Значения для расчетной колонки рассчитываются по заданному пользовательскому алгоритму.

Чтобы добавить в датасет расчетную колонку, кликните на кнопку в строке «Расчетные колонки» над списком колонок. По клику кнопки открывается страница настройки расчетной колонки.



Страница настройки расчетной колонки


Страница состоит из полей и элементов, сверху вниз, слева направо:

  • «Название колонки» – название для отображения;
  • «Тип данных» – тип данных, который соответствует возвращаемому значению расчетной колонки;
  • «Переменные» – блок для создания переменных из колонок датасета, чтобы использовать их значения в расчете;
  • «Формула» – блок для написания алгоритма расчета на языке Python;
  • «Датасет» – блок с колонками датасета;
  • «Превью» – блок для предпросмотра результата расчета;
  • «Ошибка» – всплывающий в правой части страницы блок с сообщением об ошибке в настройках расчетной колонки;
  • «Записать расчет в датасет» – параметр для управления записью результата расчета, который изменяет логику проведения расчета.


Обратите внимание

Блоки «Переменные», «Формула», «Датасет», «Превью» позволяют взаимозависимо изменять свои размеры. Чтобы изменить размер блока, зажмите и перетащите мышью вертикальную или горизонтальную границу между блоками.

Тип данных

Тип данных должен соответствовать типу данных, который возвращает формула расчета, для корректного отображения и использования рассчитанных значений.


Обратите внимание

Для расчетной колонки на странице настройки датасета, в настройках колонки, поле «Тип данных» недоступно для редактирования. Тип данных можно задать только на странице настройки расчетной колонки.

Переменные

Переменные создаются из колонок датасета и позволяют обращаться к значениям в колонке. Так, через переменную District из колонки «Федеральный округ» для каждой строки расчетной колонки будет получено значение из соответствующей строки колонки «Федеральный округ».


Переменная District из колонки «Федеральный округ»


Чтобы создать переменную, зажмите и перетащите мышью колонку датасета из блока «Датасет» в блок «Переменные». После перетаскивания блок «Переменные» автоматически переключается в режим редактирования. Чтобы включить режим редактирования вручную, кликните в блоке кнопку «Редактировать». 

В режиме редактирования вы можете задать имя переменной, следуя указанным в подсказке ограничениям, а также метод агрегации данных.

Чтобы удалить переменную, кликните для соответствующей переменной кнопку .

Обратите внимание, что формула расчетной колонки позволяет также объявлять переменные дополнительно к тем, которые созданы из колонок датасета. Идентификаторы объявляемых переменных не должны совпадать с идентификаторами переменных, заданных в блоке «Переменные».

Формула

Блок «Формула» предназначен для написания алгоритма расчета на языке Python. Ключевое слово return используется для передачи значения в расчетную колонку.

Чтобы получить результат расчета, напишите алгоритм и кликните в блоке кнопку «Рассчитать».


Обратите внимание

  • Агрегация перед расчетом, метод которой задается для переменной в блоке «Переменные», применяется только в специальных условиях, о которых сказано в соответствующем разделе, и не может быть использована в расчете явно.
  • Механизм расчета не может использовать в вычислениях NULL. Для обработки NULL в переменной используйте условие проверки на NULL с заменой на ноль, например: 

return a1 if a1 else 0 + a2 if a2 else 0

В расчетной колонке результат сравнения значений переменных


В следующем примере используются дополнительные переменные, объявленные в блоке.


Расчет с применением условного оператора

Превью

По клику кнопки «Рассчитать» в блоке превью отображается расчетная колонка с результатом расчета, а также колонки, которые вынесены в блок «Переменные», независимо от того, используются ли они в алгоритме расчета. Это может быть использовано для удобства предпросмотра.


В предпросмотре отображается колонка «Муниципальное образование», которая не участвует в расчете

Ошибка

Сообщения об ошибках в настройке расчетной колонки или при сохранении отображаются во всплывающем блоке. Блок отображается на странице до его закрытия.


Блок с сообщением об ошибке

Записать расчет в датасет

Параметр управляет записью результата расчета в датасет.

Когда параметр включен, результат расчета записывается в датасет и такая расчетная колонка:

  • выполняет расчет построчно, игнорируя методы агрегации, задаваемые для переменных в блоке «Переменные»;
  • может быть использована для сортировки и фильтрации;
  • обновляется только с обновлением датасета, изменением SQL-запроса, удалением или добавлением колонки датасета, а также после ее редактирования и сохранения изменений;
  • позволяет управлять агрегацией через настройки полей данных с агрегацией.

Когда параметр выключен, результат расчета НЕ записывается в датасет, а запрашивается во время обращения к данным датасета и такая расчетная колонка:

  • применяет для каждой переменной агрегацию перед расчетом, используя методы агрегации, задаваемые для переменных в блоке «Переменные»;
  • не может быть использована для фильтрации;
  • не позволяет управлять агрегацией через настройки полей данных с агрегацией.

Для расчетной колонки, сохраненной с включенным параметром, на странице настройки датасета в блоке колонок, отображается пиктограмма . Для расчетной колонки с выключенным параметром – пиктограмма .


Обратите внимание!

  • Параметр не может быть включен для расчетной колонки объединенного датасета.
  • Расчетную колонку с выключенным параметром невозможно выбрать при создании объединенного датасета.
  • При редактировании расчетной колонки запрещается изменение состояния параметра на выключенное – чекбокс параметра блокируется во включенном состоянии при сохранении в таком состоянии.

Агрегация

Применение агрегации перед расчетом позволяет рассчитывать значения для любого уровня детализации. Без применения агрегации расчет выполняется построчно.

Чтобы расчетная колонка применяла агрегацию перед расчетом, требуется совместное выполнение условий:

  • параметр «Записать расчет в датасет» выключен;
  • расчетная колонка используется в поле данных с агрегацией.

Агрегация перед расчетом НЕ применяется в любом плоском представлении данных:

  • в блоке «Превью» страницы настройки расчетной колонки;
  • при просмотре датасета;
  • для расчетной колонки, вынесенной в поле данных, не поддерживающее агрегацию.

Для разных типов данных доступны разные методы агрегации.

  • Для типа данных «Число»: 
    • Sum - сумма;
    • Avg - среднее арифметическое;
    • Min, Max - минимум и максимум;
    • Соunt - количество записей;
    • Count Distinct - точное количество записей, включая пустые.
  • Для типов данных  «Дата» и  «Строка»:
    • Min, Max - минимум и максимум, берутся из связанной числовой колонки;
    • Соunt - количество записей;
    • Count Distinct - точное количество записей, включая пустые.
  • Для типа данных «Булево»:
    • Соunt - количество записей;
    • Count Distinct - точное количество записей, включая пустые.

Примеры

Пусть есть набор данных:

Колонка 1Колонка 2Колонка 3Значение 1Значение 2
АБа102
АБб202
АВв302
АВг402
АВд502

Создадим расчетную колонку с формулой «Значение 1 / Значение 2» с записью в датасет. Без применения агрегации перед расчетом результат расчета выполняется построчно и записывается в датасет:

Колонка 1Колонка 2Колонка 3Результат расчета (Значение 1 / Значение 2)
АБа5
АБб10
АВв15
АВг20
АВд25

Настройка расчетной колонки, расчет записан

Детализация по такой колонке использует агрегацию уже рассчитанных значений. Пример с методом агрегации SUM:

Колонка 1Результат расчета (Значение 1 / Значение 2)Колонка 2Результат расчета (Значение 1 / Значение 2)Колонка 3Результат расчета (Значение 1 / Значение 2)
А5 + 10 + 15 + 20 + 25 = 75Б5 + 10 = 15а5
АБб10
АВ15 + 20 + 25 = 60в15
АВг20
АВд25

Создадим вторую колонку с такой же формулой без записи в датасет. Детализация по такой колонке вызывает агрегацию перед расчетом значений. Пример с методом агрегации SUM для переменных «Значение 1» и «Значение 2»:

Колонка 1Результат расчета (Значение 1 / Значение 2)Колонка 2Результат расчета (Значение 1 / Значение 2)Колонка 3Результат расчета (Значение 1 / Значение 2)
А(10 + 20 + 30 + 40 + 50) / (2 * 5) = 15Б(10 + 20) / (2 * 2) = 7,5а5
АБб10
АВ(30 + 40 + 50) / (2 * 3) = 20в15
АВг20
АВд25

Настройка расчетной колонки, пример с методом агрегации SUM для переменных «Значение 1» и «Значение 2». Расчет не записан

Сравнение колонок на виджете.

Детализация на уровне колонки «Колонка 1»

Детализация на уровне колонки «Колонка 2»

Детализация на уровне колонки «Колонка 3»

Пример с методом агрегации SUM для переменной «Значение 1» и COUNT для переменной «Значение 2»:

Колонка 1Результат расчета (Значение 1 / Значение 2)Колонка 2Результат расчета (Значение 1 / Значение 2)Колонка 3Результат расчета (Значение 1 / Значение 2)
А(10 + 20 + 30 + 40 + 50) / 5 = 30Б(10 + 20) / 2 = 15а10 / 1 = 10
АБб20 / 1 = 20
АВ(30 + 40 + 50) / 3 = 40в30 / 1 = 30
АВг40 / 1 = 40
АВд50 / 1 = 50

Настройка расчетной колонки, пример с методом агрегации SUM для переменной «Значение 1» и COUNT для переменной «Значение 2». Расчет не записан

Сравнение колонок на виджете.

Детализация на уровне колонки «Колонка 1»

Детализация на уровне колонки «Колонка 2»

Детализация на уровне колонки «Колонка 3»

Пример с методом агрегации MAX для переменной «Значение 1» и COUNT DISTINCT для переменной «Значение 2»:

Колонка 1Результат расчета (Значение 1 / Значение 2)Колонка 2Результат расчета (Значение 1 / Значение 2)Колонка  3Результат расчета (Значение 1 / Значение 2)
А50 / 1 = 50Б20 / 1 = 20а10 / 1 = 10
АБб20 / 1 = 20
АВ50 / 1 = 50в30 / 1 = 30
АВг40 / 1 = 40
АВд50 / 1 = 50

Настройка расчетной колонки, пример с методом агрегации MAX для переменной «Значение 1» и COUNT DISTINCT для переменной «Значение 2». Расчет не записан

Сравнение колонок на виджете.

Детализация на уровне колонки «Колонка 1»

Детализация на уровне колонки «Колонка 2»

Детализация на уровне колонки «Колонка 3»

Создадим на том же наборе данных расчетную колонку с формулой «(Значение 2) if (Колонка 1) == "А" else 0» с записью в датасет. Без применения агрегации перед расчетом результат расчета выполняется построчно и записывается в датасет:

Колонка 1Значение 2Результат расчета (return (Значение 2) if (Колонка 1) == "А" else 0)
А22
А22
А22
А22
А22

Детализация по такой колонке использует агрегацию уже рассчитанных значений. Пример с методом агрегации SUM:

Колонка 1Результат расчета (return (Значение 2) if (Колонка 1) == "А" else 0)Колонка 2Результат расчета (return (Значение 2) if (Колонка 1) == "А" else 0)Колонка 3Результат расчета (return (Значение 2) if (Колонка 1) == "А" else 0)
А2 + 2 + 2 + 2 + 2 = 10Б2 + 2 = 4а2
АБб2
АВ2 + 2 + 2 = 6в2
АВг2
АВд2

Создадим вторую колонку с такой же формулой без записи в датасет. Детализация по такой колонке вызывает агрегацию перед расчетом значений. Пример с методом агрегации COUNT для переменной «Значение 1» и SUM для переменной «Значение 2»:

Колонка 1Результат расчета (return (Значение 2) if (Колонка 1) == "А" else 0)Колонка 2Результат расчета (return (Значение 2) if (Колонка 1) == "А" else 0)Колонка 3Результат расчета (return (Значение 2) if (Колонка 1) == "А" else 0)
А0Б0а0
АБб0
АВ0в0
АВг0
АВд0

Поскольку для каждого уровня детализации выполнялась агрегация перед расчетом, то в переменную Column1 перед каждым расчетом передавалось значение «5», то есть агрегированное значение по колонке «Колонка 1». В результате выражение везде вернуло результат «0», так как «5» не равно «А».

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

Настройка расчетной колонки БЕЗ записи в датасет


Но на виджете видим, что значение для колонки без записи – «0».


Детализация на уровне колонки «Колонка 1»

Удаление колонки датасета, используемой в расчете

При удалении колонки датасета, используемой в расчетной колонке, никакое системное предупреждение не выводится.

  • Нет меток