Skip to content

[Phase2-2.4] Pivot 樞紐表 Engine #101

@cct08311github

Description

@cct08311github

Parent Epic

#90

依賴

任務

在 GroupBy 結果之上做行列轉置(Pivot),將第二維度展開為動態欄位。

設計

Request

public class AnalysisPivotRequest : AnalysisQueryRequest
{
    /// <summary>作為 Pivot 欄位的維度(從 Dimensions 中選一個)</summary>
    public string PivotDimension { get; set; }
}

邏輯

  1. 先執行標準 GroupBy 查詢(複用 Engine)
  2. 取得 PivotDimension 的所有唯一值(限制 ≤50 個,超過回 400)
  3. 行列轉置:每個唯一值變成一個欄位

範例

原始 GroupBy 結果:

Region | Category | SUM(Amount)
華東   | 家電     | 2,345,678
華東   | 3C       | 1,876,543
華南   | 家電     | 1,234,567

Pivot(PivotDimension = "Category")後:

Region | 家電_SUM(Amount) | 3C_SUM(Amount)
華東   | 2,345,678        | 1,876,543
華南   | 1,234,567        | 0

Response

public class AnalysisPivotResponse
{
    public List<string> RowDimensions { get; set; }     // ["Region"]
    public List<string> PivotValues { get; set; }       // ["家電", "3C"]
    public List<string> MeasureNames { get; set; }      // ["SUM(Amount)"]
    public List<Dictionary<string, object?>> Rows { get; set; }
}

跨 DB 影響

— Pivot 是純記憶體操作,輸入為 List<Dictionary<string, object?>>

驗證

  • 單元測試:2 維度 + 1 度量 Pivot
  • 單元測試:PivotDimension 唯一值 >50 → 錯誤
  • 單元測試:缺值填 0/null
  • 單元測試:多度量 Pivot

複雜度

高(邏輯複雜但無 DB 風險)

Metadata

Metadata

Assignees

No one assigned

    Labels

    P2Priority 2analysis-modeAnalysis Mode featureenhancementNew feature or requestin-progressWork currently in progressphase-2Phase 2 roadmap

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions