Foxtable(狐表)用户栏目专家坐堂 → [求助]关于组合统计问题(已解决)


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

主题:[求助]关于组合统计问题(已解决)

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


加好友 发短信
等级:七尾狐 帖子:1525 积分:10580 威望:0 精华:0 注册:2008/9/24 11:16:00
[求助]关于组合统计问题(已解决)  发帖心情 Post By:2011/6/27 15:12:00 [只看该作者]

目的:首先,从按月汇总表分组统计出单位的月加工费,然后根据按日汇总表生成的每天全员人数,在按月汇总表用平均值Average代码求的月平均人数,以此得到单位的月人均加工费。使用组合统计的方法,形成以下代码,碰到两个问题:

1、Combine方法,用于组合多个fxDataSource对象,语法为:Combine(LeftColName, RightDataSource, RightColName)
由于以下代码均由两列(报表年月和单位)分组,如何联接?(案例为单列联接)
2、由于按日汇总表是由代码生成,是否适用Combine方法?

     如何实现上述要求,请各位老师指教,谢谢!!       

     附上代码和文件(打开密码123)。

 

           生成"按日汇总"统计表
               
                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 bd1 As New GroupTableBuilder("按月汇总",DataTables("日报源表"))
                Dim dt1 As fxDataSource
                bd1.Groups.AddDef("报表年月") '根据报表年月列用于分组
                bd1.Groups.AddDef("单位") '根据单位列用于分组
                bd1.Totals.AddDef("加工费") '添加加工费列用于统计
                bd1.Totals.AddDef("投工","全员人数") '添加投工列用于统计
                dt1 = bd1.BuildDataSource()

                Dim bd2 As New GroupTableBuilder("按月汇总2",DataTables("按日汇总"))  '根据代码生成的“按日汇总”统计表进行二次统计
                Dim dt2 As fxDataSource
                bd2.Groups.AddDef("报表年月") '根据报表年月列用于分组
                bd2.Groups.AddDef("单位") '根据单位列用于分组
                bd2.Totals.AddDef("全员人数",AggregateEnum.Average,"月均人数") '添加月均人数列用于统计
                dt2 = bd2.BuildDataSource()
               
                dt1.Combine("报表年月","单位",dt2,"报表年月","单位") '将按月汇总2数据组合到按月汇总数据(此处出错)
                MainTable = dt1

                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")

 

               

                

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

[此贴子已经被作者于2011-6-27 21:11:47编辑过]

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


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

1、你要升级到最新版本

2、看下面帮助的最后一个示例:多个连接列:

 

http://help.foxtable.com/topics/2305.htm

 


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


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

将此段代码复制到命令窗口出错:

Dim bd1 As New GroupTableBuilder("按月汇总",DataTables("日报源表"))
Dim dt1 As fxDataSource
bd1.Groups.AddDef("报表年月") '根据报表年月列用于分组
bd1.Groups.AddDef("单位") '根据单位列用于分组
bd1.Totals.AddDef("加工费") '添加加工费列用于统计
bd1.Totals.AddDef("投工","全员人数") '添加投工列用于统计
dt1 = bd1.BuildDataSource()

Dim bd2 As New GroupTableBuilder("按月汇总2",DataTables("按日汇总"))  '根据代码生成的"按日汇总"统计表进行二次统计
Dim dt2 As fxDataSource
bd2.Groups.AddDef("报表年月") '根据报表年月列用于分组
bd2.Groups.AddDef("单位") '根据单位列用于分组
bd2.Totals.AddDef("全员人数",AggregateEnum.Average,"月均人数") '添加月均人数列用于统计
dt2 = bd2.BuildDataSource()

Dim nms As String() = {"报表年月","单位"} '指定连接列
dt1.Combine(nms,dt2,nms) '将按月汇总2数据组合到按月汇总数据
MainTable = dt1

 

 


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

 

 

 

请狐爸看看,问题出在哪里?


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


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

问题出在这里:
MainTable = dt1
 
合成统计表之后,通常是绑定到窗口的Table控件中:
Tables("窗口1_Table1").DataSource = dt1 '将统计结果绑定到Table
 
你可以参考CaseStudy目录下的文件:组合统计结果.Table
 
 


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


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

      谢谢狐爸的指教,按照组合统计结果的案例,可以实现原定的目标要求,但是,对窗口感觉不爽,有点别扭,所以最后还是选用分组统计来生成统计表,可以达到同样的效果,同时感觉比较协调统一。现将两个方案的代码附下:

 

                组合统计方案的代码:

                Dim bd1 As New GroupTableBuilder("按月汇总",DataTables("日报源表"))
                Dim dt1 As fxDataSource
                bd1.Groups.AddDef("报表年月") '根据报表年月列用于分组
                bd1.Groups.AddDef("单位") '根据单位列用于分组
                bd1.Totals.AddDef("加工费") '添加加工费列用于统计
                bd1.Totals.AddDef("投工","全员人数") '添加投工列用于统计
                dt1 = bd1.BuildDataSource()
               
                Dim bd2 As New GroupTableBuilder("按月汇总2",DataTables("按日汇总"))  '根据代码生成的"按日汇总"统计表进行二次统计
                Dim dt2 As fxDataSource
                bd2.Groups.AddDef("报表年月") '根据报表年月列用于分组
                bd2.Groups.AddDef("单位") '根据单位列用于分组
                bd2.Totals.AddDef("全员人数",AggregateEnum.Average,"月均人数") '添加月均人数列用于统计
                dt2 = bd2.BuildDataSource()
               
                Dim nms As String() = {"报表年月","单位"} '指定连接列
                dt1.Combine(nms,dt2,nms) '将按月汇总2数据组合到按月汇总数据
                Tables("窗口1_Table1").DataSource = dt1 '将统计结果绑定到Table
               
               
                With DataTables("窗口1_Table1").DataCols  '用表达式列计算库存数据
                    .Add("日人均加工费",Gettype(Double),"iif(全员人数=0,null,加工费/全员人数)")
                    .Add("月人均加工费",Gettype(Double),"iif(月均人数=0,null,加工费/月均人数)")
                End With
               
                DataTables("窗口1_Table1").DataCols("加工费").SetFormat("0.00")
                DataTables("窗口1_Table1").DataCols("月均人数").SetFormat("0.00")
                DataTables("窗口1_Table1").DataCols("日人均加工费").SetFormat("0.00")
                DataTables("窗口1_Table1").DataCols("月人均加工费").SetFormat("0.00")

 

               分组统计方案的代码:

               "按日汇总"
                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 b As New GroupTableBuilder("按月汇总",DataTables("按日汇总"))
                b.Groups.AddDef("报表年月") '根据报表年月列用于分组
                b.Groups.AddDef("单位") '根据单位列用于分组
                b.Totals.AddDef("加工费") '添加加工费列用于统计
                b.Totals.AddDef("全员人数") '添加投工列用于统计
                b.Totals.AddDef("全员人数",AggregateEnum.Average,"月均人数") '添加月均人数列用于统计
                b.Build '生成按月汇总表
                Dim t As Table = Tables("按月汇总")
                t.DataTable.DataCols.Add("日人均加工费", Gettype(Double),"iif(全员人数=0,null,加工费/全员人数)")
                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")
                DataTables("按月汇总").DataCols("日人均加工费").SetFormat("0.00")
                DataTables("按月汇总").DataCols("月人均加工费").SetFormat("0.00")

 

 

      在此,对热心帮助我的各位老师表示衷心的感谢!!

 

 

 

[此贴子已经被作者于2011-6-27 21:10:10编辑过]

 回到顶部