Перейти к основному содержимому

Использование 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"))}