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


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

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

帅哥哟,离线,有人找我吗?
fubblyc
  11楼 | 信息 | 搜索 | 邮箱 | 主页 | 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编辑过]

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


加好友 发短信
等级:贵宾 帖子:39310 积分:196782 威望:0 精华:1 注册:2015/4/25 9:23:00
  发帖心情 Post By:2016/8/1 14:42:00 [只看该作者]

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 pdt As fxDataSource = Nothing
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


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.HGroups.AddDef("门店") '添加客户列用于水平分组
        bdn.HGroups.AddDef("库位") '添加客户列用于水平分组
        bdn.vGroups.AddDef("调整期间","调整期间_{0}") '添加客户列用于水平分组
        bdn.Totals.AddDef(ary3(i),ary4(i)) '添加数量列用于统计
        bdn.Totals.AddDef(ary3(i),ary4(i)) '添加数量列用于统计
        Dim dt = bdn.BuildDataSource()
       
        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
    End If
Next

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


 回到顶部
帅哥哟,离线,有人找我吗?
fubblyc
  13楼 | 信息 | 搜索 | 邮箱 | 主页 | 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编辑过]

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


加好友 发短信
等级:贵宾 帖子:39310 积分:196782 威望:0 精华:1 注册:2015/4/25 9:23:00
  发帖心情 Post By:2016/8/1 15:22:00 [只看该作者]

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 pdt As fxDataSource = Nothing
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


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.HGroups.AddDef("门店") '添加客户列用于水平分组
        bdn.HGroups.AddDef("库位") '添加客户列用于水平分组
        bdn.vGroups.AddDef("调整期间","调整期间_{0}") '添加客户列用于水平分组
        Dim ary6() As String = ary3(i).split("|")
        Dim ary7() As String = ary4(i).split("|")
        For j As Integer = 0 To ary6.length-1
            bdn.Totals.AddDef(ary6(j),ary7(j)) '添加数量列用于统计
        End If

        Dim dt = bdn.BuildDataSource()
       
        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
    End If
Next

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


 回到顶部
帅哥哟,离线,有人找我吗?
fubblyc
  15楼 | 信息 | 搜索 | 邮箱 | 主页 | 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
  16楼 | 信息 | 搜索 | 邮箱 | 主页 | 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编辑过]

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


加好友 发短信
等级:九尾狐 帖子:2355 积分:16187 威望:0 精华:0 注册:2013/9/1 8:09:00
  发帖心情 Post By:2016/8/1 17:08:00 [只看该作者]

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

 

现在是这样写,三次 统计了 库位销售分析,效率低下。一直没搞成功。。。怎么才能治统计一次。。。

Dim ary1() As String = {"CheckBox8", "CheckBox9", "CheckBox10","CheckBox11","CheckBox12"}
Dim ary2() As String = {"陈列量", "动销量", "库位销售分析","库位销售分析","库位销售分析" }  '表名
Dim ary3() As String = {"陈列量", "动销量", "销售数量","销售金额", "销售金额|吊牌金额"}   '列名
Dim ary4() As String = {"陈列sku数", "动销sku数","销售数量","销售金额", "销售金额|吊牌金额"} '列标题名
Dim ary5() As String = {"统计表1", "统计表2", "统计表3","统计表4","统计表5"}   '统计表


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


加好友 发短信
等级:贵宾 帖子:39310 积分:196782 威望:0 精华:1 注册:2015/4/25 9:23:00
  发帖心情 Post By:2016/8/1 18:12:00 [只看该作者]

Dim ary1() As String = {"CheckBox8", "CheckBox9", "CheckBox10|CheckBox11"}
Dim ary2() As String = {"陈列量", "动销量","库位销售分析"}  '表名
Dim ary3() As String = {"陈列量", "动销量", "销售数量|销售金额,吊牌金额"}   '列名
Dim ary4() As String = {"陈列sku数", "动销sku数", "销售件数|销售金额,吊牌金额"} '列名
Dim ary5() As String = {"统计表1", "统计表2", "统计表3"}   '统计表

Dim pdt As fxDataSource = Nothing
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


For i As Integer = 0 To ary1.length - 1
    Dim ary8() As String = ary1(i).split("|")
    Dim isChecked = False
    For Each s As String In ary8
        If e.form.controls(s).checked Then
            isChecked = True
        End If
    Next
   
    If isChecked Then
        Dim bdn As New SQLcrossTableBuilder(ary5(i),ary2(i))
       
        bdn.HGroups.AddDef("门店") '添加客户列用于水平分组
        bdn.HGroups.AddDef("库位") '添加客户列用于水平分组
        bdn.vGroups.AddDef("调整期间","调整期间_{0}") '添加客户列用于水平分组
        Dim ary6() As String = ary3(i).split("|")
        Dim ary7() As String = ary4(i).split("|")
        For k As Integer = 0 To ary8.length - 1
            If e.form.controls(ary8(k)).checked Then
                Dim ary9() As String = ary6(k).split(",")
                Dim ary10() As String = ary7(k).split(",")
                For j As Integer = 0 To ary9.length-1
                    bdn.Totals.AddDef(ary9(j),ary10(j)) '添加数量列用于统计
                next
               
            End If
        Next
       
       
        Dim dt = bdn.BuildDataSource()
       
        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
    End If
Next

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


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


加好友 发短信
等级:九尾狐 帖子:2355 积分:16187 威望:0 精华:0 注册:2013/9/1 8:09:00
  发帖心情 Post By:2016/8/1 22:29:00 [只看该作者]

真是没有做不到,只有想不到。狐表厉害,红袍老师牛!!得好好消化下!!

 

哈哈,还有一个问题:

If Tables(e.Form.Name & "_table1").Cols.Contains("吊牌金额_1")  Then
Dim c As Col = Tables(e.Form.Name & "_table1").Cols("吊牌金额_1")
Dim s1 As String = c.Caption.SubString(0,27)  '这个是为了得到 表头,使得新增的列的标题的列头和其他的一样。
DataTables(e.Form.Name & "_table1").DataCols.Add("销售折扣",Gettype(Double), "销售金额_1 / 吊牌金额_1",s1 & "销售折扣")  

end if

 

就是如果表中有 吊牌金额 这一列,就要增加列:销售折扣。

问题是:现在是写死的,吊牌金额_1,但是吊牌金额可能是_1,_2,_3.

 

因为:统计代码  bdn.vGroups.AddDef("调整期间","调整期间_{0}")

 

那增加列 的 代码要怎么写呢?

 

我尝试这样写:

 

for each c2 as col in Tables(e.Form.Name & "_table1").cols

if c2.name.startwith("吊牌金额") = true then  ' 我是想获取是 吊牌金额 的列 的集合,再去遍历取值增加列,但是这个不行,只是判断

。。。

 


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


加好友 发短信
等级:狐神 帖子:5015 积分:25363 威望:0 精华:0 注册:2015/8/18 9:21:00
  发帖心情 Post By:2016/8/2 10:47:00 [只看该作者]

For Each c2 As Col In Tables(e.Form.Name & "_table1").cols
    If c2.name.startwith("吊牌金额") = True Then
        Dim c As Col = Tables(e.Form.Name & "_table1").Cols(c2.name)
        Dim s1 As String = c.Caption.SubString(0,27)  '这个是为了得到 表头,使得新增的列的标题的列头和其他的一样.
        DataTables(e.Form.Name & "_table1").DataCols.Add("销售折扣",Gettype(Double), "销售金额_" & c2.name.Replace("吊牌金额_","") & " / " & c2.name ,s1 & "销售折扣")
    End If
Next

 回到顶部
总数 26 上一页 1 2 3 下一页