Foxtable(狐表)用户栏目专家坐堂 → 遍历统计工具,组合统计


  共有3312人关注过本帖树形打印复制链接

主题:遍历统计工具,组合统计

帅哥哟,离线,有人找我吗?
fubblyc
  1楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:九尾狐 帖子:2355 积分:16187 威望:0 精华:0 注册:2013/9/1 8:09:00
遍历统计工具,组合统计  发帖心情 Post By:2016/8/1 10:17:00 [显示全部帖子]


此主题相关图片如下:13.png
按此在新窗口浏览图片

三个统计表,如上,想根据不同的选择情况进行组合统计。

不想分别做三个统计工具,而是想用比如 遍历 的方式 来 根据勾选的情况 ,进行 遍历统计 再 组合。

现在不知道 遍历 统计  怎么写。。。 

 


Dim dt3 As fxDataSource
Dim dt2 As fxDataSource
Dim dt1 As fxDataSource

 

Dim m As String

If  e.Form.Controls("CheckBox8").checked  Then

m = "陈列量"

end if

If  e.Form.Controls("CheckBox9").checked  Then

m = "动销量"

end if

 

If  e.Form.Controls("CheckBox10").checked  Then

m = "库位销售分析"

end if


Dim bdns As String() = {"bd1","bd2","bd3"}
For Each bdn As String In bdns
    

       
    Dim bdn As New SQLcrossTableBuilder("统计表3",m)
   
    bdn.C
    bdn.HGroups.AddDef("门店") '添加客户列用于水平分组
    bdn.HGroups.AddDef("库位") '添加客户列用于水平分组    
    bdn.vGroups.AddDef("调整期间","调整期间_{0}") '添加客户列用于水平分组
   
    If  e.Form.Controls("CheckBox8").checked  Then    '统计陈列量这张表
        forms("提示窗口").Controls("Label1").text = "正在统计陈列sku数..."
        Application.DoEvents
        bdn.Totals.AddDef("陈列量","陈列sku数") '添加数量列用于统计
        bdn.Totals.AddDef("陈列量","陈列sku数") '添加数量列用于统计
        bdn.filter = filter
        dt3 = bdn.BuildDataSource()
    End If
   
    If  e.Form.Controls("CheckBox9").checked  Then
        forms("提示窗口").Controls("Label1").text = "正在统计动销sku数..."
        Application.DoEvents
        bdn.Totals.AddDef("动销量","动销sku数") '添加数量列用于统计
        bdn.Totals.AddDef("动销量","动销sku数") '添加数量列用于统计
        bdn.filter = filter
        bdn.CommandTimeOut = 600
        dt2 = bdn.BuildDataSource()
    End If
   
    If e.Form.Controls("CheckBox10").checked Then
        bdn.Totals.AddDef("销售数量","销售件数") '添加数量列用于统计        
        If filter2 >"" Then
            filter =filter & " And " & filter2
        End If
        bdn.filter = filter
        bdn.CommandTimeOut = 600
        dt1 = bdn.BuildDataSource()               
    End If
Next

 

For Each c As Object In e.Form.controls("groupbox3").children
    If c.checked Then
        ls.add(c.text)
    End If
Next
Dim nms As String() = ls.ToArray


Dim dts() As fxDataSource = {dt3,dt2,dt1}
Dim pdt As fxDataSource = Nothing
For Each dt As object In dts
    If pdt Is Nothing AndAlso dt IsNot Nothing Then
        pdt = dt
    Else
        If pdt IsNot Nothing AndAlso dt IsNot Nothing Then
            pdt.Combine(nms,dt,nms)
        End If
    End If
Next

Tables(e.Form.Name & "_table1").StopRedraw
Tables(e.Form.Name & "_table1").DataSource = pdt


[此贴子已经被作者于2016/8/1 10:19:35编辑过]

 回到顶部
帅哥哟,离线,有人找我吗?
fubblyc
  2楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:九尾狐 帖子:2355 积分:16187 威望:0 精华:0 注册:2013/9/1 8:09:00
  发帖心情 Post By:2016/8/1 10:29:00 [显示全部帖子]

主要是表名不一样,列名前面的分组的都一样,后面的统计列 可以 按 if 条件来。。。

分开写感觉代码很多,因为还有分组的列名有好多,而且都是一样的。所以就像试一下。

现在就不知道怎么把 表名  写成 数组里,然后遍历。。。

[此贴子已经被作者于2016/8/1 10:29:31编辑过]

 回到顶部
帅哥哟,离线,有人找我吗?
fubblyc
  3楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:九尾狐 帖子:2355 积分:16187 威望:0 精华:0 注册:2013/9/1 8:09:00
  发帖心情 Post By:2016/8/1 11:23:00 [显示全部帖子]

嗯嗯,有个问题:

Dim ms As String()
If e.Form.Controls("CheckBox8").checked And e.Form.Controls("CheckBox9").checked And e.Form.Controls("CheckBox10").checked   Then
ms = {"陈列量","动销量","库位销售分析"}

 

 

下面的统计,每遍历一次,因为 CheckBox8 和 CheckBox9 和 CheckBox10 都有勾上,两个都会再统计一次。那问题:

    If  e.Form.Controls("CheckBox8").checked  Then   '遍历到 m = 动销量 时,就会报错,因为动销量的表 没有 陈列量 的这一列。有办法规避吗?
        bdn.Totals.AddDef("陈列量","陈列sku数") '添加数量列用于统计
        bdn.filter = filter
        dt3 = bdn.BuildDataSource()
    End If
    If e.Form.Controls("CheckBox9").checked  Then
        bdn.Totals.AddDef("动销量","动销sku数") '添加数量列用于统计
        bdn.filter = filter
        dt2 = bdn.BuildDataSource()
    End If
    ......省略。。。
Next


 回到顶部
帅哥哟,离线,有人找我吗?
fubblyc
  4楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:九尾狐 帖子:2355 积分:16187 威望:0 精华:0 注册:2013/9/1 8:09:00
  发帖心情 Post By:2016/8/1 11:56:00 [显示全部帖子]

 

[此贴子已经被作者于2016/8/1 12:01:13编辑过]

 回到顶部
帅哥哟,离线,有人找我吗?
fubblyc
  5楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:九尾狐 帖子:2355 积分:16187 威望:0 精华:0 注册:2013/9/1 8:09:00
  发帖心情 Post By:2016/8/1 11:57:00 [显示全部帖子]

 

[此贴子已经被作者于2016/8/1 12:00:56编辑过]

 回到顶部
帅哥哟,离线,有人找我吗?
fubblyc
  6楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:九尾狐 帖子:2355 积分:16187 威望:0 精华:0 注册:2013/9/1 8:09:00
  发帖心情 Post By:2016/8/1 14:06:00 [显示全部帖子]

 

[此贴子已经被作者于2016/8/1 14:07:51编辑过]

 回到顶部
帅哥哟,离线,有人找我吗?
fubblyc
  7楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:九尾狐 帖子:2355 积分:16187 威望:0 精华:0 注册:2013/9/1 8:09:00
  发帖心情 Post By:2016/8/1 14:34:00 [显示全部帖子]

出现了一个错误。不知道是什么原因。。。

 
此主题相关图片如下:14.png
按此在新窗口浏览图片

Dim dt3 As fxDataSource
Dim dt2 As fxDataSource
Dim dt1 As fxDataSource

 

Dim ary1() As String = {"CheckBox8", "CheckBox9", "CheckBox10"}
Dim ary2() As String = {"陈列量", "动销量","库位销售分析"}  '表名
Dim ary3() As String = {"陈列量", "动销量", "销售件数"}   '列名
Dim ary4() As String = {"陈列sku数", "动销sku数", "销售件数"}   '列名
Dim ary5() As String = {"统计表1", "统计表2", "统计表3"}   '统计表
Dim ary6() As fxDataSource = {dt3,dt2,dt1}


For i As Integer = 0 To ary1.length - 1
    If e.form.controls(ary1(i)).checked Then
        Dim bdn As New SQLcrossTableBuilder(ary5(i),ary2(i))
        bdn.C
        bdn.HGroups.AddDef("门店") '添加客户列用于水平分组
        bdn.HGroups.AddDef("库位") '添加客户列用于水平分组
        bdn.vGroups.AddDef("调整期间","调整期间_{0}") '添加客户列用于水平分组
        bdn.Totals.AddDef(ary3(i),ary4(i)) '添加数量列用于统计
        bdn.Totals.AddDef(ary3(i),ary4(i)) '添加数量列用于统计
        ary6(i) = bdn.BuildDataSource()
       
        Dim ls As new List(of String)
        ls.add("门店")
        ls.add("库位")
        For Each c As Object In e.Form.controls("groupbox3").children
            If c.checked Then
                ls.add(c.text)
            End If
        Next
        Dim nms As String() = ls.ToArray
       
       
        'Dim dts() As fxDataSource = {dt3,dt2,dt1}   '采用原来这个也是报同样的错
        Dim pdt As fxDataSource = Nothing
        For Each dt As object In ary6()
            If pdt Is Nothing AndAlso dt IsNot Nothing Then
                pdt = dt
            Else
                If pdt IsNot Nothing AndAlso dt IsNot Nothing Then
                    pdt.Combine(nms,dt,nms)
                End If
            End If
        Next
       
    End If
Next

Tables(e.Form.Name & "_table1").StopRedraw
Tables(e.Form.Name & "_table1").DataSource = pdt


 

[此贴子已经被作者于2016/8/1 14:36:24编辑过]

 回到顶部
帅哥哟,离线,有人找我吗?
fubblyc
  8楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:九尾狐 帖子:2355 积分:16187 威望:0 精华:0 注册:2013/9/1 8:09:00
  发帖心情 Post By:2016/8/1 15:15:00 [显示全部帖子]

 

[此贴子已经被作者于2016/8/1 15:17:20编辑过]

 回到顶部
帅哥哟,离线,有人找我吗?
fubblyc
  9楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:九尾狐 帖子:2355 积分:16187 威望:0 精华:0 注册:2013/9/1 8:09:00
  发帖心情 Post By:2016/8/1 16:17:00 [显示全部帖子]


完美。这段没问题。

另一个问题:一个表里要统计两个字段,而刚写的是一一对应的,要怎么改呢。。

Dim ary1() As String = {"CheckBox8", "CheckBox9", "CheckBox10", "CheckBox11"}

Dim ary2() As String = {"陈列量", "动销量",                 "库位销售分析",“库位销售分析}  '表名
Dim ary3() As String = {"陈列量", "动销量",                  "销售数量","      "销售金额","吊牌金额"}   '列名  checkbox11 选的话,要同时统计两个字段,因为后面要计算销售折扣(=销售金额/吊牌金额),所以要两个字段同时统计

Dim ary4() As String = {"陈列sku数", "动销sku数",         "销售件数",      "销售金额","吊牌金额"} '列名
Dim ary5() As String = {"统计表1", "统计表2", "统计表3"}   '统计表

 

另外,后面的 "CheckBox10", "CheckBox11" ,都是统计 库位销售分析  同一张表,能不能不组合统计,效率会高一点。

 

 

[此贴子已经被作者于2016/8/1 16:18:37编辑过]

 回到顶部
帅哥哟,离线,有人找我吗?
fubblyc
  10楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:九尾狐 帖子:2355 积分:16187 威望:0 精华:0 注册:2013/9/1 8:09:00
  发帖心情 Post By:2016/8/1 16:32:00 [显示全部帖子]

 

[此贴子已经被作者于2016/8/1 16:31:55编辑过]

 回到顶部
总数 17 1 2 下一页