Hacktoberfest 2026: những issue maintainer đã đánh dấu cho tháng Mười, đang mở và phù hợp người mới. Xem issue Hacktoberfest

[Enhancement]: Let aggregate_records (MCP) compute multiple aggregations in one call (single GROUP BY pass)

Đang mở
#3,725 1 bình luận 1 reaction 0 người được giao Xem trên GitHub

Maintainer thường phản hồi trong vòng 1 ngày

Chưa có ai nhận issue này.

Đánh giá

Độ khó
4/5
Thời gian dự kiến
3-5 ngày
Mức phù hợp với người mới
58/100
Loại issue
Tính năng
Độ rõ ràng
Đặc tả rõ ràng
Mức độ hoạt động
Ít trao đổi
Công nghệ
csharp, sql
Lĩnh vực
api, database

Hướng nghiên cứu

Bắt đầu từ việc phân tích đối số của MCP AggregateRecordsTool, sau đó lần theo GroupByMetadata.Aggregations và BaseTSqlQueryBuilder.BuildAggregationColumns, bao gồm cả đường dẫn GraphQL hiện có. Hỗ trợ mảng aggregations tùy chọn trong khi vẫn giữ nguyên function và field, đồng thời xác minh rằng các kết quả được nhóm tạo ra một truy vấn với các bí danh có thể được orderby và having sử dụng.

Do mô hình lập chỉ mục viết ra từ nội dung của issue.

Mô tả

cri enhancement mcp-server
Is your feature request related to a problem?

The MCP aggregate_records tool accepts only one aggregate per call (function + field). To retrieve several metrics over the same grouping, a client must issue N separate calls, each generating its own query with the same GROUP BY:

SELECT region, SUM(amount) FROM dbo.Sales WHERE ... GROUP BY region
SELECT region, AVG(amount) FROM dbo.Sales WHERE ... GROUP BY region
SELECT region, SUM(cost)   FROM dbo.Sales WHERE ... GROUP BY region

This scans the same rows and recomputes the same GROUP BY N times, plus N× query-planning / result-shaping / round-trip overhead. On large tables/views this is a real, avoidable database cost. Issuing the N calls concurrently on the client side only reduces latency — it does not reduce total DB work and can increase peak load/contention.

Describe the solution you'd like

Allow aggregate_records to accept multiple aggregations in a single call, producing one SELECT with one GROUP BY pass, e.g.:

{
  "entity": "Sales",
  "aggregations": [
    { "function": "sum", "field": "amount", "alias": "sum_amount" },
    { "function": "avg", "field": "amount", "alias": "avg_amount" },
    { "function": "sum", "field": "cost",   "alias": "sum_cost" }
  ],
  "groupby": ["region"],
  "orderby": ["sum_amount desc"]
}

which maps to a single query:

SELECT region, SUM(amount) AS sum_amount, AVG(amount) AS avg_amount, SUM(cost) AS sum_cost
FROM dbo.Sales
WHERE ...
GROUP BY region

orderby/having should be able to reference the aggregate aliases (e.g. sum_amount), consistent with how grouped results are projected.

Why this looks feasible

DAB already builds multi-aggregation queries internally for GraphQL: the shared SqlQueryStructure.GroupByMetadata.Aggregations is a List<AggregationOperation> and BaseTSqlQueryBuilder.BuildAggregationColumns(...) emits all requested aggregate expressions into a single SELECT. The MCP aggregate_records tool (AggregateRecordsTool) currently parses and loads only a single AggregationOperation. Extending its argument parsing to accept an array and pushing multiple AggregationOperations onto the existing structure would reuse the machinery GraphQL already relies on.

Backward compatibility

Keep the current single-metric form (function + field) working as-is; add the new optional aggregations array alongside it. Single-metric callers are unaffected; multi-metric callers opt in.

Additional context
  • Related: #3695 (a separate correctness bug in the aggregate ORDER BY for dwsql). This enhancement is independent of that fix.
  • Benefit is largest for wide analytical tables/views where several measures are aggregated over the same grouping in one logical request.
Ngôn ngữ chính
C#
Star
1.5k
Fork
371
Merge trung bình
7 ngày 5 giờ
Pull request đã merge (30 ngày)
8

Chuẩn bị môi trường

Mở trong Codespaces

Khởi chạy dev container của dự án ngay trên trình duyệt, bằng tài khoản GitHub của bạn.

Bắt đầu từ đâu

  1. Đọc hết issue, rồi đọc hướng dẫn đóng góp của dự án.
  2. Bình luận trên issue rằng bạn sẽ nhận — tránh hai người làm cùng một việc.
  3. Fork repository và làm thay đổi trên một nhánh.
  4. Mở pull request có tham chiếu số hiệu của issue.

Issue khác của Azure/data-api-builder

Tất cả issue của Azure/data-api-builder

Issue tương tự

Thêm issue về C#

Nhận issue mới trong hộp thư của bạn

Bản tóm tắt ngắn những issue GitHub phù hợp với người mới.