1 背景
在当前业务场景中,许多客户的数据规模已达到千万甚至亿级别的庞大体量。如此海量的数据在查询过程中,往往会因数据处理量过大而导致查询速度缓慢,严重影响业务效率与用户体验。
为解决这一问题,Smartbi 产品提供了预聚合表(直连) 的解决方案,通过配置预聚合表可显著提升大数据量下的查询性能。需要注意的是,该功能目前仅支持多维引擎的聚合表,SQL 引擎暂未适配。
1.1 前提条件
1、需要在系统运维/公共设置/高级系统选项设置:CONFIG_CENTER_SHOW_ENABLE=true。
2、在多维引擎中配置olap配置项:mondrian.rolap.aggregates.Use=true、mondrian.rolap.aggregates.Read=false。

2 示例说明
以产品内置的“订单模型”为例,如下图所示:

基于这个模型创建报表,如下图,为了更好的说明,加了很多维度进行查询),假设它的性能很慢,需要2-3分钟才能打开,现在我们要对其进行性能优化:
...
界面路径:在系统监控>配置中心:

选项说明:
选项 | 选项值 |
---|
Data IDdatamodel | 必填,datamodel(只能填写这个) |
GroupPreAggregations | 必填,PreAggregations(只能填写这个) |
配置类型 | Json, 一定是json |
配置说明 | 非必填 |
配置内容 | 需要遵循这个格式定义, 需要注意看下面对字段注释说明: [
{
"id": "1", // 随意,没用的可以随意填写
"dataSourceId": "DS.nnorthwind",
"schema": "",
"name": "agg_1_orderdetails", //名称要唯一
"modelId": "be0d8c420bc41401276ee5f3fb4788dc",--模型ID
"viewName": "orderdetails", --事实表名字
"define": {
"dimensions": [{
"dimension": "CategoryName", //维度名称
"column": "CategoryName" //对应聚合表的列名
}, {
"dimension": "ProductName",
"column": "ProductName"
}, {
"dimension": "ShipRegion",
"column": "ShipRegion"
}, {
"dimension": "ShipCity",
"column": "ShipCity"
}, {
"dimension": "viewId",
"column": "viewId"
}],
"measures": [ {
"measure": "$fact_count$", // 内置,这个写死的
"column": "fact_count",
"aggregator": "COUNT" //唯一计数、平均值不支持
}, {
"measure": "Quantity_m", //度量名称
"column": "Quantity", //对应预聚合对应的列
"aggregator": "Count" //聚合方式
}, {
"measure": "UnitPrice_m",
"column": "UnitPrice",
"aggregator": "SUM"
}, {
"measure": "Discount_m",
"column": "Discount",
"aggregator": "SUM"
}]
}
}
]
|
...