大数据报表——交叉透视表
公司最近打算自研一个报表平台,基于低代码开发思想, 业务人员只需要通过简单的拖拽方式,即可生成需要的报表。整体架构如下:
通过 kettle 来将线上业务数据同步到大数据平台,presto 来实现跨数据源查询功能, 报表可视化平台提供一些报表组件(图表、表格)来供业务人员使用,业务人员拖拽并进行数据绑定后,即可实时进行数据报表的渲染。
我这边主要可视化报表数据接口, 简单的折线图、柱状图、柱线混合、简单图表等都比较简单,在开发交叉透视表的时候走了一些弯路,但好在最后及时回正,现将思路整理如下:
交叉透视表数据结构:
{
"success": true,
"data": {
"data": {
"superHeaders": [
[
{
"colspan": 2
},
{
"colspan": 2,
"name": "Apple"
},
{
"colspan": 4,
"name": "Huawei"
}
]
],
"columns": [
{
"name": "area",
"id": "area"
},
{
"name": "province",
"id": "province"
},
{
"id": "SUM(money)@0",
"name": "iphoneX"
},
{
"id": "SUM(money)@1",
"name": "macbook pro"
},
{
"id": "SUM(money)@2",
"name": "Huawei P40"
},
{
"id": "SUM(money)@3",
"name": "Huawei P50"
},
{
"id": "SUM(money)@4",
"name": "iphoneX"
},
{
"id": "SUM(money)@5",
"name": "荣耀x"
}
],
"fixRow": 2,
"combineNum": 1,
"rows": [
{
"area": "华东",
"province": "上海",
"SUM(money)@0": "-",
"SUM(money)@1": "15000",
"SUM(money)@2": "-",
"SUM(money)@3": "223000",
"SUM(money)@4": "-",
"SUM(money)@5": "-"
},
{
"area": "华东",
"province": "吉林",
"SUM(money)@0": "-",
"SUM(money)@1": "-",
"SUM(money)@2": "3000",
"SUM(money)@3": "-",
"SUM(money)@4": "-",
"SUM(money)@5": "-"
},
{
"area": "华东",
"province": "山东",
"SUM(money)@0": "-",
"SUM(money)@1": "-",
"SUM(money)@2": "4000",
"SUM(money)@3": "-",
"SUM(money)@4": "-",
"SUM(money)@5": "-"
},
{
"area": "华东",
"province": "广东",
"SUM(money)@0": "-",
"SUM(money)@1": "-",
"SUM(money)@2": "-",
"SUM(money)@3": "-",
"SUM(money)@4": "-",
"SUM(money)@5": "10000"
},
{
"area": "华东",
"province": "江苏",
"SUM(money)@0": "-",
"SUM(money)@1": "-",
"SUM(money)@2": "-",
"SUM(money)@3": "5",
"SUM(money)@4": "-",
"SUM(money)@5": "-"
},
{
"area": "华东",
"province": "江西",
"SUM(money)@0": "-",
"SUM(money)@1": "-",
"SUM(money)@2": "-",
"SUM(money)@3": "-",
"SUM(money)@4": "-",
"SUM(money)@5": "10000"
},
{
"area": "华东",
"province": "河北",
"SUM(money)@0": "-",
"SUM(money)@1": "-",
"SUM(money)@2": "-",
"SUM(money)@3": "-",
"SUM(money)@4": "-",
"SUM(money)@5": "7500"
},
{
"area": "华东",
"province": "河南",
"SUM(money)@0": "-",
"SUM(money)@1": "-",
"SUM(money)@2": "-",
"SUM(money)@3": "-",
"SUM(money)@4": "-",
"SUM(money)@5": "11000"
},
{
"area": "华东",
"province": "湖南",
"SUM(money)@0": "-",
"SUM(money)@1": "-",
"SUM(money)@2": "-",
"SUM(money)@3": "-",
"SUM(money)@4": "8400",
"SUM(money)@5": "1800"
},
{
"area": "华东",
"province": "黑龙江",
"SUM(money)@0": "-",
"SUM(money)@1": "-",
"SUM(money)@2": "4400",
"SUM(money)@3": "-",
"SUM(money)@4": "-",
"SUM(money)@5": "-"
},
{
"area": "华中",
"province": "安徽",
"SUM(money)@0": "5000",
"SUM(money)@1": "-",
"SUM(money)@2": "-",
"SUM(money)@3": "-",
"SUM(money)@4": "-",
"SUM(money)@5": "-"
},
{
"area": "华中",
"province": "湖北",
"SUM(money)@0": "-",
"SUM(money)@1": "-",
"SUM(money)@2": "4600",
"SUM(money)@3": "-",
"SUM(money)@4": "-",
"SUM(money)@5": "-"
},
{
"area": "华北",
"province": "山西",
"SUM(money)@0": "-",
"SUM(money)@1": "-",
"SUM(money)@2": "-",
"SUM(money)@3": "75000",
"SUM(money)@4": "-",
"SUM(money)@5": "-"
}
]
},
"code": 1,
"msg": "成功"
}
通过结果来反向推:
传参:行列、指标
交叉透视表数据结果就有三部分组成: 超级表头(superHeaders), 列(columns),数据行(rows)
原创不易,如果觉得有用,请随手 分享、在看~