Rss & SiteMap

Foxtable(狐表) http://www.foxtable.com

新一代数据库软件,完美融合Access、Foxpro、Excel、vb.net之优势,人人都能掌握的快速软件开发工具!
共51 条记录, 每页显示 10 条, 页签: [1] [2][3][4][5][6]
[浏览完整版]

标题:[求助]能否在交叉表的垂直分组列中增加列(已解决)

1楼
yyzlxc 发表于:2011/7/10 17:36:00

项目中用代码生成交叉统计(表年度汇总),想在垂直分组列中再增加二列,分别为人均加工费(加工费/月均人数)和其环比,代码应如何修改?请各位老师指教。谢谢!!


图片点击可在新窗口打开查看此主题相关图片如下:a.png
图片点击可在新窗口打开查看

 


 

 下载信息  [文件大小:   下载次数: ]
图片点击可在新窗口打开查看点击浏览该文件:生产日报b.zip

 

附上代码如下:

'读取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编辑过]
2楼
狐狸爸爸 发表于:2011/7/11 7:11:00

Dim sql As String = "Select 报表年月,日期,单位,Sum(加工费) As 加工费,Sum(投工) As 投工,Sum(加工费)/Sum(投工) As 人均加工费 FROM {日报源表} WHERE Year(日期) = '" & nf & "' Group By 报表年月,日期,单位 ORDER BY 单位,日期,报表年月"

 

剩下的你应该可以自己处理了。

[此贴子已经被作者于2011-7-11 7:11:31编辑过]
3楼
yyzlxc 发表于:2011/7/11 9:11:00

谢谢狐爸老师的指教,根据您的提示,已经在垂直分组中成功地增加了一列,但存在一点瑕疵,就是人均加工费的合计行的值应该是平均值,如何来实现?

其次,式中的Sum(加工费)/Sum(投工) As 人均加工费的计算结果与实际值有误差,原因是Sum(投工)不等于月均人数,如何用式中的b.Totals.AddDef("投工",AggregateEnum.Average,"月均人数")的值来替换Sum(投工)

另外,在垂直分组列中,有没有办法对某一列(比如人均加工费)进行环比,这是统计分析的一个重要手段,还请狐爸老师费神,给予指教,再次感谢!!

 

 


图片点击可在新窗口打开查看此主题相关图片如下:a.png
图片点击可在新窗口打开查看
[此贴子已经被作者于2011-7-11 9:31:35编辑过]
4楼
狐狸爸爸 发表于:2011/7/11 9:18:00

看看这些内容能否帮助你:
 
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


 

5楼
yyzlxc 发表于:2011/7/11 10:01:00
请狐爸老师看一下3楼新增的内容,谢谢!!
6楼
狐狸爸爸 发表于:2011/7/11 10:05:00
我也没有办法,先得到基本统计结果,然后自己编码增加列和计算统计结果。
7楼
yyzlxc 发表于:2011/7/11 10:23:00
谢谢狐爸老师。我先试做一个方案,再请狐爸老师指教!!
8楼
yyzlxc 发表于:2011/7/12 8:39:00

其中一段代码作调整后,生成表如下:

 

 


图片点击可在新窗口打开查看此主题相关图片如下:b.png
图片点击可在新窗口打开查看
9楼
yyzlxc 发表于:2011/7/12 8:45:00

 

 

 

 



此主题相关图片如下:a.png
按此在新窗口浏览图片
10楼
狐狸爸爸 发表于:2011/7/12 8:46:00
先查看表结构,看看到底是否有名为j的列。
共51 条记录, 每页显示 10 条, 页签: [1] [2][3][4][5][6]

Copyright © 2000 - 2018 foxtable.com Tel: 4000-810-820 粤ICP备11091905号

Powered By Dvbbs Version 8.3.0
Processed in .03906 s, 3 queries.