以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.com/bbs/index.asp)
--  专家坐堂  (http://foxtable.com/bbs/list.asp?boardid=2)
----  交叉统计问题  (http://foxtable.com/bbs/dispbbs.asp?boardid=2&id=162288)

--  作者:fubblyc
--  发布时间: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
--  发布时间:2021/4/12 11:20:00
--  
老师,要是这样的结果:

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


--  作者:fubblyc
--  发布时间:2021/4/12 11:21:00
--  
要统计的明细表是这样:

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


--  作者:有点蓝
--  发布时间:2021/4/12 11:34:00
--  
请导出这个表测试
--  作者:fubblyc
--  发布时间:2021/4/12 11:48:00
--  
老师,是这样:

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


--  作者:fubblyc
--  发布时间:2021/4/12 11:50:00
--  
其实就是分组统计,只是把所属年份 月份 改放在横向上
--  作者:有点蓝
--  发布时间:2021/4/12 11:56:00
--  
请导出这个表部分数据测试
[此贴子已经被作者于2021/4/12 11:56:29编辑过]

--  作者:fubblyc
--  发布时间:2021/4/12 12:03:00
--  
老师,数据如下:
 下载信息  [文件大小:   下载次数: ]
图片点击可在新窗口打开查看点击浏览该文件:账单明细.xls



--  作者:有点蓝
--  发布时间: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