Согласно документации Cube. js , можно определить кубы, используя что-то, называемое переменными контекста, которое позволяет вводить фильтры (такие как электронная почта конкретного пользователя) при запросе этого куба. Я еще не пробовал, но я хочу знать, совместима ли эта функция с преагрегациями, а также обрабатывает ли пустые случаи фильтра.
Например, если я определю этот куб (такой же, как в примере из документов) :
cube(`OrderFacts`, {
sql: `SELECT * FROM orders WHERE ${FILTER_PARAMS.OrderFacts.date.filter('date')}`,
measures: {
count: {
type: `count`
}
},
dimensions: {
date: {
sql: `date`,
type: `time`
}
}
});
Смогу ли я определить предварительную агрегацию, такую как эта?
preAggregations: {
date: {
type: `rollup`,
measureReferences: [someMeasure],
dimensionReferences: [someDimension],
timeDimensionReference: date,
granularity: `month`
}
}
и могу ли я выполнять запросы без date
фильтра измерений? (так что sql
будет заканчиваться как SELECT * FROM orders WHERE;
)?
Подводя итог: есть ли способ динамического внедрения фильтров в определение sql
куба, но не во время запроса и вместо этого время компиляции схемы ?
Я спрашиваю об этом, потому что в настоящее время мы расширяем некоторые кубы информацией, полученной из нашего API, и мы перезаписывали поле segment
из этих кубов, но из-за из-за проблем с производительностью мы бы предпочли перезаписать поле sql
куба (чтобы отфильтровать ненужные данные с самого начала).
ПРИМЕЧАНИЕ. Мы используем asyncModule
для выполнения запросов к нашему API. Нам также нужно построить разные кубы (для всех наших клиентов), ссылающиеся на общую таблицу, но с динамикой c SQL, которая будет меняться в зависимости от клиента.
Наш желаемый результат должен быть (для таблицы Orders и F1
, ..., Fn
клиентских фильтров из нашего API):
N кубов, расширяющих базовый Orders
куб: OrdersC1
, OrdersC2
, ..., OrdersCn
.
Каждый OrdersCi
куб с измененной версией базы Orders
sql, содержащей фильтр Fi
.
Каждый OrdersCi
куб с теми же определениями dimensions
, measures
и preAggregations
, унаследованными от базового куба Orders
.
Нам удалось реализовать все, что я говорил ранее, но вместо изменения sql
поле, мы перезаписали segments
поле.