以文本方式查看主题 - 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 -- 交叉统计问题 老师好, 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 -- 老师,要是这样的结果: |
-- 作者:fubblyc -- 发布时间:2021/4/12 11:21:00 -- 要统计的明细表是这样: |
-- 作者:有点蓝 -- 发布时间:2021/4/12 11:34:00 -- 请导出这个表测试 |
-- 作者:fubblyc -- 发布时间:2021/4/12 11:48:00 -- 老师,是这样: |
-- 作者: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 -- 老师,数据如下: |
-- 作者:有点蓝 -- 发布时间: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 |