Значения для расчетной колонки рассчитываются по заданному пользовательскому алгоритму.
Чтобы добавить в датасет расчетную колонку, в окне редактирования датасета кликните на кнопку
в строке "Расчетные" над списком колонок. По клику кнопки открывается страница настройки расчетной колонки.
|
Страница состоит из полей и элементов, сверху вниз, слева направо:
| Блоки "Переменные", "Формула", "Датасет", "Превью" позволяют взаимозависимо изменять свои размеры. Чтобы изменить размер блока, зажмите и перетащите мышью вертикальную или горизонтальную границу между блоками. |
Тип данных должен соответствовать типу данных, который возвращает формула расчета для корректного отображения и использования рассчитанных значений.
При несоответствии типов в процессе формирования превью расчета и при сохранении расчетной колонки система выполняет попытку преобразования результата, который вернула формула, к типу данных колонки. Если преобразование невозможно — в ячейку с неприводимым типом записывается NULL, и система все равно корректно сохраняет колонку.
Пример: расчетная колонка ниже показывает уровень урбанизации муниципальных образований РФ. Если городское население преобладает, возвращается числовое значение уровня урбанизации, вычисляемое по формуле, если нет - строковое "Сельская местность". При этом тип данных колонки - "Число".
|
Как видно из предпросмотра расчета, вместо строковых значений в числовой колонке отображаются пустые ячейки. Для того, чтобы отображался текст "Сельская местность", необходимо после сохранения расчетной колонки (кнопка "Создать") перейти в ее настройки и в поле "Значение вместо Null" ввести "Сельская местность".
|
| Для расчетной колонки в настройках колонки поле "Тип данных" недоступно для редактирования. Тип данных можно задать только на странице настройки расчетной колонки. |
Переменные создаются из колонок датасета и позволяют обращаться к значениям в колонке. Так, через переменную District из колонки "Федеральный округ" для каждой строки расчетной колонки будет получено значение из соответствующей строки колонки "Федеральный округ".
|
Чтобы создать переменную, зажмите и перетащите мышью колонку датасета из блока "Датасет" в блок "Переменные". После перетаскивания блок "Переменные" автоматически переключается в режим редактирования. В режиме редактирования вы можете задать имя переменной, следуя указанным в подсказке ограничениям, а также метод агрегации данных.
После настройки блока "Переменные" нужно нажать на кнопку "Сохранить" в правом верхнем углу блока, тогда станет активным блок "Формула", а в правом верхнем углу блока "Переменные" появится кнопка "Редактировать", по нажатию на которую можно снова вносить изменения в блок:
|
При нажатии на кнопку "Отменить" в блоке "Переменные" все внесенные изменения отменяются.
Чтобы удалить настроенную переменную, кликните для соответствующей переменной кнопку
.
| Обратите внимание, что формула расчетной колонки позволяет также объявлять переменные дополнительно к тем, которые созданы из колонок датасета. Идентификаторы объявляемых переменных не должны совпадать с идентификаторами переменных, заданных в блоке "Переменные". |
Блок "Формула" предназначен для написания алгоритма расчета на языке RPython. Ключевое слово return используется для передачи значения в расчетную колонку.
Чтобы получить результат расчета, напишите алгоритм и кликните в блоке кнопку "Рассчитать".
|
—
|
В следующем примере используются дополнительные переменные, объявленные в блоке.
|
По клику кнопки "Рассчитать" в блоке превью отображается расчетная колонка с результатом расчета, а также колонки, которые вынесены в блок "Переменные", независимо от того, используются ли они в алгоритме расчета. Это может быть использовано для удобства предпросмотра.
|
Сообщения об ошибках в настройке расчетной колонки или при сохранении отображаются во всплывающем блоке. Блок отображается на странице до его закрытия.
|
Исключение составляет ошибка приведения типа данных, возвращаемых формулой, к типу данных расчетной колонки. Ошибка при этом не отображается, а система следует правилам обработки неприводимых типов данных.
Параметр управляет записью результата расчета в датасет.
Когда параметр включен, результат расчета записывается в датасет и такая расчетная колонка:
Когда параметр выключен, результат расчета НЕ записывается в датасет, а запрашивается во время обращения к данным датасета и такая расчетная колонка:
Для расчетной колонки, сохраненной с включенным параметром, на странице настройки датасета в блоке колонок, отображается пиктограмма
. Для расчетной колонки с выключенным параметром – пиктограмма
.
|
Применение агрегации перед расчетом позволяет рассчитывать значения для любого уровня детализации. Без применения агрегации расчет выполняется построчно.
Чтобы расчетная колонка применяла агрегацию перед расчетом, требуется совместное выполнение условий:
Агрегация перед расчетом НЕ применяется в любом плоском представлении данных:
Для разных типов данных доступны разные методы агрегации.
Пусть есть набор данных:
| Колонка 1 | Колонка 2 | Колонка 3 | Значение 1 | Значение 2 |
|---|---|---|---|---|
| А | Б | а | 10 | 2 |
| А | Б | б | 20 | 2 |
| А | В | в | 30 | 2 |
| А | В | г | 40 | 2 |
| А | В | д | 50 | 2 |
—
Создадим расчетную колонку с формулой "Значение 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" и 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 |
—
|
—
Сравнение колонок на виджете:
—
|
—
|
—
|
—
Пример с методом агрегации 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 |
—
|
—
Сравнение колонок на виджете:
—
|
—
|
—
|
—
Создадим на том же наборе данных расчетную колонку с формулой "(Значение 2) if (Колонка 1) == "А" else 0" с записью в датасет. Без применения агрегации перед расчетом результат расчета выполняется построчно и записывается в датасет:
| Колонка 1 | Значение 2 | Результат расчета (return (Значение 2) if (Колонка 1) == "А" else 0) |
|---|---|---|
| А | 2 | 2 |
| А | 2 | 2 |
| А | 2 | 2 |
| А | 2 | 2 |
| А | 2 | 2 |
—
Детализация по такой колонке использует агрегацию уже рассчитанных значений. Пример с методом агрегации 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":
|
При удалении колонки датасета, используемой в расчетной колонке, появляется стандартное модальное окно для подтверждения удаления. Информация о том, что колонка используется в расчетных колонках, не выводится.
Для подтверждения удаления нужно нажать кнопку "Удалить", для отмены - "Отменить".