Обращение за данными с использованием Luxms BI API (/api/v3/koob/)

Это эндпойнт api, заточенный специально под работу с кубами, решает специальные задачи
Допустим, у вас есть куб с названием source1.cube1

/api/v3/koob/${koobID} 

Пример:
/api/v3/koob/source1.cube1

GET - запрос, который отдаст json конфиг указанного куба, но не данные.
поля id, name, title, config и полный перечень конфигураций существующих дименшнов, меж, с указанием доступных для них аггрегационных функций

/api/v3/koob/${koobID}.${dimensionID}

Пример:
/api/v3/koob/source1.cube1.OKVED

GET - запрос, который отдаст json конфиг указанного дименшна, а также поле values, где перечислены distinct значения указанного дименшна (идеален для ситуаций, когда например вам нужен полный перечень возможных опций для фильтра)

/api/v3/koob/data 

POST-запрос, который получает данные из куба.

body такого запроса это

{
  "with": "идентификатор куба, строка",
  "columns": "массив строк, которые есть или идентификаторы дименшнов, или аггрегационные функции над полями",
  "filters": "В общем виде объект с фильтрами на данные при запросе, аналогично тому, как это задается в конфиге дешлетов",
  "offset": "отступ от начала таблицы, число",
  "limit": "количество строк, число",
  "sort": "массив строк типа +id, -date, где + и - это ASC и DESC,а остальное - идентификаторы дименшнов",
  "options": "массив опций для управления иерархиями и блоками в БД типа \"Все\" ",
  "subtotals": "массив идентификаторов дименшнов, по которым будут считаться подытоги",
  "distinct": "массив идентификаторов дименшнов, по которым нужны distinct запросы, не имеет смысла, если есть хоть одна межа в запросе"
}

Использование фильтров

{
a: [‘=’,‘ДОБЫВАЮЩАЯ’,‘НАГНЕТАТЕЛЬНАЯ’],
b: [‘=’, 1, 100],
}
означает, что мы пишем условие WHERE в запросе для разных столбцов (а и b) как И, но внутри одного столбца как ИЛИ.
Указать И в рамках одного столбца (а или b) нельзя. Можно решить проблему след вот таким образом: указать особый ключ “двойные кавычки” с набором команд. Пример:
{
“”: [
“or”,
[“and”, [“=”, “max_example_dt”, “2020-12-31”], [“=”, “max_example_age”, “До 35”]],
[“and”, [“=”, “max_example_dt”,“2020-07-31”], [“=”, “max_example_age”,“Старше 50”]]
]
}
Читается это как “Выполнить логику того операнда, в результате которого вернется ненулевое число строк, где внутри операндов есть логика одновременности (“И”) для max_example_dt и max_example_age, но для каждого из дименшнов внутри работает логика ИЛИ”.

Условие для запроса вида:
WHERE data_operation BETWEEN “2022-01-01” AND “2022-12-24”
другой пример
WHERE salary BETWEEN “1000” AND “2000”
{
data_operation : [‘between’, “2022-01-01”, “2022-12-24”],
salary: [‘between’, 1000, 2000],
}

Можно использовать like, ilike. Проверку на NULL можно сделать прямой проверкой [‘!=’, null] или [‘=’,null], есть or, and и комбинации всех.

/api/v3/koob/count 

POST-запрос, который получает данные из куба, но только для того, чтобы узнать число результирующих строк. body тот же, что и выше
нужен, когда работаем с большими данными и компоненты строят только ту часть визуализации, которая определяется вьюпортом или иным контекстным блоком-контейнером, остальное догружается при интерактиве пользователя. Экономит количество запросов и увеличивает скорость ответов

Как выполнять вызовы api на JavaScript описано тут:
https://help.luxmsbi.com/-492

Можно воспользоваться внутренними React сервисами Luxms BI:

import {KoobDataService} from 'bi-internal/services';
const {koobDataRequest3} = KoobDataService;

koobDataRequest3("luxmsbi.mykoob", ["sex", "age", "sum(value): sum_val"], [], {"sex": ["!=", "Мужской"]}, {offset: 0, limit: 128, sort: ["+sex"], options: ['!MemberAll', '!ParallelHierarchyFilters']}, "текст комментария к запросу").then(data => {
// тут код для обработки ответа сервера
})

Интерфейс IKoobDataRequest3:

interface IKoobDataRequest3 {
  options?: string[];
  offset?: number;
  limit?: number;
  sort?: string[];
  subtotals?: string[];
  cancelToken?: CancelToken;
  schema_name?: string;
}