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

原始数据

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'
'张三'8610062248
'李四'928883263
'王五'56980154
'avg'78.0095.3348.33221.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'
'语文'23486
''''92
''''56
'数学'286100
''''88
''''98
'英语'14562
''''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: '市' })

输出:

房地产''''卫生''''总利润
''''收入支出利润收入支出利润''
湖北武汉28000120001600080003200480020800
''黄石0003500150020002000
''襄阳158001180040005800180040008000
''省合计4380023800200001730065001080030800
湖南岳阳136001100026003600100026005200
''长沙160001150045006000150045009000
''省合计2960022500710096002500710014200
江西九江148001160032004800160032006400
''南昌154001180036005400180036007200
''省合计30200234006800102003400680013600
全国合计''103600697003390037100124002470058600

相关推荐