基本概念
行头(rowHeader)
行头的结构是由 s2DataConfig.fields.rows 决定,用于行分析维度展示。行头支持 平铺模式 (grid), 树状模式 (tree) 两种展示形态。
列头(colHeader)
列头的结构是由 s2DataConfig.fields.columns 决定,用于列分析维度展示。
角头(cornerHeader)
角头指表格的左上角部分,在表的布局中起着重要的作用。
表的布局中,S2 是以角头作为基础进行扩展,计算出行、列的尺寸和坐标。
角头也用于展示行头、列头名称,比如示例中的 省份、城市。
另外,S2 还提供了自定义扩展,用于需要自定义角头的场景,详见 cornerCell 和 cornerHeader。
数据单元格 (dataCell)
数据单元格是表格行列维度值交叉后产生的数据区域,通常情况下应该是度量值,是表数据分析最核心的数据呈现区域。
在数据单元格区域,我们可以展现基础的交叉数据,可以通过 字段标记 来辅助分析,也可以展现 同环比等衍生指标,还可以通过自定义 Hooks 来实现数据单元格自定义,更多参考 dataCell 。
框架(frame)
框架布局区域,位于其他四个区域之上,用来做区域之间的间隔框架,或者滚动条,框架间隔线的阴影等逻辑。
下载
npm install @antv/g2plot
vue中使用
<div id="container"></div>
<script>
import { PivotSheet } from '@antv/s2';
export default {
name: '',
components: {},
filters: {},
mixins: [],
props: {},
data() {
return {}
},
mounted () {
const container = document.getElementById('container');
const pivotSheet = new PivotSheet(container, {
fields: {
rows: ['type', 'subType'],
columns: ['province', 'city'],
values: ['number1', 'number2'],
},
meta: [{
"field": "number",
"name": "数量"
},{
"field": "type",
"name": "行1"
},{
"field": "subType",
"name": "行2"
}
],
data: this.generateRawData(
{ province: 10, city: 20 },
{ type: 10, sub_type: 20 },
),
}, {
width: 600,
height: 480,
frozenRowHeader: false,
});
pivotSheet.render()
},
methods: {
handleClick(e) {
this.$emit('clickPenetrate', e)
},
handleDrill(e) {
this.$emit('clickDrill', e)
},
generateRawData(row, col) {
const res = [];
const rowKeys = Object.keys(row);
const colKeys = Object.keys(col);
let k = 0
for (let i = 0; i < row[rowKeys[0]]; i++) {
for (let j = 0; j < row[rowKeys[1]]; j++) {
for (let m = 0; m < col[colKeys[0]]; m++) {
for (let n = 0; n < col[colKeys[1]]; n++) {
k++;
res.push({
province: `p${i}`,
city: `c${j}`,
type: `type${m}`,
subType: `subType${n}`,
number1: i * n,
number2: i * n,
});
}
}
}
}
console.log(k)
return res;
}
}
}
</script>
数据格式
const s2DataConfig = {
data: [],
meta: [],
sortParams: [],
fields: {
rows: [],
columns: [],
values: []
}
}
Fields
功能描述: 配置表格的维度域,即对应行列维度
fields: {
"rows": [
"province",
"city"
],
"columns": [
"type",
"sub_type"
],
"values": [
"number"
],
"valueInCols": true
},