-
Notifications
You must be signed in to change notification settings - Fork 0
Closed
Labels
P2Priority 2Priority 2analysis-modeAnalysis Mode featureAnalysis Mode featureenhancementNew feature or requestNew feature or requestin-progressWork currently in progressWork currently in progressphase-2Phase 2 roadmapPhase 2 roadmap
Description
Parent Epic
依賴
- [Phase2-1.4c] Engine 整合雙軌 GroupBy + fallback 機制 #96 (1.4c Engine 雙軌整合)
任務
在 GroupBy 結果之上做行列轉置(Pivot),將第二維度展開為動態欄位。
設計
Request
public class AnalysisPivotRequest : AnalysisQueryRequest
{
/// <summary>作為 Pivot 欄位的維度(從 Dimensions 中選一個)</summary>
public string PivotDimension { get; set; }
}邏輯
- 先執行標準 GroupBy 查詢(複用 Engine)
- 取得 PivotDimension 的所有唯一值(限制 ≤50 個,超過回 400)
- 行列轉置:每個唯一值變成一個欄位
範例
原始 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 風險)
Reactions are currently unavailable
Metadata
Metadata
Assignees
Labels
P2Priority 2Priority 2analysis-modeAnalysis Mode featureAnalysis Mode featureenhancementNew feature or requestNew feature or requestin-progressWork currently in progressWork currently in progressphase-2Phase 2 roadmapPhase 2 roadmap