明细表
# 明细表
与透视表/交叉表不同之处在于, 交叉表有行表头与列表头两个表头, 如果把两个表头看做一个二维坐标系,则通过两个表头可以定位唯一一个(汇总)值,在明细表中用同样的表头条件查询数据则可以查询出多条记录, 因此在交叉表中就要聚合(sum/avg/min/max等)操作,明细表则不需要聚合操作;
什么场景使用明细表
- 有用户可能会有疑问了,“交叉表如果把所有的维度都用上展示效果和明细表输出一样”;
- 结果一样,数据处理逻辑完全不同,查询性能差异大!
- 聚合查询是根据用户拖拽的维度,对数据集生成聚合查询语句,并通过数据源的聚合计算返回聚合数据。如果仅将交叉表用于显示明细数据,就会在原本不需要聚合的数据上,对所有维度强行执行一次聚合操作。若目标结果集较大,数据库在进行聚合和去重时将消耗大量的内存和CPU资源,造成不必要的性能损耗,这将成为一个严重的问题。因此,很多不了解系统工作原理的用户常在此时抱怨性能问题。
如下图所示,明细表和交叉表在同时限定维度年
与性别(gender)
的情况下,明细表会返回大量没有经过聚合的重复数据,交叉表返回的则是对两个维度进行聚合之后的结果集。
# 明细表分页问题
- 明细表后台直接对数据集查询,默认返回前 2000 条数据,前端对 2000 条数据进行分页;
- 明细数据行数可在图表配置栏配置;
- 导出数据不做限制,最大支持50万行数据导出;
- 页面展示时建议用户可以通过维度条件过滤,添加数据筛选条件查询自己关心的明细数据;
# 明细表设置多级表头
明细表表头为静态表头,支持多级表头配置,相同父级的表头会自动调整顺序之后合并在一起,如下图所示
# 明细表行合并
如果您的数据集是已经经过汇总的结果数据,使用明细表的合并行操作,也可以实现类似交叉表的合并表头效果
注意
需要合并的维度单元格需要有排序配置
版本1.5.0之前明细表合并逻辑不考虑父格是否相同,只要当前格与同列上一格值一样则合并,这样会造成下面的合并错误
从版本1.5.0开始明细表合并逻辑需要满足左父格相同的前提条件;
# 合并单元格父格配置
此外,您还可以自定义父格列,如:下面的业务场景,母订单可以拆分成2个子订单,但是运费只有一笔需要合并,效果如下:
如果按照上面父格相同要求对比父格,则由于子订单不一致合并失败,为了解决该问题,可以修改配置
- 上级列配置指定,只要用户设定
运费列
的父格为主订单号
则只做用户指定列比较 - 禁止合并:
站点
列配置禁止合并则不会做合并处理
# 明细表单元格格式化
- 单元格格式化函数实例
/** 参数说明
colDef: 列定义: {
"index":0, "dimType":"column", "typeIndex":0,
"prop":"_0", "name":"gender", "alias":"性别", "label":"性别",
"sort":"desc", "formatter":null,
"align":"left", "width":"100",
"headers":["合并"]
},
value: 当前单元格值
row: 该行所有列 {
"gender": { "alias": "性别", "value": "M" },
"the_year": { "alias": "年", "value": "2016" },
...
}
**/
formatter = function(colDef, value, row) {
debugger // 也可以尝试在这里加入断点观察参数结构
let {label} = colDef;
if (label == '开销') {
let color = value > 2 ? 'green' : 'red';
return `<div style="fheight:100%;">
<span style="margin-right: 5px;color:${color}">
<i class="fa fa-circle"></i></span> ${value}
</div>`
} else {
return value;
}
}
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
# 明细表数据导出数据库
- 支持导出的数据库兼容 MySQL/Postgres/Clickhouse/SqlServer/Oracle/Doris
- 导入数据字段选择、字段类型、字段注释可配置
- 支持多次导入字段增加、字段减少数据合并
注意
如果导出目标数据库为Doris,因为Doris与MySql驱动和链接配置一样,但是建表语法和数据加载机制又有区别,所以需要在数据源中标记数据源为Doris,标记为Doris的数据源,后续数据导入到Doris会有相应优化处理