大数据报表——交叉透视表

大数据报表——交叉透视表,第1张

数据报表——交叉透视表

公司最近打算自研一个报表平台,基于低代码开发思想, 业务人员只需要通过简单的拖拽方式,即可生成需要的报表。整体架构如下: 

 通过 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)

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/5679274.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-17
下一篇 2022-12-17

发表评论

登录后才能评论

评论列表(0条)

保存