前端报表数据处理【去重、行转列、交叉、聚合】
原始数据
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/...
- 欢迎提出更多整改意见
相关推荐
xceman 2020-10-13
算法与数学之美 2020-10-07
Anscor 2020-10-05
liwg0 2020-09-08
数学爱好者 2020-08-31
thermodynamicB 2020-08-11
夕加加 2020-07-20
willowwgx 2020-07-18
kuoying 2020-07-16
Anscor 2020-07-14
starletkiss 2020-07-08
kingzone 2020-06-27
xceman 2020-06-27
算法与数学之美 2020-06-21
kuoying 2020-06-21
秒懂数学 2020-06-17