以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.com/bbs/index.asp)
--  专家坐堂  (http://foxtable.com/bbs/list.asp?boardid=2)
----  [求助]关于组合统计问题(已解决)  (http://foxtable.com/bbs/dispbbs.asp?boardid=2&id=10854)

--  作者:yyzlxc
--  发布时间: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编辑过]

--  作者:狐狸爸爸
--  发布时间:2011/6/27 15:18:00
--  

1、你要升级到最新版本

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

 

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

 


--  作者:yyzlxc
--  发布时间: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
图片点击可在新窗口打开查看

 

 

 

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


--  作者:狐狸爸爸
--  发布时间:2011/6/27 15:52:00
--  
问题出在这里:
MainTable = dt1
 
合成统计表之后,通常是绑定到窗口的Table控件中:
Tables("窗口1_Table1").DataSource = dt1 \'将统计结果绑定到Table
 
你可以参考CaseStudy目录下的文件:组合统计结果.Table
 
 


--  作者:yyzlxc
--  发布时间: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编辑过]