项目中用代码生成交叉统计(表年度汇总),想在垂直分组列中再增加二列,分别为人均加工费(加工费/月均人数)和其环比,代码应如何修改?请各位老师指教。谢谢!!
此主题相关图片如下:a.png
附上代码如下:
'读取ComboBox2中的年份
If e.Form.Controls("ComboBox2").Value Is Nothing Then
MessageBox.Show("请在右侧选择生成报表的年份","提示")
Return
End If
'根据年份生成临时表
Dim nf As String = e.Form.Controls("ComboBox2").Value
Dim sql As String = "Select 报表年月,日期,单位,Sum(加工费) As 加工费,Sum(投工) As 投工 FROM {日报源表} WHERE Year(日期) = '" & nf & "' Group By 报表年月,日期,单位 ORDER BY 单位,日期,报表年月"
'根据临时表生成年度汇总表
Dim b As New CrossTableBuilder("年度汇总",sql)
b.HGroups.AddDef("单位")
b.VGroups.AddDef("报表年月")
b.Totals.AddDef("加工费")
b.Totals.AddDef("投工",AggregateEnum.Average,"月均人数")
b.HorizontalTotal = True
b.VerticalTotal = True
b.Build()
'MainTable = Tables("年度汇总")
Dim r As Table = Tables("年度汇总")
Dim i As Integer =Tables("年度汇总").Cols.Count
i=(i-3)/2
r.DataTable.DataCols.Add("合计_年均人数", Gettype(Double),"[合计_投工]/"& i)
Tables("年度汇总").Cols.Remove("合计_投工")'隐藏列
MainTable = r '打开生成的按月汇总表
Dim k1 As String ="加工费_"
Dim k2 As String ="投工_"
For j As Integer = 1 To i
DataTables("年度汇总").DataCols( k1 & j ).SetFormat("0.00")
DataTables("年度汇总").DataCols( k2 & j ).SetFormat("0.00")
Next
r.DataTable.DataCols.Add("年人均加工费", Gettype(Double),"iif(合计_年均人数=0,null,合计_加工费/合计_年均人数)")
DataTables("年度汇总").DataCols("合计_加工费").SetFormat("0.00")
DataTables("年度汇总").DataCols("合计_年均人数").SetFormat("0.00")
DataTables("年度汇总").DataCols("年人均加工费").SetFormat("0.00")
'动态增加列
DataTables("年度汇总").DataCols.Add("名次", Gettype(Byte))
'根据代码生成的汇总表对年人均加工费进行排名
'获得该报表的全部行
Dim drs As List(Of DataRow) = DataTables("年度汇总").Select("[单位] <> '合计'","年人均加工费 DESC")
For n As Integer = 0 To drs.Count - 1 '遍历所有行
If n > 0 AndAlso drs(n)("年人均加工费") = drs(n-1)("年人均加工费") Then '如果年人均加工费和上一行相同
drs(n)("名次") = drs(n-1)("名次") '则排名等于上一行
Else
drs(n)("名次") = n + 1 '设置名次
End If
Next
Tables("年度汇总").Cols("单位").TextAlign = TextAlignEnum.Center
Tables("年度汇总").Cols("名次").TextAlign = TextAlignEnum.Center
Tables("年度汇总").AutoSizeCols()
[此贴子已经被作者于2011-7-28 18:54:01编辑过]