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

原始数据

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

你可能感兴趣的:(javascript,报表解析,报表工具,聚合,去重)