logo

S2

  • 使用文档
  • API 文档
  • 图表示例
  • 在线体验
  • 更新日志
  • 所有产品antv logo arrow
  • 2.x
  • 简介
  • 快速上手
  • 基础教程
    • 基本概念
      Updated
    • 表形态
      • 透视表
        Updated
      • 明细表
        Updated
    • 字段标记
      Updated
    • 小计总计
    • 排序
      • 基础排序
        Updated
      • 组内排序
        Updated
    • 主题配置
      Updated
    • Tooltip
      Updated
    • 数据格式化
      New
    • 多行文本
      New
    • 国际化
    • 分页
      New
  • 进阶教程
    • 单元格渲染类型
      • 链接
      • 图片
        New
      • 视频
        New
      • 迷你图表
      • 结合@antv/g2
      • 自定义渲染
    • 自定义
      • 自定义 Hook
        Updated
      • 自定义行列头分组
        New
      • 自定义 Icon
        Updated
      • 自定义单元格对齐方式
        Updated
      • 自定义单元格宽高
        Updated
      • 自定义排序操作
        Updated
      • 自定义折叠/展开节点
        New
    • 交互
      • 基础交互
        Updated
      • 自定义交互
      • 隐藏列头
        Updated
      • 行列宽高调整
        Updated
      • 合并单元格
      • 滚动
        Updated
      • 复制与导出
        New
      • 高亮/选中单元格
        New
    • 分析组件
      • 简介
        New
      • 高级排序
        Updated
      • 维度切换
        Updated
      • 导出
        Updated
      • 分页
        Updated
      • 维度下钻
        Updated
    • 表格组件
      • 编辑表
      • 趋势分析表
        Updated
    • 高清适配
      Updated
    • 获取表格实例
    • 表格自适应
    • 获取单元格数据
      Updated
    • 注册 AntV/G 插件
      New
    • 透视组合图
      Experimental
    • Vue 3.0 组件 (停止维护)
  • 扩展阅读
    • 数据流处理
      • 透视表
      • 明细表
    • 布局流程
      • 透视表
      • 明细表
    • 性能介绍
      Updated
  • 贡献指南
  • 常见问题
  • S2 2.0 升级指南

基础排序

上一篇
小计总计
下一篇
组内排序

Resources

Ant Design
Galacea Effects
Umi-React 应用开发框架
Dumi-组件/文档研发工具
ahooks-React Hooks 库

社区

体验科技专栏
seeconfSEE Conf-蚂蚁体验科技大会

帮助

GitHub
StackOverflow

more products更多产品

Ant DesignAnt Design-企业级 UI 设计语言
yuque语雀-知识创作与分享工具
EggEgg-企业级 Node 开发框架
kitchenKitchen-Sketch 工具集
GalaceanGalacean-互动图形解决方案
xtech蚂蚁体验科技
© Copyright 2025 Ant Group Co., Ltd..备案号:京ICP备15032932号-38

Loading...

简介

S2 支持对表格数据进行多种形式的排序,如行/列头维值根据首字母顺序排序、行/列头维值根据对应的小计/总计/数值排序。S2 除了提供默认的排序方法外,还允许使用函数自定义排序。查看示例

使用

通过在 s2DataConfig 中传入 sortParams 启用排序

sortParams

参数说明类型默认值必选
sortFieldId度量 Id,即要被排序的 Idstring-✓
sortMethod排序方式ASC | DESC | asc | desc-
sortBy自定义排序列表string[]-
sortByMeasure按照度量值(数值)排序(透视表适用)string-
query筛选条件,缩小排序范围 如 :{ city: '成都' }object-
type组内排序用来显示 icon(透视表适用)string-
sortFunc自定义排序的 function(v: SortFuncParam) => Array<string>-
import { EXTRA_FIELD } from "@antv/s2";
const s2DataConfig = {
sortParams: [
{
sortFieldId: 'type',
sortMethod: 'DESC',
// EXTRA_FIELD 是 dataCfg.fields.values 字段的虚拟 fieldId
query: { city: '成都', [EXTRA_FIELD]: 'price' },
},
],
...
}

方式

1. 升/降序方法(sortMethod)

支持对 行头/列头 进行排序,类型包括数字、类数字、普通字符串,非数字兜底使用 localeCompare 进行比较,举例如下:

const s2DataConfig = {
sortParams: [
{ sortFieldId: 'province', sortMethod: 'DESC' },
{ sortFieldId: 'type', sortMethod: 'ASC' },
]
}
row

2. 维度值列表(sortBy)

支持对 行头/列头 按照指定的维值列表排序,如果行列有多级,则各子级内部进行组内排序(如下 city ),举例如下:

const s2DataConfig = {
sortParams: [
{ sortFieldId: 'province', sortBy: ['浙江', '吉林'] },
{ sortFieldId: 'city', sortBy: ['舟山', '杭州', '白山', '长春'] },
{ sortFieldId: 'type', sortBy: ['纸张', '笔'] },
]
}
row

3. 度量值字段(sortByMeasure)

支持 行头/列头 按照交叉的度量值(数值)进行排序。以下图为例,如果需要对行头的 城市 维度排序,首先需要找出用于排序的数据。城市 维度在交叉区域对应了 7 列数值数据,使用任何一列数据做比较,都可以决定 城市 维度的排序,所以在使用 度量值字段(sortByMeasure) 时,不仅要指定需要排序的 sortFieldId,还需要使用 query 属性限定用于比较的数值数据。

preview

根据维度所在的层级,以及用于排序的数据不同,可以分为两类排序,示例如下:

按明细数据排序

  • sortByMeasure 取具体数值,如 number
  • sortFieldId 为 行/列 维度最后一个字段,如行维度中的 city
  • query 能限定到最后一级明细数据,如包含所有列维度 type、sub_type 的维值【见示例 1】

按汇总数据排序

在 S2 中怎么开启总计/小计?

  1. 使用 data 数据中的聚合数据。
  2. 使用 S2 中提供的聚合计算。​📊 查看文档 小计总计配置
  • sortByMeasure 取 TOTAL_VALUE
  • sortFieldId 可以取任意维度字段(非末级的 province 或末级的 city)
    • 取 province 时,query 可限定 type、sub_type 所有维值或部分维值,此时是以 province 的行小计交叉格为准【见示例 2】
    • 取 city 时,query 只可限定到部分列维度,如 type,此时以列小计交叉格数据为准【见示例 3】

示例 1,明细数据排序

{
sortFieldId: 'city',
sortByMeasure: 'number',
sortMethod: 'asc',
query: {
type: '办公用品',
sub_type: '纸张',
[EXTRA_FIELD]: 'number'
}
}

示例 2,非内侧维度按汇总数据排序

当 query 包含 部分 列维度

{
sortFieldId: 'province',
sortByMeasure: TOTAL_VALUE,
sortMethod: 'asc',
query: {
type: '家具',
[EXTRA_FIELD]: 'number'
}
}

当 query 包含 所有 列维度

{
sortFieldId: 'province',
sortByMeasure: TOTAL_VALUE,
sortMethod: 'asc',
query: {
type: '办公用品',
sub_type: '笔',
[EXTRA_FIELD]: 'number'
}
}

示例 3,最内侧维度按汇总数据排序

{
sortFieldId: 'city',
sortByMeasure: TOTAL_VALUE,
sortMethod: 'desc',
query: {
type: '办公用品',
[EXTRA_FIELD]: 'number'
}
}

4. 自定义方法(sortFunc)

sortFunc 会根据当前条件返回 SortFuncParam 参数,支持 维度值 和 度量值 两种方式

参数说明类型默认值必选
sortFieldId度量 Id,即要被排序的 Idstring-✓
sortMethod排序方式ASC | DESC | asc | desc-
sortBy自定义排序列表string[]-
sortByMeasure按照度量值(数值)排序string-
query筛选条件,缩小排序范围 如 :{city:'白山'}object-
type组内排序用来显示 iconstring-
data当前排序数据列表Array<string | CellData>-

维度值(行/列头)

支持维度值自定义,即行头或列头,举例如下:

const s2DataConfig = {
sortParams: [
{
// sortFieldId 为维度值时,params.data 为维度值列表
sortFieldId: 'province',
sortFunc: (params) => {
const { data } = params;
return data.sort((a, b) => a.localeCompare(b));
},
},
],
};
row

度量值(数值)

支持使用度量值进行自定义计算,举例如下:

const s2DataConfig = {
sortParams: [
{
sortFieldId: 'city',
sortByMeasure: 'price',
// 当使用 sortByMeasure 时,可以传入 query 定位数值列表
// 如下方限定 params.data 为 type=纸张,数值=price 的数据
query: { type: '纸张', [EXTRA_FIELD]: 'price' },
sortFunc: (params) => {
const { data, sortByMeasure, sortFieldId } = params || {};
return (
data
.map(item => item.raw) // 此时 item 为 CellData,需要取出原始数据对象
// 使用 price 做比较
?.sort((a, b) => b[sortByMeasure] - a[sortByMeasure])
// map 出 city 维度的数组
?.map((item) => item[sortFieldId])
);
},
},
],
};
row

📊 查看 demo 自定义排序。

优先级

  1. sortParams 里的条件优先级高于原始数据
  2. sortParams 多个 item :按照顺序优先级,排在后面的优先级高
  3. item 中多个条件:sortFunc > sortBy > sortByMeasure > sortMethod