Синтаксис формул
Вычисляемые выражения в Yandex DataLens имеют синтаксис, похожий на SQL.
Простые выражения могут быть описаны с помощью обычных арифметических действий:
([Sales] - [Profit]) / 10
[Date] - #2019-01-24#
Более сложные выражения используют множество функций для реализации различных вычислений, агрегаций и конвертаций данных из одного типа в другой:
CONCAT(SUM([Category Sales]) / [Total Sales], ' %')
DATETRUNC([datetime], 'month')
Поля датасета в вычислениях
Синтаксис обращения к полям датасета аналогичен Transact-SQL, но в случае Yandex DataLens требуется заключать имя поля в квадратные скобки ([]
):
[Имя поля]
Константы
Кроме полей, операторов и функций, в выражениях могут участвовать константы разных типов данных:
- целое число:
23
,-4325653
; - дробное число:
0.0234
,-1.0
; - дата:
#2020-01-01#
; - дата и время:
#2020-01-01 11:15:00#
; - строка:
"Строка"
; - логический:
TRUE
,FALSE
; - геоточка:
GEOPOINT("[55.7912,37.6872]")
.
Операторы
В выражениях доступны операторы:
-
Арифметические:
+
,-
,*
,/
.([Sales per Order] * [OrderCount]) - [Profit]
([Profit] / [Cost Price]) * 100
[City] + " " + "city"
Операторы сложения (+), вычитания (-) и умножения (*) имеют различное поведение в зависимости от типа аргументов.
-
Возведение в степень:
^
.[Mass] * [Speed] ^ 2
-
Остаток от деления:
%
.[Sales] % 10 + [Cost Price] % 10
-
Логические:
AND
,OR
,NOT
,IN
,LIKE
,IS TRUE
,IS FALSE
,BETWEEN
. -
Сравнения:
=
,!=
,<
,<=
,>
,>=
.Операторы сравнения позволяют создавать логические цепочки:
1 > x > -4 > y != 8
Полное описание всех операторов.
Форматирование формул
Любая формула может быть записана в одну строку или в несколько строк:
CONCAT(
SUM([Category Sales]) / [Total Sales],
' %'
)
Комментарии
Для добавления пояснений или для игнорирования частей формул используются комментарии:
-
Однострочный комментарий.
-- Это однострочный комментарий
-
Блоковый комментарий.
/* Это блоковый комментарий */
Логические операции
Для ветвления вычислений в выражениях используются логические функции:
-
CASE
.CASE [ProductID] WHEN 1 THEN "Bananas" WHEN 2 THEN "Apples" WHEN 3 THEN "Pears" ELSE "Other" END
CASE( [Color], "R", "Red", "G", "Green", "B", "Blue", "Not RGB" )
Полное описание логической функции CASE.
-
IF
.IF([MassIndex] BETWEEN 18.5 AND 25, "Normally", "Not normal")
IF [Year] % 400 = 0 OR ([Year] % 4 = 0 AND [Year] % 100 != 0) THEN "Leap year" ELSE "Ordinary year" END
IF [City] = "Moscow" THEN "This is the Capital" ELSEIF [City] = "St. Petersburg" THEN "This is the northern Capital" ELSE "Other city" END
Полное описание логической функции IF.
-
IFNULL
,ISNULL
,ZN
.IFNULL([Cost Price], 10) * [OrderCount]
Полное описание логической функции IFNULL.
IF(ISNULL([Product Name]) = TRUE, "Unnamed", [Product Name] + " " + [ProductID])
Полное описание логической функции ISNULL.
ZN([Total Sales]) - ZN([Total Cost])
Полное описание логической функции ZN.
Строки
Для обработки текстовых данных используются строковые функции:
CONCAT([Total Sales], "$")
IF(CONTAINS([Product Name], "RU"), [Product Cost] + " " + "RUB", [Product Cost] + " " + "USD")
REPLACE([OrderID], "2020", [Month])
IF(STARTSWITH([Region Name], "RU_"), SPLIT([Region Name], "_", 2), [Region Name])
Строки могут быть заданы с помощью одиночных или двойных кавычек. При этом один вид кавычек может использоваться внутри другого:
FIND([Product Name], 'plus')
CONCAT('"', [Product Name], '"')
В формулах можно выполнять различные преобразования строковых данных с использованием специальных символов:
REPLACE([ShopAddress], "\n", " ")
"File path" + " = " + "\\" + [Folder] + '\\' + [Filename]
Примечание
Специальные символы \n
, \t
, \r
не влияют на отображение исходных данных.
Преобразование типов
Значения выражений могут быть переведены из одного типа в другой:
FLOAT([StringWithNumbers])
DATETIME(STR([Order Date]) + "-" + STR([Order Time]))
GEOPOINT([Latitude],[Longitude])
Полное описание функций преобразования типов.
Агрегирование
Для вычисления результирующих значений используются агрегатные функции:
AVG([Check Total]) * COUNTD([CustomerID])
SUM_IF([Sales], [Category] = "Fruits")
IF
MIN[Date] = #2020-01-01#
THEN SUM[Sales] * 1.1
ELSE SUM[Sales] * 1.2
END
Оконные функции позволяют агрегировать значения из группы строк, не объединяя сами эти строки в одну, что отличает их от агрегатных. Также оконные функции позволяют рассчитывать значения для одной строки в контексте значений из других строк.
SUM([Sales] WITHIN [PaymentType]) / SUM([Sales] TOTAL)
MSUM([Sales per Order], 1 WITHIN [ProductID] ORDER BY [Price])
RANK_DENSE(AVG([Price]), "desc" WITHIN [ShopID] BEFORE FILTER BY [PaymentType])
Оконные функции поддерживают группировку и сортировку записей, а также опцию BEFORE FILTER BY.
Разметка текста
Для создания размеченного текста используются функции разметки:
MARKUP(BOLD("This"), " ", ITALIC("is"), " ", URL("https://example.com/", [LinkName]))
Чтобы использовать числовые константы при разметке URL-адреса, необходимо их привести к типу Строка
:
URL("https://example.com/?value=" + STR([Value]), [Value])