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

2. LPE для measures

Введение

Для получения данных для визуализации сервер Luxms BI отправляет SQL запросы в источники данных, а полученный из источников результат перенаправляет на клиент Luxms BI. Данные для визуализации запрашиваются клиентской частью Luxms BI с помощью KOOB API. В частности, клиент передаёт на сервер Luxms BI имя куба, список столбцов, условия фильтрации. В настройках дэшлетов можно указать список вычисляемых столбцов и указать выражения LPE, которые будут преобразованы в соответствующий SQL диалект на сервере Luxms BI.

к сведению

В Power BI такой подход получения данных называется DirectQuery

Пример LPE для вычисляемого столбца в дэшлете:

measures: [
"(sum(sales_amount)+sum(price))/100:c",
"max(price):max_price",
],

В данном примере используется оператор :, который аналогичен SQL выражению AS и служит для именования столбца в ответе из СУБД. Таким образом, данные для первого столбца вернутся под именем c, а для второго столбца — под именем max_price.

осторожно

Если не использовать оператор : для вычисляемых столбцов, то имя столбца в ответе будет зависеть от версии и производителя СУБД, версии JDBC драйвера и т.д., и нельзя гарантировать, что это имя не изменится при обновлении компонентов.

Помимо алгебраических выражений можно также использовать условные конструкции:

measures: [
"if(price + vat > 558, 'a', 'b'):c",
"if(sum(price) < 0, sum(price), 0):c",
"if(avg(a)=1,0,null):d",
],

Такая конфигурация заполнит столбец таблицы значениями по условию. Можно использовать как числовые значения, так и строковые.

осторожно

Для корректной работы оба значения в выражении внутри if должны быть одного типа.

Ниже приведены другие примеры использования условных выражений в LPE конструкциях.

measures: [
"if(sum(a) != 0 and sum(b) != 0, sum(a)*100/sum(b), 0):d",
"countIf(quantity > 0 and quantity < 100):countif",
"if(avg(q)=[1,null,3],0,avg(q)):d"
],

Поддерживаемые источники данных

Список поддерживаемых СУБД:

  • Clickhouse
  • Greenplum
  • MS SQL
  • Oracle (версии выше 9)
  • PostgreSQL
  • SAP HANA
  • Teradata
  • Vertica

СУБД, которые не вошли в список (MySQL, Cassandra и т.д.), можно использовать в качестве источника данных для простых дэшлетов, но сложные визуализации, например, Pivot Table, не будут работать.