资讯专栏INFORMATION COLUMN

前端报表数据处理【去重、行转列、交叉、聚合】

Richard_Gao / 3100人阅读

摘要:原始数据张三语文李四语文王五语文张三数学李四数学王五数学张三英语李四英语简单去重罗列输出语文语文语文数学数学数学英语英语聚合公式姓名科目成绩输出姓名科目成绩张三语文李四语文王五语文张三数学李四数学王五数学张三英语李四英语交叉聚合公式总分总成

原始数据
let data = {
    fields: ["name", "subject", "score"],
    data: [
        ["张三", "语文", 86],
        ["李四", "语文", 92],
        ["王五", "语文", 56],
        ["张三", "数学", 100],
        ["李四", "数学", 88],
        ["王五", "数学", 98],
        ["张三", "英语", 62],
        ["李四", "英语", 83]
    ]
}
1. 简单去重罗列
Report.format(data, [{ converge: "v" }, 2, 1])

输出

"score" "subject"
86 "语文"
92 "语文"
56 "语文"
100 "数学"
88 "数学"
98 "数学"
62 "英语"
83 "英语"
2. 聚合(公式)
Report.format(data, [{
    converge: "v",
    formula: "sum"
}, 0, 1, 2], {
    name: "姓名",
    subject: "科目",
    score: "成绩"
})

输出:

"姓名" "科目" "成绩"
"张三" "语文" 86
"李四" "语文" 92
"王五" "语文" 56
"张三" "数学" 100
"李四" "数学" 88
"王五" "数学" 98
"张三" "英语" 62
"李四" "英语" 83
"" "" 665
3. 交叉聚合(公式)
Report.format(data, [{
    field: 0,
    converge: "v",
    formula: {
        formula: "sum",
        label: "总分"
    }
}, {
    field: 1,
    converge: "v",
    formula: {
        formula: "sum",
        label: "总成绩"
    }
}, 2])

输出:

"name" "subject" "score"
"张三" "语文" 86
"" "数学" 100
"" "英语" 62
"" "总成绩" 248
"李四" "语文" 92
"" "数学" 88
"" "英语" 83
"" "总成绩" 263
"王五" "语文" 56
"" "数学" 98
"" "总成绩" 154
"总分" "" 665
4. 交叉聚合
Report.format(data, [{
    field: 0,
    converge: "v",
    formula: "avg"
}, {
    field: 1,
    converge: "h",
    formula: "sum"
}, 2])

输出:

"name" "语文" "数学" "英语" "sum"
"张三" 86 100 62 248
"李四" 92 88 83 263
"王五" 56 98 0 154
"avg" 78.00 95.33 48.33 221.67
5. 交叉聚合(忽略详细)
Report.format(data, [{
    field: 0,
    converge: "v",
    formula: "avg"
}, {
    field: 1,
    converge: "h",
    formula: {
        detail: false,
        formula: "sum"
    }
}, 2])

输出:

"name" "sum"
"张三" 248
"李四" 263
"王五" 154
"avg" 221.67
6. 平级聚合
Report.format(data, [{
    converge: "v"
}, {
    field: 1,
    converge: "v",
    formula: {
        formula: "sum",
        field: 2
    }
}, 2])

输出:

"subject" "sum" "score"
"语文" 234 86
"" "" 92
"" "" 56
"数学" 286 100
"" "" 88
"" "" 98
"英语" 145 62
"" "" 83
7. 多级交叉聚合
Report.format({
    fields: ["province", "city", "count", "industry", "type"],
    data: [
        ["湖北", "武汉", 18000, "房地产", "收入"],
        ["湖北", "武汉", 10000, "房地产", "收入"],
        ["湖北", "武汉", 2000, "卫生", "支出"],
        ["湖北", "武汉", 1200, "卫生", "支出"],
        ["湖北", "武汉", 8000, "卫生", "收入"],
        ["湖北", "武汉", 12000, "房地产", "支出"],
        ["湖北", "黄石", 1500, "卫生", "支出"],
        ["湖北", "黄石", 3500, "卫生", "收入"],
        ["湖北", "襄阳", 15800, "房地产", "收入"],
        ["湖北", "襄阳", 5800, "卫生", "收入"],
        ["湖北", "襄阳", 11800, "房地产", "支出"],
        ["湖北", "襄阳", 1800, "卫生", "支出"],
        ["湖南", "长沙", 16000, "房地产", "收入"],
        ["湖南", "长沙", 6000, "卫生", "收入"],
        ["湖南", "长沙", 11500, "房地产", "支出"],
        ["湖南", "长沙", 1500, "卫生", "支出"],
        ["湖南", "岳阳", 13600, "房地产", "收入"],
        ["湖南", "岳阳", 3600, "卫生", "收入"],
        ["湖南", "岳阳", 11000, "房地产", "支出"],
        ["湖南", "岳阳", 1000, "卫生", "支出"],
        ["江西", "南昌", 15400, "房地产", "收入"],
        ["江西", "南昌", 5400, "卫生", "收入"],
        ["江西", "南昌", 11800, "房地产", "支出"],
        ["江西", "南昌", 1800, "卫生", "支出"],
        ["江西", "九江", 14800, "房地产", "收入"],
        ["江西", "九江", 4800, "卫生", "收入"],
        ["江西", "九江", 11600, "房地产", "支出"],
        ["江西", "九江", 1600, "卫生", "支出"]
    ]
}, [{
    field: 0,
    formula: [{ formula: "sum", label: "全国合计" }],
    converge: "v"
}, {
    field: 1,
    formula: [{ formula: "sum", label: "省合计" }],
    converge: "v"
}, {
    field: 3,
    formula: [{
        formula: "fmt",
        label: "总利润",
        format: function(data) {
            let fmt = 0;
            for (let i = 0, len = data.length; i < len; i += 2) {
                fmt += (data[i] - data[i + 1]);
            }
            return fmt;
        }
    }],
    converge: "h"
}, {
    field: 4,
    formula: [{
        formula: "fmt",
        label: "利润",
        format: function(data) {
            return data[0] - data[1];
        }
    }],
    converge: "h"
}, {
    field: 2
}], { province: "省", city: "市" })

输出:

房地产 "" "" 卫生 "" "" 总利润
"" "" 收入 支出 利润 收入 支出 利润 ""
湖北 武汉 28000 12000 16000 8000 3200 4800 20800
"" 黄石 0 0 0 3500 1500 2000 2000
"" 襄阳 15800 11800 4000 5800 1800 4000 8000
"" 省合计 43800 23800 20000 17300 6500 10800 30800
湖南 岳阳 13600 11000 2600 3600 1000 2600 5200
"" 长沙 16000 11500 4500 6000 1500 4500 9000
"" 省合计 29600 22500 7100 9600 2500 7100 14200
江西 九江 14800 11600 3200 4800 1600 3200 6400
"" 南昌 15400 11800 3600 5400 1800 3600 7200
"" 省合计 30200 23400 6800 10200 3400 6800 13600
全国合计 "" 103600 69700 33900 37100 12400 24700 58600

具体试验,请移步 https://github.com/shixia226/...

欢迎提出更多整改意见

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/108023.html

相关文章

  • SQL 转列,列转行

    摘要:行转列,列转行行列转换在做报表分析时还是经常会遇到的,今天就说一下如何实现行列转换吧。列转行假设我们有下表语文数学英语通过即可得到如下结果我们也可以使用下面方法得到同样结果语文语文数学数学英语英语 SQL 行转列,列转行 行列转换在做报表分析时还是经常会遇到的,今天就说一下如何实现行列转换吧。 行列转换就是如下图所示两种展示形式的互相转换 showImg(https://segment...

    shiina 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<