Калькулятор является одним из самых популярных компонентов платформы Loginom. Рассмотрим примеры практического использования функций Дата/Время, которые реализованы в нем.
Может показаться, что круг задач, где требуются манипуляции с датой и временем, не так велик и не стоит детального изучения. Помимо этого, платформа Loginom предоставляет пользователю специальный компонент Дата и время, при помощи которого можно из поля извлечь год, месяц и другие его составные части.
Однако работа, которая затрагивает тип данных дата/время, не так тривиальна, как может показаться на первый взгляд. Компонент Дата и время полезен для решения простейших задач или для облегчения представления данных в виде отдельных полей, а при работе с функциями Дата/Время в Калькуляторе появляется возможность строить произвольные формулы.
Рассмотрим подробнее логику функций на конкретных примерах.
Функции предназначены для возвращения значения, измененного на заданное количество интервалов.
Функция, выполняющая операцию, например, с годами, имеет вид AddYear(Дата, Количество), но помимо временного промежутка Year могут использоваться: Quarter, Month, Week, Day, Hour, Minute, Second, Millisecond, — что позволяет производить вычисления с кварталами, месяцами, неделями, днями, часами, минутами, секундами и миллисекундами соответственно.
Параметр Количество может быть отрицательным. В таком случае при использовании, например, AddDay функция вернет дату, предшествующую указанной на заданное количество дней.
При работе с датами, которые не содержат информацию о времени, оно автоматически проставляется как 00:00:00.
Пример. Функция может быть использована для определения даты окончания спринта. Так, для спринта длительностью 3 недели нужно применить функцию AddWeek(Дата, 3), где первый аргумент — дата начала, второй — количество недель в спринте. В результате будет рассчитан день завершения спринта.
Функции позволяют вернуть значение аргумента, которое переведено из типа данных дата/время в строковый:
Имеется функция, производящая обратную операцию, т.е. конвертирующая строку, содержащую дату, в тип данных дата/время: StrToDate(Аргумент [, Формат]).
Функция UnixToDateTime(Дата[, ИсходнаяДатаВ_UTC=True]) конвертирует строку в формате Unix Time в тип данных дата/время. А ISO8601ToDate(Аргумент) преобразует строку, содержащую дату/время по стандарту ISO8601 в дата/время, принятое в Loginom. Если в аргументе указано смещение времени относительно UTC, то значение приводится к текущей временной зоне, иначе дата/время остается без изменений.
Пример. Форматирование даты и времени используется для преобразования в универсальный текстовый вид, пригодный для корректного отображения в документации. Обратная функция позволяет привести строковые данные к типу дата/время для загрузки в базу данных или выполнения математических операций.
Для извлечения из поля значения года используется функция Year(Дата). Имеются аналогичные функции и для других интервалов: Month, Week, Day, — соответственно для месяца, недели, дня.
Для возвращения значения часов по заданному времени используется функция Hour(ДатаВремя), а также для возвращения минут, секунд и миллисекунд — Minute, Second, Millisecond соответственно.
Пример. Функция Month(Дата) может быть использована для выведения промежуточного параметра при анализе продаж по месяцам.
Функция DayOfWeek(Дата) возвращает порядковый номер дня недели в соответствие со стандартом ISO8601 по заданной дате, представленный целым числом от 1 до 7. Первый день соответствует понедельнику.
Пример. При помощи функции DayOfWeek(Date) и последующей агрегации можно рассчитать количество отработанных сотрудником суббот и воскресений для корректного определения заработной платы.
Эти функции возвращают целое число, а именно — полное количество интервалов заданного типа между выбранными датами/временем. Это значит, что будет выведено число промежутков, которые на момент заданной даты/времени уже завершились.
Функция, выполняющая операцию с годами, имеет вид YearsBetween(Дата1, Дата2), но помимо временного промежутка Year в функции могут использоваться: Months, Days, Hours, Minutes, Seconds, Milliseconds, — что позволяет производить вычисления с месяцами, днями, часами, минутами, секундами и миллисекундами соответственно.
Пример. Функция MonthsBetween(Дата1, Дата2) может быть применена в процессе проведения когортного анализа для оценки эффективности рекламы. Результат будет представлен целым числом месяцев, прошедших за выбранный временной промежуток.
Т.к. поле типа дата/время хранится как вещественное число, то в Калькуляторе рассчитать разницу между временными отсчетами можно также без использования встроенных функций, например:
Однако подобные формулы усложняют понимание человеком вычислений в случае, если комментарии к расчетам отсутствуют. Для стороннего пользователя не очевидно, к примеру, что число «86 400» является отображением суток, а «28 800» — восьмичасовой рабочий день, переведенный для какой-либо цели из часов в секунды.
Также можно приблизительно определить разницу между датами в месяцах и годах по формулам:
Но эти формулы, в отличие от встроенных в Loginom функций, дают примерную оценку, т.к. месяца могут содержать 28-31 день, а високосные года имеют большую продолжительность, чем не високосные.
В Loginom имеются функции, позволяющие формировать поле типа дата/время из его составных частей, например, номера года, месяца и дня. Т.е. произвести операцию обратную выделению временных интервалов:
Обе функции не имеют аргументов и возвращают текущую дату в случае применения Today() и дату/время в случае Now().
Пример. Используя функция Today(), можно рассчитать, сколько дней прошло от момента, когда операция была внесена в базу данных, до текущего дня.
Функции возвращают дату начала/конца указанного временного промежутка в соответствии со стандартом ISO 8601.
Для возвращения начала года, квартала, месяца или недели функции имеют вид StartOfTheYear(Дата), где помимо временного промежутка Year в функции могут использоваться: Quarter, Month, Week соответственно с выбранным возвращаемым параметром.
Для возвращения конца года, квартала, месяца или недели функции имеют вид EndOfTheYear(Дата), где помимо временного промежутка Year могут использоваться соответственно: Quarter, Month, Week.
Пример. Функции Start и End могут быть применены в задачах прогнозирования. Так, функция StartOfTheWeek(Date) вернет столбец новых значений, указывающих на дату начала недели для дней из исходного столбца Date. Эту информацию можно использовать для анализа продаж по неделям.
Для решения простых задач, связанных с выделением временных интервалов из полей дата/время, можно воспользоваться специализированным компонентом Loginom. Для выполнения более сложных операций — функциями Калькулятора. И хотя многое можно вычислить при помощи арифметических операций и без использования функций, их применение упрощает понимание логики расчетов — функции однотипные, компактные, а в их названиях отображается суть производимых вычислений.
Аналитическая платформа предоставляет реализацию практически всех возможных операций для работы с датой/временем без использования языков программирования. Те же вопросы, для решения которых не предусмотрена самостоятельная функция, могут быть реализованы посредством комбинирования существующих.
Другие материалы по теме:
Работа с переменными в Loginom
Работа с компонентом «Дата и Время»