Это эндпойнт 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;
}