以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.com/bbs/index.asp)
--  专家坐堂  (http://foxtable.com/bbs/list.asp?boardid=2)
----  交叉统计的垂直自动汇总合计行 不是在最后一行  (http://foxtable.com/bbs/dispbbs.asp?boardid=2&id=109012)

--  作者:fubblyc
--  发布时间:2017/11/2 16:02:00
--  交叉统计的垂直自动汇总合计行 不是在最后一行
甜老师,交叉统计的垂直自动汇总合计行 因为是两个统计表关联,然后就没有在最后一行,要怎么弄呢。。。
Dim b1 As New sqlCrossTableBuilder("统计表1","biaoA")
Dim dt1 As fxDataSource
b1.hGroups.AddDef("店仓ID")
b1.hGroups.AddDef("商品款号")
b1.hGroups.AddDef("店仓名称","销售数量_店仓名称")
b1.vGroups.AddDef("尺码", "销售数量_{0}")
b1.Totals.AddDef("销售数量"  ) \'根据产品分组
b1.filter =  filter & " and 商品款号 = \'" & e.Form.Controls("table1").Table.current("商品款号") & "\'"
b1.HorizontalTotal = True
b1.VerticalTotal = True
b1.CommandTimeOut = 600
dt1 = b1.BuildDataSource()

Dim b2 As New SQLcrossTableBuilder("统计表2","biaoB")
Dim dt2 As fxDataSource
b2.hGroups.AddDef("店仓ID")
b2.hGroups.AddDef("商品款号")
b2.hGroups.AddDef("店仓名称","可用库存_店仓名称")
b2.vGroups.AddDef("尺码", "可用库存_{0}")
b2.Totals.AddDef("可用库存")  \'根据产品分组
b2.filter = "商品款号 = \'" & e.Form.Controls("table1").Table.current("商品款号") & "\'"
b2.HorizontalTotal = True
b2.VerticalTotal = True
b2.CommandTimeOut = 600
dt2 = b2.BuildDataSource()

Dim nms As String() = {"商品款号","店仓ID"} \'指定连接列

dt1.Combine(nms,dt2,nms) \'将销售统计数据组合到进货统计数据

e.Form.Controls("table2").Table.DataSource = dt1


图片点击可在新窗口打开查看此主题相关图片如下:微信截图_20171102160035.png
图片点击可在新窗口打开查看


[此贴子已经被作者于2017/11/2 16:03:19编辑过]

--  作者:有点甜
--  发布时间:2017/11/2 16:10:00
--  

 

你可以在生成表格以后,自己加入一行,然后合计所有列的数据。


--  作者:fubblyc
--  发布时间:2017/11/2 16:18:00
--  
恩恩,甜老师,因为要统计的列是根据销售数据来,是变动的
所以也不知道哪些列有。

图片点击可在新窗口打开查看此主题相关图片如下:微信截图_20171102162136.png
图片点击可在新窗口打开查看

另外,像这种统计表,怎么再另外增加一行呢。。。
增加列我知道,增加行还不知道


[此贴子已经被作者于2017/11/2 16:20:35编辑过]

--  作者:有点甜
--  发布时间:2017/11/2 16:28:00
--  

循环不就可以了?

 

Dim t As Table = Tables("表A")
Dim nr As Row = t.AddNew
nr("第一列") = "合计"
For Each c As Col In t.cols
    If c.IsNumeric Then
        nr(c) = t.Compute("sum(" & c.name & ")")
    End If
Next


--  作者:fubblyc
--  发布时间:2017/11/2 16:32:00
--  
哦哦,谢谢甜老师!!!
--  作者:fubblyc
--  发布时间:2017/11/2 18:35:00
--  
甜老师,
我想让合计行放在第一行,能有办法吗?

这种统计表不支持移动行,所以用 move(0) 不行

我尝试把
Dim t As Table = Tables("表A")
Dim nr As Row = t.AddNew
放在统计的前面,会报错说没有哪一列。
因为后面有用到 
For Each dr As DataRow In e.Form.Controls("table2").Table.DataTable.DataRows
    dr("销量占比") = dr("合计_销售数量") / nr("合计_销售数量")
Next
[此贴子已经被作者于2017/11/2 18:37:02编辑过]

--  作者:有点甜
--  发布时间:2017/11/2 19:40:00
--  

插入一列_Sortkey列,如

 

Dim t As Table = Tables("统计表1")
t.DataTable.datacols.Add("_Sortkey", Gettype(Double))
t.sort = "_sortkey"
t.sort = ""
t.DataTable.ReplaceFor("_sortkey",  3)
Dim nr As Row = t.AddNew
nr.move(0)


--  作者:fubblyc
--  发布时间:2017/11/2 20:15:00
--  
厉害了,甜老师!!