以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.com/bbs/index.asp)
--  专家坐堂  (http://foxtable.com/bbs/list.asp?boardid=2)
----  关于交叉统计  (http://foxtable.com/bbs/dispbbs.asp?boardid=2&id=70327)

--  作者:实话实说
--  发布时间:2015/6/19 6:21:00
--  关于交叉统计
HorizontalTotal  是CrossTableBuilder的水平汇总,即合计,为什么没有平均呢
--  作者:y2287958
--  发布时间:2015/6/19 6:29:00
--  
自行增加
--  作者:Bin
--  发布时间:2015/6/19 9:01:00
--  
http://www.foxtable.com/help/topics/0681.htm
--  作者:大红袍
--  发布时间:2015/6/19 9:13:00
--  
 如果你要平均,你可以生成以后,循环每一行,然后计算平均值。
--  作者:实话实说
--  发布时间:2015/6/19 10:04:00
--  
以下代码生成了每个月的平均单价,想再汇总计算所有月的平均单价。

If Forms("材料统计").Opened Then
    Dim f As New CrossTableBuilder("材料统计汇总", cmb.ExecuteReader())
    \'f.HGroups.AddDef("供应商")
    f.HGroups.AddDef("材料名称")
    f.HGroups.AddDef("型号规格")
    f.VGroups.AddDef("月", "{0}")
    f.Totals.AddDef("单价",AggregateEnum.Average,"单价")
    \'f.Totals.AddDef("单价", "单价")
    \'f.OrderByTotal = True
    \'f.HorizontalTotal = True
    f.Filter = "日期 Is Not Null"
    f.Build()
End If

Tables("材料统计_材料统计汇总表").DataSource = DataTables("材料统计汇总")


--  作者:大红袍
--  发布时间:2015/6/19 10:06:00
--  

 生成以后,再循环每一行计算

 

 不会做就上传具体例子。


--  作者:实话实说
--  发布时间:2015/6/19 11:17:00
--  
 下载信息  [文件大小:   下载次数: ]
图片点击可在新窗口打开查看点击浏览该文件:平均单价.foxdb


--  作者:大红袍
--  发布时间:2015/6/19 11:26:00
--  

If Forms("材料统计").Opened Then
    Dim f As New CrossTableBuilder("材料统计汇总", DataTables("表A"))
    \'f.HGroups.AddDef("供应商")
    f.HGroups.AddDef("材料")
    \'f.HGroups.AddDef("型号规格")
    f.VGroups.AddDef("月", "{0}")
    f.Totals.AddDef("单价",AggregateEnum.Average,"单价")
    \'f.HorizontalTotal = True
    f.Filter = "日期 Is Not Null"
    f.Build()
    DataTables("材料统计汇总").DataCols.Add("合计平均", Gettype(Double))
    For Each dr As DataRow In DataTables("材料统计汇总").DataRows
        Dim sum As Double = 0
        Dim count As Integer = 0
        For Each dc As DataCol In DataTables("材料统计汇总").DataCols
            If dc.Name Like "单价*" Then
                sum += dr(dc.Name)
                count += 1
            End If
        Next
        dr("合计平均") = sum / count
    Next
End If

Tables("材料统计_材料统计汇总表").DataSource = DataTables("材料统计汇总")


--  作者:don
--  发布时间:2015/6/19 12:21:00
--  
If Forms("材料统计").Opened Then
    Dim f As New CrossTableBuilder("材料统计汇总", DataTables("表A"))
    \'f.HGroups.AddDef("供应商")
    f.HGroups.AddDef("材料")
    \'f.HGroups.AddDef("型号规格")
    f.VGroups.AddDef("月", "{0}")
    f.Totals.AddDef("单价",AggregateEnum.Average,"单价")
    \'   f.HorizontalTotal = True
    f.Filter = "日期 Is Not Null"
    f.Build()
    Dim exp As String
    Dim dt As DataTable = DataTables("材料统计汇总")
    For Each dc As DataCol In dt.DataCols
        If dc.Name Like "单价*" Then
            exp +=  " + ["  & dc.Name & "]"
        End If
    Next
    exp = "(" & exp.Substring(3)  & ") / " &  dt.DataCols.Count-1
    
    dt.DataCols.Add("合計平均", Gettype(Double), exp)
    
    Tables("材料统计_材料统计汇总表").DataSource = dt
    
End If

--  作者:实话实说
--  发布时间:2015/6/19 13:22:00
--  

谢楼上2位老师代码。