Foxtable(狐表)用户栏目专家坐堂 → [求助]能否在交叉表的垂直分组列中增加列(已解决)


  共有23479人关注过本帖树形打印复制链接

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

帅哥哟,离线,有人找我吗?
yyzlxc
  1楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:七尾狐 帖子:1525 积分:10580 威望:0 精华:0 注册:2008/9/24 11:16:00
[求助]能否在交叉表的垂直分组列中增加列(已解决)  发帖心情 Post By: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楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:管理员 帖子:47448 积分:251048 威望:0 精华:91 注册:2008/6/17 17:14:00
  发帖心情 Post By: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编辑过]

 回到顶部
帅哥哟,离线,有人找我吗?
yyzlxc
  3楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:七尾狐 帖子:1525 积分:10580 威望:0 精华:0 注册:2008/9/24 11:16:00
  发帖心情 Post By: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楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:管理员 帖子:47448 积分:251048 威望:0 精华:91 注册:2008/6/17 17:14:00
  发帖心情 Post By: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


 


 回到顶部
帅哥哟,离线,有人找我吗?
yyzlxc
  5楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:七尾狐 帖子:1525 积分:10580 威望:0 精华:0 注册:2008/9/24 11:16:00
  发帖心情 Post By:2011/7/11 10:01:00 [只看该作者]

请狐爸老师看一下3楼新增的内容,谢谢!!

 回到顶部
帅哥哟,离线,有人找我吗?
狐狸爸爸
  6楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:管理员 帖子:47448 积分:251048 威望:0 精华:91 注册:2008/6/17 17:14:00
  发帖心情 Post By:2011/7/11 10:05:00 [只看该作者]

我也没有办法,先得到基本统计结果,然后自己编码增加列和计算统计结果。

 回到顶部
帅哥哟,离线,有人找我吗?
yyzlxc
  7楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:七尾狐 帖子:1525 积分:10580 威望:0 精华:0 注册:2008/9/24 11:16:00
  发帖心情 Post By:2011/7/11 10:23:00 [只看该作者]

谢谢狐爸老师。我先试做一个方案,再请狐爸老师指教!!

 回到顶部
帅哥哟,离线,有人找我吗?
yyzlxc
  8楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:七尾狐 帖子:1525 积分:10580 威望:0 精华:0 注册:2008/9/24 11:16:00
  发帖心情 Post By:2011/7/12 8:39:00 [只看该作者]

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

 

 


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

 回到顶部
帅哥哟,离线,有人找我吗?
yyzlxc
  9楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:七尾狐 帖子:1525 积分:10580 威望:0 精华:0 注册:2008/9/24 11:16:00
  发帖心情 Post By:2011/7/12 8:45:00 [只看该作者]

 

 

 

 



此主题相关图片如下:a.png
按此在新窗口浏览图片

 回到顶部
帅哥哟,离线,有人找我吗?
狐狸爸爸
  10楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:管理员 帖子:47448 积分:251048 威望:0 精华:91 注册:2008/6/17 17:14:00
  发帖心情 Post By:2011/7/12 8:46:00 [只看该作者]

先查看表结构,看看到底是否有名为j的列。

 回到顶部
总数 51 1 2 3 4 5 6 下一页