Использование LPE в кубе
В кубе можно использовать выражение${filters}
. Оно используется для вставки пользовательских фильтров из управляющего дэша или onClickDataPoint
в тело запроса.
Чтобы перечисленные ниже функции отрабатывали в кубе, нужно в конфиг куба вставить выражение is_template: 1
.
Функция filters()
Синтаксис:
<...>
where ${filters()}
Это выражение подставляет в куб условия, пришедшие из запроса дэша.
Запрос дэша в Luxms BI представляет собой JSON объект следующего формата:
{
"with":"pokaz22.pokaz22",
"columns":["test","name","sum(v_main):smv"],
"filters":{
"test":["=","Доктора наук+Профессор"],
"name":["=","Женщины","Мужчины"]
}
}
В поле columns
перечисляются measures и dimensions, запрашиваемые дэшем. Поле filters
содержит объект, где ключами являются наименования dimensions, а их значениями - массивы. В этих массивах первым элементом идёт знак сравнения, а последующими - перечень значений.
На основе приведённого выше JSON объекта выражение ${filters()}
составит следующий запрос:
SELECT
sum(v_main) as smv,
degree as test,
name as name
FROM
(
<куб>
WHERE degree = 'Доктора наук+Профессор'
AND name in ('Женщины','Мужчины')
) as pokaz22
Обратите внимание, что в случае, когда в фильтрах размерности выбрано несколько значений, автоматически используется условие in
.
Вы можете увидеть получившийся запрос, добавив параметр ?meta
к ссылке запроса дэша, скопированного в виде cURL.
Параметры функции filters()
В качестве параметров этой функции могут перечисляться названия одного или нескольких полей.
Необходимо использовать названия полей из куба, а не из источника
Синтаксис:
<запрос>
WHERE ${filters([column1, column2, ...])}
Перечисление полей определяет, какие именно фильтры передаются в куб. Написав ${filters(name, test)}
, мы получим результат, аналогичный тому, что описан выше.
Приведём пример с JSON объектом, описанным выше:
Фрагмент куба:
<...>
WHERE ${filters(name)}
Запрос:
SELECT
sum(v_main) as smv,
degree as test,
name as name
FROM
(
<куб>
WHERE name in ('Женщины','Мужчины')
) as pokaz22
Функция except()
Синтаксис:
<запрос>
WHERE ${filters(except(<column1> [, column2, ...]))}
Данная функция в качестве параметров принимает одно или несколько ID полей в кубе. Перечисленные поля исключаются из перечня подставляемых в запрос.
То есть, если в случае испольования функции filters()
мы рассчитываем, что в запрос подставятся только выбранные значения, то функция except()
исключит из запроса все перечисленные в ней значения.
Указание алиаса таблицы
В случае, если в SQL запросе то или иное поле встречается в нескольких таблицах, то в функции filters() может потребоваться указать алиас конкретной таблицы. Или, может быть название размерности, по которой выполняется фильтрация, не совпадает с именем поля в таблице. Указать требуемое название таблицы и поля можно в следующей нотации:
${filters("column1":("table1"."fieldname1"))}
Или, если требуется указать и имя схемы, то следующим образом:
${filters("column1":("public"."table1"."fieldname1"))}