Skip to content

BizPivotTable 透视表 ​

数据透视表:扁平明细数据 → 行/列维度交叉汇总,纯前端聚合零依赖。行维度多级嵌套(rowspan 合并)、列维度多层表头,指标支持 sum / count / avg / max / min / custom 多个并列;一级行分组小计 + 总计行;单元格点击下钻回传维度路径与命中的原始记录;expose exportCsv 一键导出当前透视结果(含 BOM,Excel 打开不乱码)。

适用于:报表中心、销量/营收多维统计(大区×月份、渠道×产品)、绩效汇总、运营日报——过去只能在服务端拼宽表或手写 reduce 的场景。

与 BizTable 的分工

BizTable 是明细行渲染(一行一条记录);本组件是多维交叉汇总(一格一个聚合值)。两者常配合:透视表看总量、cell-click 下钻弹明细表(见下钻示例,明细弹窗直接用 openBizDrawer)。

基础透视 ​

大区7月8月9月
华东907,147830,6451,028,178
658,246664,568633,966
639,400731,012638,132
总计2,204,7932,226,2252,300,276
行维度(大区)× 列维度(月份,formatter 转显示文案)× 指标(销售额求和),底部自动带总计行。

多级维度嵌套 ​

大区 / 城市线上门店分销
华东上海263,553345,011228,161
华东325,582294,798376,368
华东329,637301,103301,757
华东 小计918,772940,912906,286
北京354,511349,196289,456
297,149380,551285,917
华北 小计651,660729,747575,373
深圳303,025320,189354,307
245,864360,708424,451
华南 小计548,889680,897778,758
总计2,119,3212,351,5562,260,417
行维度两级嵌套(大区→城市,同组 rowspan 合并),列维度单级(渠道);show-subtotal 开启一级行分组小计。

多指标并列 ​

大区7月8月9月
销售额订单数客单价销售额订单数客单价销售额订单数客单价
华东907,14770933598 元830,64563530765 元1,028,17886438081 元
658,24659136569 元664,56851336920 元633,96651435220 元
639,40055035522 元731,01257940612 元638,13252435452 元
总计2,204,7931,85034997 元2,226,2251,72735337 元2,300,2761,90236512 元
同一行列结构下多个指标并排(销售额合计 / 订单数合计 / 客单价均值),表头自动补一行指标行。

聚合方式切换 ​

产品线上门店分销
传感器702,617748,405749,363
699,714657,690690,928
716,990945,461820,126
总计2,119,3212,351,5562,260,417
指标配置响应式:单选切换 sum / avg / max / min / count 即时重算(measures 是 computed)。

小计与总计 ​

分组小计
总计行
大区 / 产品线上门店分销
华东传感器291,731275,285314,896
华东346,812319,901308,203
华东280,229345,726283,187
华东 小计918,772940,912906,286
传感器203,184276,602193,070
160,580192,964139,782
287,896260,181242,521
华北 小计651,660729,747575,373
传感器207,702196,518241,397
192,322144,825242,943
148,865339,554294,418
华南 小计548,889680,897778,758
总计2,119,3212,351,5562,260,417
show-subtotal 一级行分组小计、show-total 总计行,均可开关(无数据时总计行自动隐藏)。

单元格下钻 ​

大区 / 产品7月8月9月
销售额订单数销售额订单数销售额订单数
华东传感器227,303205239,446218415,163314
华东417,673268236,430172320,813292
华东262,171236354,769245292,202258
传感器201,317164163,333121308,206216
188,242199164,715149140,369132
268,687228336,520243185,391166
传感器170,914185218,798189255,905205
171,352161213,373179195,365162
297,134204298,841211186,862157
总计2,204,7931,8502,226,2251,7272,300,2761,902

点击任意有数据的值单元格,弹窗展示该格命中的原始明细(行列维度路径 + 记录全集,可直接对接明细页/导出)。

点击值单元格,cell-click 回传行列维度路径 + 指标 + 命中原始记录,配合 openBizDrawer 弹明细表。

预置分析方案 ​

大区7月8月9月
华东907,147830,6451,028,178
658,246664,568633,966
639,400731,012638,132
总计2,204,7932,226,2252,300,276
按钮组一键切换行列维度与指标配置(大区×月份 / 渠道×月份 / 城市排行),报表页常用形态。

导出 CSV ​

大区线上门店分销
华东¥918,772¥940,912¥906,286
¥651,660¥729,747¥575,373
¥548,889¥680,897¥778,758
总计¥2,119,321¥2,351,556¥2,260,417
expose exportCsv(fileName) 导出当前透视结果;formatter 定制货币格式。

加载/空态与自定义单元格 ​

大区线上门店分销
华东918,772940,912906,286
651,660729,747575,373
548,889680,897778,758
总计2,119,3212,351,5562,260,417

#cell 插槽可拿到聚合上下文 ctx(值/维度路径/原始记录)——此处对超 30 万的单元格红字加粗。

loading 覆盖浮层、空数据文案、#cell 插槽按聚合值条件着色(超阈值红字加粗)。

Props ​

属性类型默认值说明
dataArray<Record<string, unknown>>[]扁平源数据(一行一条明细,前端聚合)
rowsPivotDimension[][]行维度(至少 1 个,多个依次嵌套)
colsPivotDimension[][]列维度(为空 = 不做列拆分,指标作唯一表头)
measuresPivotMeasure[][]指标(至少 1 个,多个并列展示)
show-subtotalbooleanfalse一级行分组小计(行维度 ≥2 时生效)
show-totalbooleantrue总计行(无数据自动隐藏)
size'small' | 'default' | 'large''default'尺寸
empty-textstring'暂无数据'空数据文案
loadingbooleanfalse加载中覆盖浮层
borderbooleantrue是否显示表格边框

PivotDimension 结构:{ field; title?; sort?: 'asc' | 'desc'; formatter? }——field 为取值字段;缺省排序按数据首次出现顺序。

PivotMeasure 结构:{ field; title?; aggregate?; aggregator?; formatter? }——aggregate 缺省 sum;custom 时用 aggregator 自定义聚合函数;formatter 只对数值结果生效(count/custom 返回字符串时原样展示)。

Events ​

事件名参数说明
cell-click(ctx: PivotCellContext)点击有数据的值单元格(空格与小计/总计格不触发);ctx 含 rowDims / colDims 维度路径、measure、value 聚合值、records 命中原始记录

Slots ​

插槽名作用域说明
cell{ ctx: PivotCellContext | null, text: string }自定义值单元格(着色、加图标、迷你条等)
empty—空数据内容

Expose ​

名称类型说明
exportCsv(fileName?: string) => void导出当前透视结果为 CSV(含 BOM)
getModel() => PivotModel当前渲染模型(表头矩阵 + 渲染行,自渲染/调试用)

聚合引擎导出 ​

引擎为纯函数,自渲染场景(如虚拟滚动大表、SSR 拼表)可直接复用:

导出说明
buildPivotModel(data, rows, cols, measures, options)扁平数据 → 透视渲染模型
pivotModelToCsv(model, dimCount)渲染模型 → CSV 文本
aggregateRecords(measure, records)单指标聚合
dimKeyOf(value)维度取值归一(空值显示「(空)」)