Foxtable(狐表)用户栏目专家坐堂 → 交叉统计问题


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

主题:交叉统计问题

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


加好友 发短信
等级:九尾狐 帖子:2355 积分:16187 威望:0 精华:0 注册:2013/9/1 8:09:00
交叉统计问题  发帖心情 Post By:2021/4/12 11:12:00 [只看该作者]

老师好,


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

Dim tb As Table = e.form.Controls("table1").Table

Dim bd1 As New sqlCrossTableBuilder("挂账与未收回统计表","vwBookBill" )
bd1.ConnectionName = gs_strActiveConn
Dim dt1 As fxDataSource
bd1.HGroups.AddDef("部门","部门")
bd1.HGroups.AddDef("agent_user_name","姓名") '根据名称分组
bd1.HGroups.AddDef("customer_name","企业客户") '根据名称分组
bd1.vGroups.AddDef("belong_year","年份") '添加产品列用于垂直分组
bd1.VGroups.AddDef("belong_month","月份") '添加产品列用于垂直分组

bd1.vGroups.AddDef("coll_item","账单内容") '根据名称分组
bd1.vGroups.AddDef("coll_state","账单状态") '对金额进行统计
bd1.vGroups.AddDef("coll_time","收款时间") '对金额进行统计
bd1.vGroups.AddDef("coll_type","收款方式") '对金额进行统计

bd1.Totals.AddDef("coll_amount","账单金额") '对金额进行统计
bd1.HorizontalTotal = True
bd1.filter = filter_agent
bd1.VerticalTotal = True
dt1 = bd1.BuildDataSource()



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


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

老师,要是这样的结果:

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


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


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

要统计的明细表是这样:

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


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


加好友 发短信
等级:超级版主 帖子:110738 积分:563610 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2021/4/12 11:34:00 [只看该作者]

请导出这个表测试

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


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

老师,是这样:

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


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


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

其实就是分组统计,只是把所属年份 月份 改放在横向上

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


加好友 发短信
等级:超级版主 帖子:110738 积分:563610 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2021/4/12 11:56:00 [只看该作者]

请导出这个表部分数据测试
[此贴子已经被作者于2021/4/12 11:56:29编辑过]

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


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

老师,数据如下:
 下载信息  [文件大小:   下载次数: ]
图片点击可在新窗口打开查看点击浏览该文件:账单明细.xls



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


加好友 发短信
等级:超级版主 帖子:110738 积分:563610 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2021/4/12 14:02:00 [只看该作者]

参考:

Dim bd1 As New sqlCrossTableBuilder("挂账与未收回统计表","要统计的明细表测试数据" )
'bd1.ConnectionName = gs_strActiveConn
bd1.HGroups.AddDef("客户名称")
bd1.HGroups.AddDef("经办人部门") '根据名称分组
bd1.HGroups.AddDef("经办人") '根据名称分组
bd1.vGroups.AddDef("所属年份") '添加产品列用于垂直分组
bd1.VGroups.AddDef("所属月份") '添加产品列用于垂直分组

bd1.Totals.AddDef("收款金额") '对金额进行统计
bd1.HorizontalTotal = True

bd1.VerticalTotal = True
bd1.Build

Dim dict As new Dictionary(of String,String)
For Each c As Col In Tables("挂账与未收回统计表").Cols
    If c.Name.Contains("_")
        If c.Caption > "" Then
            dict.Add(c.Caption,c.Name)
        Else
            dict.Add(c.Name,c.Name)
        End If
    End If
Next

Dim Products As List(Of String()) = DataTables("要统计的明细表测试数据").GetValues("所属年份|所属月份")
For Each s1 As String() In Products
    Dim s As String = s1(0) & "_" & s1(1)
    Dim idx As Integer = Tables("挂账与未收回统计表").Cols(dict(s)).Index
    Tables("挂账与未收回统计表").Cols(dict(s)).Caption = s & "_收款金额"
    
    DataTables("挂账与未收回统计表").DataCols.Add(s & "_收款状态",Gettype(String),32)
    Tables("挂账与未收回统计表").Cols(s & "_收款状态").Move(idx)
    DataTables("挂账与未收回统计表").DataCols.Add(s & "_收款项目",Gettype(String),32)
    Tables("挂账与未收回统计表").Cols(s & "_收款项目").Move(idx)
    DataTables("挂账与未收回统计表").DataCols.Add(s & "_收款项目类型",Gettype(String),32)
    Tables("挂账与未收回统计表").Cols(s & "_收款项目类型").Move(idx)
Next

Dim dr As DataRow
Dim s2() As String = {"收款项目类型","收款项目","收款状态"}
For Each r As Row In Tables("挂账与未收回统计表").Rows
    If r("客户名称") <> "合计" Then
        For Each s1 As String() In Products
            dr = DataTables("要统计的明细表测试数据").Find("客户名称='" & r("客户名称") & "' And 经办人部门='" & r("经办人部门") & "' and 经办人='" & r("经办人") & "' and 所属年份=" & s1(0) & " And 所属月份=" & s1(1))
            If dr IsNot Nothing Then
                Dim s As String = s1(0) & "_" & s1(1) & "_"
                For Each ss As String In s2
                    r(s & ss) = dr(ss)
                Next
                
            End If
        Next
    End If
Next


 回到顶部