以文本方式查看主题 - Foxtable(狐表) (http://foxtable.net/bbs/index.asp) -- 专家坐堂 (http://foxtable.net/bbs/list.asp?boardid=2) ---- [求助]关于通过日报计算生成月报,在对月报中的数据计算生成年报 (http://foxtable.net/bbs/dispbbs.asp?boardid=2&id=157897) |
-- 作者:atropos -- 发布时间:2020/11/2 9:39:00 -- [求助]关于通过日报计算生成月报,在对月报中的数据计算生成年报 设有ABC三个厂区,需要填写日报 日报格式如下 厂区-日期(年-月-日)-数据1-数据2-数据3-数据4((数据2-数据3/数据1))
需要根据日报分别生成3个厂区的月报,月报中包含二次计算数据, 月报格式如下: 厂区(X年1-12月)的数据 厂区-年-月-SUN(数据1)-AVG(数据1)-AVG(数据2)-((AVG数据1-AVG数据2)/AVG数据1)
在根据月报,以及手填月报数据E F G 生成年度分析报 厂区(1-12月) 厂区-年-月-手填数据E-AVG(数据1)/手填数据E-(【AVG数据1-AVG数据2)/AVG数据1】/手填数据E)
最后对ABC 三个厂区的每年12个月的数据进行同比环比
设计思路,目前试了三类方法: 1.新建一张表达式的正式月表,通过表达式对日报表进行计算;目前的问题是,不能自动按月求和,只能根据加载的数据,通过表达式计算,每次只能产生一条数据; 2.新建一张年度运行表的正式表,通过统计分组计算每月的数据,在通过命令填写进年度表,在通过两张表联合,将运行数据与填写数据加在一起生成一张新表; 问题是:每次都要先统计,在转填,如果日报有变化,转填的表数据不会自动更新,如果数据量较大,会引起误差;并且在测试阶段,总有两行数据会新增而不是重复填写,出现了BUG; 3.通过SQL查询日报,生成1-12月,但是无法对含有表达式的列进行查询; 4.通过统计分组的方法尝试生成临时的月报统计表,但是有计算列的总是在最后一栏,无法与前面同类型的列合并; Dim g As New GroupTableBuilder("统计表1", DataTables("污水厂月运行报表")) g.Caption = "统计表1" g.Groups.AddDef("厂区编号") g.Groups.AddDef("日期", DateGroupEnum.Year, "年") g.Groups.AddDef("日期", "月")
g.Totals.AddDef("处理水量") g.Totals.AddDef("处理水量", AggregateEnum.Average)
g.Totals.AddDef("CODjin","COD_月进水总和") g.Totals.AddDef("CODchu","COD_月出水总和") g.Totals.AddDef("CODjin",AggregateEnum.Average,"COD_进水平均") g.Totals.AddDef("CODchu",AggregateEnum.Average,"COD_出水平均")
g.Totals.AddDef("BOD5jin") g.Totals.AddDef("BOD5jin",AggregateEnum.Average) g.Totals.AddDef("BOD5jin",AggregateEnum.Max) g.Totals.AddDef("BOD5jin",AggregateEnum.Min) g.Totals.AddDef("BOD5chu") g.Totals.AddDef("BOD5chu",AggregateEnum.Average) g.Totals.AddDef("BOD5chu",AggregateEnum.Max) g.Totals.AddDef("BOD5chu",AggregateEnum.Min) g.Totals.AddDef("厂区用电") g.Totals.AddDef("厂区用电",AggregateEnum.Average) g.Totals.AddDef("厂区用电",AggregateEnum.Max) g.Totals.AddDef("厂区用电",AggregateEnum.Min) g.Totals.AddDef("湿污泥量") g.Totals.AddDef("湿污泥量",AggregateEnum.Average) g.Totals.AddDef("湿污泥量",AggregateEnum.Max) g.Totals.AddDef("湿污泥量",AggregateEnum.Min) g.Totals.AddDef("污泥含水率") g.Totals.AddDef("污泥含水率",AggregateEnum.Average) g.Totals.AddDef("污泥含水率",AggregateEnum.Max) g.Totals.AddDef("污泥含水率",AggregateEnum.Min) g.Totals.AddDef("绝干污泥量") g.Totals.AddDef("绝干污泥量",AggregateEnum.Average) g.Totals.AddDef("绝干污泥量",AggregateEnum.Max) g.Totals.AddDef("绝干污泥量",AggregateEnum.Min) g.Totals.AddDef("碳源A") g.Totals.AddDef("碳源A",AggregateEnum.Average) g.Totals.AddDef("碳源A",AggregateEnum.Max) g.Totals.AddDef("碳源A",AggregateEnum.Min)
g.FromServer = True g.Build()
DataTables("统计表1").DataCols.Add("COD_去除率",Gettype(Double),"(COD_月进水总和 - COD_月出水总和)/ COD_月出水总和") DataTables("统计表1").DataCols("COD_去除率").SetFormat("#0.00%") MainTable = Tables("统计表1") \'Tables("窗口1_Table1").DataSource = g.BuildDataSource()
通过哪种方式更能实现我的需求,请老师指导。
|
-- 作者:有点蓝 -- 发布时间:2020/11/2 9:58:00 -- 日报实时统计,参考:http://www.foxtable.com/webhelp/topics/1472.htm 月报和年报,通过分组统计生成即可。 临时列可以自行移动到合适的位置:http://www.foxtable.com/webhelp/topics/0587.htm
|
-- 作者:atropos -- 发布时间:2020/11/2 10:25:00 -- 并没有解决问题,因为我需要 从日报中统计后的数据 进行二次计算 才能生成 需要的月报,而不是系统纯统计的月报,临时列不止一列,如果每次都手动调整,并没有达到节约时间的目的,反而更加繁琐,也不利于使用 |
-- 作者:有点蓝 -- 发布时间:2020/11/2 10:47:00 -- 可以全部都改实时统计,至于需要什么二次计算,那是您的业务要求,自己写代码计算即可 |
-- 作者:atropos -- 发布时间:2020/11/2 11:02:00 -- 以下是引用有点蓝在2020/11/2 10:47:00的发言: 可以全部都改实时统计,至于需要什么二次计算,那是您的业务要求,自己写代码计算即可 您的意思是采用实时统计,每个月用实时统计生成一条数据,然后在用一个表根据这个实时数据来计算,最后手动记录12个月的实时+计算数据? |
-- 作者:有点蓝 -- 发布时间:2020/11/2 11:08:00 -- 差不多了 |