以文本方式查看主题

-  Foxtable(狐表)  (http://www.foxtable.com/bbs/index.asp)
--  专家坐堂  (http://www.foxtable.com/bbs/list.asp?boardid=2)
----  [求助]一对多组合  (http://www.foxtable.com/bbs/dispbbs.asp?boardid=2&id=152399)

--  作者:lgj716330
--  发布时间:2020/7/11 14:41:00
--  [求助]一对多组合

Dim b As New GroupTableBuilder("统计表",DataTables("查询表1"))

Dim  dt As   fxDataSource

b.Groups.AddDef("部门名称")

 b.Groups.AddDef(HZ1)

b.Totals.AddDef("金额","本年销售")

 b.Filter = "年份 = " & N1 & " and (科目编号 Like \'600101%\' or 科目编号 like \'600102%\')  And (" & filter1 & ") and 金额<>0"

dt =   b.BuildDataSource()

 

Dim b1 As New GroupTableBuilder("统计表1",DataTables("查询表1"))

Dim  dt1 As   fxDataSource

b1.Groups.AddDef("部门名称")

 b1.Groups.AddDef(HZ1)

b1.Totals.AddDef("金额","上年销售")

 b1.Filter = "年份 = " & N2 & " and (科目编号 Like \'600101%\' or 科目编号 like \'600102%\')  And (" & filter1 & ") and 金额<>0"

dt1 =   b1.BuildDataSource()

 

Dim b2 As New GroupTableBuilder("统计表2",DataTables("查询表1"))

Dim  dt2 As   fxDataSource

b2.Groups.AddDef("开店日期",DateGroupEnum.None)

b2.Groups.AddDef("关店日期",DateGroupEnum.None)

 b2.Groups.AddDef("部门名称")

 b2.Groups.AddDef(HZ1)

 b2.Groups.AddDef(HZ3)

b2.Totals.AddDef("金额","本年费用")

 b2.Filter = "年份 = " & N1 & " and 科目编号 Like \'6601%\' And (" & filter1 & ") And (" & filter2 & ") and 金额<>0"

dt2 =   b2.BuildDataSource()

 

Dim b3 As New GroupTableBuilder("统计表3",DataTables("查询表1"))

Dim  dt3 As   fxDataSource

b3.Groups.AddDef("开店日期",DateGroupEnum.None)

b3.Groups.AddDef("关店日期",DateGroupEnum.None)

 b3.Groups.AddDef("部门名称")

 b3.Groups.AddDef(HZ1)

 b3.Groups.AddDef(HZ3)

b3.Totals.AddDef("金额","上年费用")

 b3.Filter = "年份 = " & N2 & " and 科目编号 Like \'6601%\' And (" & filter1 & ") And (" & filter2 & ") and 金额<>0"

dt3 =   b3.BuildDataSource()

 

 

Dim  nms As String()

Dim  nms1 As String()

 

nms =new String()  {"部门名称",HZ1}  \'指定连接列

nms1  =new String()  {"部门名称",HZ1,HZ3,"开店日期","关店日期"}  \'指定连接列

 

dt2.Combine(nms1,dt3,nms1)  \'将销售统计数据组合到进货统计数据

dt2.Combine(nms,dt,nms)  \'将销售统计数据组合到进货统计数据

dt2.Combine(nms,dt1,nms)  \'将销售统计数据组合到进货统计数据

 

 

Tables("店铺指标同期分析_Table1").DataSource = dt2 \'将统计结果绑定到Table

 

Dim t2 As Table = Tables("店铺指标同期分析_Table1")

Dim n11,m11 As Double

Dim bm As String = ""

For Each r As Row In t2.Rows

    If bm = r("部门名称") Then

        If r.IsNull("本年销售") = False Then

            n11 = r("本年销售")

        Else

            r("本年销售") = n11

        End If

        If r.IsNull("上年销售") = False Then

            m11 = r("上年销售")

        Else

            r("上年销售") = m11

        End If

 

    Else

        bm = r("部门名称")

        n11 = r("本年销售")

        m11 = r("上年销售")

    End If

Next


结果如下图所示


此主题相关图片如下:e8034ce2-33c2-427a-834d-c7497516ed29.png
按此在新窗口浏览图片


发现只要“本年费用”列前面部分有数据,后面部分为空,那空的部分对应的“本年销售”和“上年销售”列的数据就填充不下来

希望实现“本年销售”和“上年销售”同列里每个单元格的数据都有且都是相同的,要怎么调整


--  作者:有点蓝
--  发布时间:2020/7/11 14:50:00
--  
请上传实例测试
--  作者:lgj716330
--  发布时间:2020/7/11 14:52:00
--  
涉及的信息太多,没法传实例呢
--  作者:有点蓝
--  发布时间:2020/7/11 14:56:00
--  
新建项目,导入对应的表格,做一部分测试数据,发上来
--  作者:lgj716330
--  发布时间:2020/7/11 15:22:00
--  
算了,迂回解决一下,先把上年的填充好再合并过来



--  作者:lgj716330
--  发布时间:2020/11/3 17:17:00
--  

Dim m11,m12 As Double

Dim bm As String = ""

For Each r8 As Row In t3.Rows

    If bm = r8("部门名称") & r8("月份") Then

        If r8.IsNull("本年_实际销售") = False Then

            m11 = r8("本年_实际销售")

        Else

            r8("本年_实际销售") = m11

        End If   

    Else

        bm = r8("部门名称") & r8("月份")

        m11 = r8("本年_实际销售")

End If

Next

结果是下图这样


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


应该是下图这样,要如何调整

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


--  作者:有点蓝
--  发布时间:2020/11/3 17:26:00
--  
t3.filter = "本年_实际销售 is not null"
Dim dict As new Dictionary(of Integer,Double)
For Each r As Row In t3.rows
    If dict.ContainsKey(r("月份")) = False Then Dict.Add(r("月份"),r("本年_实际销售"))
Next

t3.filter = "本年_实际销售 is null"
For Each r As Row In t3.rows
    If dict.ContainsKey(r("月份"))  Then r("本年_实际销售") = Dict(r("月份"))
Next