以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.net/bbs/index.asp)
--  专家坐堂  (http://foxtable.net/bbs/list.asp?boardid=2)
----  [求助]交叉统计垂直占比  (http://foxtable.net/bbs/dispbbs.asp?boardid=2&id=74326)

--  作者:czy66ds
--  发布时间:2015/9/8 15:17:00
--  [求助]交叉统计垂直占比

使用交叉统计分析垂直占比,水平分组列不能大于一列吗?

 


图片点击可在新窗口打开查看此主题相关图片如下:交叉统计垂直占比.jpg
图片点击可在新窗口打开查看
 下载信息  [文件大小:   下载次数: ]
图片点击可在新窗口打开查看点击浏览该文件:交叉统计疑问.foxdb


--  作者:大红袍
--  发布时间:2015/9/8 15:41:00
--  

是有点问题,要用代码处理一下。

 

Dim g As New CrossTableBuilder("统计表1", DataTables("交叉统计测试"))
g.HGroups.AddDef("商品")
g.HGroups.AddDef("品名")
g.VGroups.AddDef("尺寸名")
g.Totals.AddDef("数量", "数量")
g.VerticalTotal = True
g.VerticalProportion = True
g.Build()

For Each c As Col In Tables("统计表1").Cols
    If c.Caption Like "*占比" Then
        Dim name As String = c.name.Replace("vp", "")
        Dim sum As Double = Tables("统计表1").Compute("sum(" & name & ")", "商品 <> \'合计\'")
        For Each r As Row In Tables("统计表1").Rows
            r(c.name) = r(name) / sum
        Next
    End If
   
Next
MainTable = Tables("统计表1")


--  作者:czy66ds
--  发布时间:2015/9/11 10:42:00
--  

谢谢。

二楼代码Dim name As String = c.name.Replace("vp", "")中的作用不太明白,尤其那个vp,怎么来的?

 

处理统计结果的表很有用。如果想生成水平份额代码该如何写?


--  作者:大红袍
--  发布时间:2015/9/11 11:00:00
--  

 水平份额直接写


Dim g As New CrossTableBuilder("统计表1", DataTables("交叉统计测试"))
g.HGroups.AddDef("商品")
g.HGroups.AddDef("品名")
g.VGroups.AddDef("尺寸名")
g.Totals.AddDef("数量", "数量")
g.VerticalTotal = True
g.VerticalProportion = True
g.HorizontalProportion = True
g.Build()

For Each c As Col In Tables("统计表1").Cols
    If c.Caption Like "*占比" Then
        Dim name As String = c.name.Replace("vp", "")
        Dim sum As Double = Tables("统计表1").Compute("sum(" & name & ")", "商品 <> \'合计\'")
        For Each r As Row In Tables("统计表1").Rows
            r(c.name) = r(name) / sum
        Next
    End If
   
Next
MainTable = Tables("统计表1")


--  作者:czy66ds
--  发布时间:2015/9/11 11:40:00
--  

这个g.HorizontalProportion = True我知道。

之所以求水平份额代码,是为了进一步学习增长处理统计结果表的知识。

另外,垂直占比代码中的“vp”是怎么回事?


--  作者:大红袍
--  发布时间:2015/9/11 11:46:00
--  

 你查看一下生成表的表结构就知道了

 

 水平份额,就是先循环每一列,合计总额,然后再逐列计算。

 

http://www.foxtable.com/help/topics/0193.htm