
[英]Cube.js QueryBuilder does not rerender when new timeDimensions provided
[英]Does Cube.js support preAggregations when using Context Variables inside the SQL definition of a cube?
根据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`
}
}
});
我能定义这样的 preAggregation 吗?
preAggregations: {
date: {
type: `rollup`,
measureReferences: [someMeasure],
dimensionReferences: [someDimension],
timeDimensionReference: date,
granularity: `month`
}
}
我可以在没有date
维度过滤器的情况下执行查询吗? (所以sql
将以SELECT * FROM orders WHERE;
结尾)?
总结一下:有没有一种方法可以动态地将过滤器注入多维数据集的sql
定义,但不是在查询时而是在模式编译时?
我问这个是因为我们目前正在使用从我们的 API 检索到的信息扩展一些多维数据集,并且我们正在从这个多维数据集中覆盖segment
字段,但是由于性能问题,我们更愿意覆盖多维数据集的sql
字段(从一开始就过滤不必要的数据) )。
注意:我们使用asyncModule
来执行对 API 的查询。 我们还需要构建不同的多维数据集(为我们所有的客户)引用一个公用表,但使用将根据客户而改变的动态 SQL。
我们想要的输出应该是(对于来自我们 API 的 Orders 表和F1
, ..., Fn
客户端过滤器):
扩展基本Orders
多维数据集的 N 个多维数据集: OrdersC1
、 OrdersC2
、 ...、 OrdersCn
。
每个OrdersCi
多维数据集都带有基本Orders
sql 的修改版本,包含其Fi
过滤器。
每个OrdersCi
多维数据集具有相同的dimensions
、 measures
和preAggregations
定义,继承自基本Orders
多维数据集。
我们设法实现了我之前所说的所有内容,但是我们没有修改sql
字段,而是覆盖了segments
字段。
一般来说,只有分区汇总才能通过FILTER_PARAMS
来获取分区时间维度。 所有其他预聚合都不允许传递上下文变量。 您可以使用两种方法在多租户环境中利用预聚合。
OrdersC1
、 OrdersC2
等)覆盖sql
。在这种情况下,基本Orders
多维数据集中定义的所有预聚合都将被继承。 每个客户多维数据集都有自己的一组预聚合。 这意味着如果有N
客户和M
预聚合,那么应该构建N * M
预聚合表,这在某些情况下可能会很昂贵。cube(`Orders`, {
sql: `SELECT * FROM orders`,
preAggregations: {
date: {
type: `rollup`,
measureReferences: [someMeasure],
dimensionReferences: [someDimension],
timeDimensionReference: date,
granularity: `month`
},
// ...
}
});
cube(`OrdersC1`, {
extends: Orders,
sql: `SELECT * FROM orders WHERE customer_id = 'C1'`,
});
cube(`Orders`, {
sql: `SELECT * FROM orders`,
// ...
dimensions: {
// ...
customerId: {
sql: `customer_id`,
type: `string`
}
},
preAggregations: {
date: {
type: `rollup`,
measureReferences: [someMeasure],
dimensionReferences: [customerId, someDimension],
timeDimensionReference: date,
granularity: `month`
},
// ...
}
});
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.