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, не будут работать.