Rss & SiteMap
Foxtable(狐表) http://www.foxtable.com
项目中用代码生成交叉统计(表年度汇总),想在垂直分组列中再增加二列,分别为人均加工费(加工费/月均人数)和其环比,代码应如何修改?请各位老师指教。谢谢!!
下载信息 [文件大小: 下载次数: ] | |
![]() |
附上代码如下:
'读取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()
Dim sql As String = "Select 报表年月,日期,单位,Sum(加工费) As 加工费,Sum(投工) As 投工,Sum(加工费)/Sum(投工) As 人均加工费 FROM {日报源表} WHERE Year(日期) = '" & nf & "' Group By 报表年月,日期,单位 ORDER BY 单位,日期,报表年月"
剩下的你应该可以自己处理了。
谢谢狐爸老师的指教,根据您的提示,已经在垂直分组中成功地增加了一列,但存在一点瑕疵,就是人均加工费的合计行的值应该是平均值,如何来实现?
其次,式中的Sum(加工费)/Sum(投工) As 人均加工费的计算结果与实际值有误差,原因是Sum(投工)不等于月均人数,如何用式中的b.Totals.AddDef("投工",AggregateEnum.Average,"月均人数")的值来替换Sum(投工)?
另外,在垂直分组列中,有没有办法对某一列(比如人均加工费)进行环比,这是统计分析的一个重要手段,还请狐爸老师费神,给予指教,再次感谢!!
看看这些内容能否帮助你:
http://help.foxtable.com/topics/1594.htm
http://help.foxtable.com/topics/1911.htm
http://help.foxtable.com/topics/1964.htm
单单某列环比是不可以的,你可以分成两个或多个统计,然后将多个统计结果组合在一起:
http://help.foxtable.com/topics/2305.htm