Все avg
меры считаются Не аддитивные , и поэтому большинство сверток, которые работают для Аддитивные , не выбираются для запросов, содержащих avg
меры: https://cube.dev/docs/pre-aggregations#rollup -rollup-selection-rules .
Однако для средних показателей есть хитрость, позволяющая реклассифицировать Неаддитивные меры до Leaf Measure Additive . Например, вы можете переписать
cube(`Cube`, {
// ...
measures: {
averageA: {
// ...
type: `avg`
},
averageB: {
// ...
type: `avg`
},
// ...
},
// ...
preAggregations: {
averagesRollup: {
type: `rollup`
measureReferences: [averageA, averageB, averageC],
timeDimensionReference: timestamp,
granularity: `day`
}
}
})
в:
cube(`Cube`, {
// ...
measures: {
A: {
// ...
},
B: {
// ...
},
// ...
count: {
type: `count`
},
averageA: {
sql: `${A} / ${count}`,
type: `number`
},
averageB: {
sql: `${B} / ${count}`,
type: `number`
},
// ...
},
// ...
preAggregations: {
averagesRollup: {
type: `rollup`
measureReferences: [A, B, C, count],
timeDimensionReference: timestamp,
granularity: `day`
}
}
})
В этом случае Cube. js знает, что меры averageA
, averageB
и averageC
составлены из A
, B
, C
и count
и будет использовать averagesRollup
, как в запросе Leaf Measure Additive и возвращать результаты, даже если гранулярность измерений времени не установлена.