Foxtable(狐表)用户栏目专家坐堂 → [求助]统计表中能否自动生成一列进行排名(已解决)


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

主题:[求助]统计表中能否自动生成一列进行排名(已解决)

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


加好友 发短信
等级:七尾狐 帖子:1525 积分:10580 威望:0 精华:0 注册:2008/9/24 11:16:00
[求助]统计表中能否自动生成一列进行排名(已解决)  发帖心情 Post By:2011/6/29 12:32:00 [只看该作者]

根据以下代码,生成当月汇总表,设想增加一列,用于排名。在帮助中找到相关案例,加入后运行出错。分析问题可能出在动态增加列的代码,因为在帮助中提示,需要重新打开项目生效,是否有办法让增加的列即时生效,或通过其他途径实现目的。谢谢!!

 

             Case "当月汇总"
                '先进行当月日汇总
                Dim b As New GroupTableBuilder("当月日汇总",DataTables("日报源表"))
                b.Groups.AddDef("报表年月") '根据报表年月列用于分组
                b.Groups.AddDef("日期", DateGroupEnum.None) '添加日期列用于分组
                b.Groups.AddDef("单位") '根据单位分组
                b.Totals.AddDef("加工费") '添加加工费列用于统计
                b.Totals.AddDef("投工","全员人数") '添加投工列用于统计
                b.Build '生成按日汇总表
                Dim t As Table = Tables("当月日汇总")
                t.DataTable.DataCols.Add("全员人均", Gettype(Double),"iif(全员人数=0,null,加工费/全员人数)")
                MainTable = t '打开生成的按日汇总表
                t.Position = t.Rows.Count - 1
                DataTables("当月日汇总").DataCols("加工费").SetFormat("0.00")
                DataTables("当月日汇总").DataCols("全员人均").SetFormat("0.00")
               
                '然后在当月日汇总的基础上进行当月汇总
                Dim d As New GroupTableBuilder("当月汇总",DataTables("当月日汇总"))
                d.Groups.AddDef("报表年月") '根据报表年月列用于分组
                d.Groups.AddDef("单位") '根据单位列用于分组
                d.Totals.AddDef("加工费") '添加加工费列用于统计
                d.Totals.AddDef("全员人数") '添加投工列用于统计
                d.Totals.AddDef("全员人数",AggregateEnum.Average,"月均人数") '添加月均人数列用于统计
                d.Build '生成按月汇总表
                Dim r As Table = Tables("当月汇总")
                r.DataTable.DataCols.Add("日人均加工费", Gettype(Double),"iif(全员人数=0,null,加工费/全员人数)")
                r.DataTable.DataCols.Add("月人均加工费", Gettype(Double),"iif(月均人数=0,null,加工费/月均人数)")
                MainTable = r '打开生成的按月汇总表
                r.Position = r.Rows.Count - 1
                DataTables("当月汇总").DataCols("加工费").SetFormat("0.00")
                DataTables("当月汇总").DataCols("月均人数").SetFormat("0.00")
                DataTables("当月汇总").DataCols("日人均加工费").SetFormat("0.00")
                DataTables("当月汇总").DataCols("月人均加工费").SetFormat("0.00")
               
                '动态增加列       问题可能出在这里!
                Dim Builder As New ADOXBuilder
                Builder.Open() '打开ADOXBuilder
                With Builder.Tables("当月汇总")
                    .AddColumn("名次" ,ADOXType.String, 2) '增加字符型列,长度指定为2
                End With
                Builder.Close() '关闭ADOXBuilder
               
                '根据代码生成的汇总表进行排名
                '获得报表年月数据,保存在集合中
                Dim bjs As List(Of String) = DataTables("当月汇总").GetUniqueValues("","报表年月")
                For Each bj As String In bjs
                    '获得该报表年月的全部行,按总分降序排序
                    Dim drs As List(Of DataRow) = DataTables("当月汇总").Select("[报表年月] = " & bj, "月人均加工费 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
                Next

 

 

 粗体为新增的代码(文件登录密码123)。

 

 


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

 


 

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

[此贴子已经被作者于2011-6-29 13:12:14编辑过]

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


加好友 发短信 一级勋章 三级勋章 二级勋章
等级:超级版主 帖子:6318 积分:33945 威望:0 精华:10 注册:2008/8/31 20:56:00
  发帖心情 Post By:2011/6/29 12:41:00 [只看该作者]


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


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

谢谢czy老师,问题解决,达到预期效果。再次感谢!!

用一条代码替换动态增加列的代码,即获成功!!

 DataTables("当月汇总").DataCols.Add("名次", GetType(Byte))

有图为证!

 

 

 


图片点击可在新窗口打开查看此主题相关图片如下:aa.png
图片点击可在新窗口打开查看
[此贴子已经被作者于2011-6-29 13:18:09编辑过]

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


加好友 发短信
等级:婴狐 帖子:12 积分:171 威望:0 精华:0 注册:2011/9/22 7:16:00
  发帖心情 Post By:2011/10/14 8:35:00 [只看该作者]

 Case "当月汇总"
 
 '先进行当月日汇总
                Dim b As New GroupTableBuilder("当月日汇总",DataTables("日报源表"))
                b.Groups.AddDef("报表年月") '根据报表年月列用于分组
                b.Groups.AddDef("日期", DateGroupEnum.None) '添加日期列用于分组
                b.Groups.AddDef("单位") '根据单位分组
                b.Totals.AddDef("加工费") '添加加工费列用于统计
                b.Totals.AddDef("投工","全员人数") '添加投工列用于统计
               ' b.Totals.AddDef("名次")
                b.Build '生成按日汇总表
                Dim t As Table = Tables("当月日汇总")
                t.DataTable.DataCols.Add("全员人均", Gettype(Double),"iif(全员人数=0,null,加工费/全员人数)")
                MainTable = t '打开生成的按日汇总表
                t.Position = t.Rows.Count - 1
                DataTables("当月日汇总").DataCols("加工费").SetFormat("0.00")
                DataTables("当月日汇总").DataCols("全员人均").SetFormat("0.00")
                
                '然后在当月日汇总的基础上进行当月汇总
                Dim d As New GroupTableBuilder("当月汇总",DataTables("当月日汇总"))
                d.Groups.AddDef("报表年月") '根据报表年月列用于分组
                d.Groups.AddDef("单位") '根据单位列用于分组
                d.Totals.AddDef("加工费") '添加加工费列用于统计
                d.Totals.AddDef("全员人数") '添加投工列用于统计
                d.Totals.AddDef("全员人数",AggregateEnum.Average,"月均人数") '添加月均人数列用于统计
                d.Build '生成按月汇总表
                Dim r As Table = Tables("当月汇总")
                r.DataTable.DataCols.Add("日人均加工费", Gettype(Double),"iif(全员人数=0,null,加工费/全员人数)")
                r.DataTable.DataCols.Add("月人均加工费", Gettype(Double),"iif(月均人数=0,null,加工费/月均人数)")
                MainTable = r '打开生成的按月汇总表
                r.Position = r.Rows.Count - 1
                DataTables("当月汇总").DataCols("加工费").SetFormat("0.00")
                DataTables("当月汇总").DataCols("月均人数").SetFormat("0.00")
                DataTables("当月汇总").DataCols("日人均加工费").SetFormat("0.00")
                DataTables("当月汇总").DataCols("月人均加工费").SetFormat("0.00")

                 DataTables("当月汇总").DataCols.Add("名次", Gettype(Byte))
               
                              
                               
                '根据代码生成的汇总表进行排名
                '获得报表年月数据,保存在集合中
                Dim bjs As List(Of String) = DataTables("当月汇总").GetUniqueValues("","报表年月")
                For Each bj As String In bjs
                    '获得该报表年月的全部行,按总分降序排序
                    Dim drs As List(Of DataRow) = DataTables("当月汇总").Select("[报表年月] = " & bj, "月人均加工费 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
                Next
                   Tables("当月汇总").Sort = "名次 "


 回到顶部