На этом сайте уже разбиралась типовая и, что скрывать, одна из моих любимых задач: вычисление показателя (евро)финансового года и квартала с записью в формате FYxxQt
, где xx
- последние 2 цифры года, t
- порядковый номер квартала (например FY25Q1, FY26Q3 и т.п.). В этой небольшой статье я покажу код для SQL применительно к Trino, который является основой BI Конструктора CRM Битрикс24. Вычислять будем по записи таблицы пользовательских полей сделок crm_deal_uf
, допустим это будет значение из пользовательского поля UF_111
. И конечно же, это не единственное решение, я привожу один из действенных вариантов.
Нам важно это корректно встроить в общую инструкцию SQL запроса для нашего датасета. Кварталы начинают свой отсчет с 1 апреля каждого года (Q1). Поэтому полная конструкция SQL будет такая:
-- Финансовый квартал FYxxQt по дате
CONCAT(
'FY',
CAST(
CASE
WHEN month(try_cast(crm_deal_uf.UF_CRM_111 AS date)) >= 4 THEN year(try_cast(crm_deal_uf.UF_CRM_111 AS date)) - 2000
ELSE year(try_cast(crm_deal_uf.UF_CRM_111 AS date)) - 2000 - 1
END AS VARCHAR
),
'Q',
CAST(
CASE
WHEN month(try_cast(crm_deal_uf.UF_CRM_111 AS date)) BETWEEN 4 AND 6 THEN 1
WHEN month(try_cast(crm_deal_uf.UF_CRM_111 AS date)) BETWEEN 7 AND 9 THEN 2
WHEN month(try_cast(crm_deal_uf.UF_CRM_111 AS date)) BETWEEN 10 AND 12 THEN 3
ELSE 4
END AS VARCHAR
)
) AS "FYQ"
Советую в лучших традициях документации Trino SQL использовать конструкцию try_cast(... AS date)
для безопасного преобразования поля с датой. Удачного кодинга!