-- 作者: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")
[此贴子已经被作者于2011-6-27 21:11:47编辑过]
|
-- 作者: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
请狐爸看看,问题出在哪里?
|
-- 作者: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编辑过]
|