MIS 系統中常見需求:多指標實測值與預期值對比。以教學問卷回饋為例,需直觀呈現各項指標得分與差距。

雷達圖 (Radar/Spider Chart) 將多維指標投影於同一圓形坐標系,管理者可一目了然:



EvaluateBill:問卷主檔EvaluateBill_Answer:填答記錄EvaluateBill_AnswerDetail:明細 (冗餘指標描述,避免多表 Join)sqlmetal /conn:"server=.;db=ZXKP;uid=sa;pwd=1" /dbml:ZXKP.dbml /namespace:DMN /serialization:Unidirectional

// 1. 取得專案經理代碼與問卷編號
string pmCode = ddlPM.SelectedValue.Split('|')[0];
string no = ddlPM.SelectedValue.Split('|')[1];
// 2. LINQ 查詢:分組計算各指標平均分
var q = from d in ctx.EvaluateBill_AnswerDetail
where d.EvaluateBill_Answer.EvaluateBill.NO == no
&& d.EvaluateBill_Answer.EvaluateBill.PMCode == int.Parse(pmCode)
group d by d.Describe into g
select new
{
Indicator = g.Key.Length > 10 ? g.Key.Substring(0,10) + "..." : g.Key,
AvgScore = g.Average(x => x.Score)
};
// 3. 繫結 Chart 控制項
List xVals = new List();
List yVals = new List();
foreach (var item in q)
{
xVals.Add(item.Indicator);
yVals.Add(Math.Round(item.AvgScore.Value, 1));
}
Chart1.Series["Series1"].Points.DataBindXY(xVals, yVals);
// 4. 雷達圖樣式微調
Chart1.Series["Series1"]["RadarDrawingStyle"] = "Area";
Chart1.Series["Series1"]["AreaDrawingStyle"] = "Circle";
Chart1.Series["Series1"]["CircularLabelsStyle"] = "Horizontal";
Chart1.Series["Series1"].BorderColor = Color.FromArgb(100, 100, 100);
Chart1.Series["Series1"].BorderWidth = 1;
group by ... into g select new { ... } 直接表達「各指標平均分」Describe 欄位,單表查詢無需 Join,效能最佳