You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何配置AG-Grid SSRM发送含多GroupBy子句且无组键的服务端请求?

配置AG-Grid实现服务端扁平分组查询

核心思路

要实现类似T-SQL GROUP BY的扁平聚合结果请求,关键是禁用AG-Grid默认的树形分组逻辑,仅传递分组字段给后端,同时让后端返回无嵌套的扁平数据结构。

具体配置步骤

  1. 启用服务器端行模型
    先开启AG-Grid的服务器端行模型,这是服务端分组的基础:

    const gridOptions = {
      rowModelType: 'serverSide',
      serverSideFilter: true, // 按需开启,非必须
      serverSideSort: true, // 按需开启,非必须
      columnDefs: [
        // 定义分组字段和聚合列
        { field: 'category', rowGroup: true },
        { field: 'region', rowGroup: true },
        { field: 'totalSales', aggFunc: 'sum' },
        // 后续请求补充的列可先定义,按需加载
        { field: 'productName', hide: true },
        { field: 'orderDate', hide: true }
      ]
    };
    
  2. 自定义服务端数据源,构造不带组键的请求
    通过getServerSideDatasource自定义请求逻辑,忽略AG-Grid默认传递的groupKeys参数,只提取groupBy字段数组发送给后端:

    gridOptions.getServerSideDatasource = (params) => {
      return {
        getRows: async (params) => {
          // 提取分组字段,直接使用groupBy数组,忽略groupKeys(避免树形层级请求)
          const groupByFields = params.request.groupBy;
    
          // 构造请求参数,仅包含分组字段和必要的分页/聚合信息
          const requestParams = {
            groupBy: groupByFields,
            startRow: params.request.startRow,
            endRow: params.request.endRow,
            // 初始仅请求分组和聚合列,后续补充其他列时修改此处
            columns: ['category', 'region', 'totalSales']
          };
    
          try {
            // 发送请求到后端接口
            const response = await fetch('/api/grouped-data', {
              method: 'POST',
              headers: { 'Content-Type': 'application/json' },
              body: JSON.stringify(requestParams)
            });
            const data = await response.json();
    
            // 直接返回扁平数据,无需处理树形结构
            params.success({
              rowData: data.flatResults, // 后端返回的扁平聚合结果
              rowCount: data.totalCount // 总条数,用于分页计算
            });
          } catch (error) {
            params.fail();
            console.error('请求失败:', error);
          }
        }
      };
    };
    
  3. 后端响应格式要求
    后端需返回无嵌套的扁平数组,结构与T-SQL GROUP BY查询结果一致:

    {
      "flatResults": [
        { "category": "Electronics", "region": "North", "totalSales": 15000 },
        { "category": "Electronics", "region": "South", "totalSales": 12000 },
        { "category": "Clothing", "region": "North", "totalSales": 8000 }
      ],
      "totalCount": 3
    }
    
  4. 后续请求补充其他列
    当需要加载productName、orderDate等其他列时,修改requestParams.columns参数,或通过列的显示事件触发重新请求,后端更新返回字段即可。

关键注意事项

  • 完全不依赖AG-Grid的groupKeys参数,该参数用于构建树形分组层级,与我们需要的扁平聚合需求无关。
  • 前端聚合列的aggFunc仅作为展示提示,实际聚合逻辑由后端处理,避免前后端结果不一致。
  • 确保后端返回的数据是纯扁平结构,没有任何嵌套的分组层级。

内容的提问来源于stack exchange,提问作者mordechai

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.09 07:12:33