Foxtable(狐表)用户栏目专家坐堂 → [求助]不确定列名的计算


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

主题:[求助]不确定列名的计算

帅哥,在线噢!
lgj716330
  1楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:六尾狐 帖子:1387 积分:10693 威望:0 精华:0 注册:2013/11/8 15:27:00
[求助]不确定列名的计算  发帖心情 Post By:2019/9/27 17:43:00 [只看该作者]

Dim b As New GroupTableBuilder("统计表","表1")
Dim  dt As   fxDataSource
 b.Groups.AddDef("部门名称")
 b.Totals.AddDef("金额","销售金额")
dt =   b.BuildDataSource()

Dim b1 As New SQLCrossTableBuilder("统计表1","表2")
Dim  dt1 As   fxDataSource
 b1.HGroups.AddDef("部门名称")
 b1.VGroups.AddDef("成本大类")‘此处的成本大类名称可能会随时调整,
 b1.Totals.AddDef("金额")
dt1 =   b1.BuildDataSource()

上面“表2”的成本大类的名称可能会随时改变,导致交叉统计的列名称和列数都不固定,我需要计算b1各个成本大类占b中的销售的比率,由于列名称和列数不固定,用下面这种方法好象也处理不了,有没有其他办法解决呢

Dim dic As new Dictionary(of String, String) 
For Each c As Col  In Tables("汇总表_Table1").cols
    dic.add(c.Caption, c.name)
Next
If dic.ContainsKey("销售金额") = False Then
    DataTables("汇总表_Table1").dataCols.add("销售金额", Gettype(Double))
    dic.add("销售金额", "销售金额")
End If

 回到顶部
帅哥,在线噢!
lgj716330
  2楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:六尾狐 帖子:1387 积分:10693 威望:0 精华:0 注册:2013/11/8 15:27:00
  发帖心情 Post By:2019/9/27 19:39:00 [只看该作者]

知道怎么解决了

以交叉统计的形式,统计每个客户订购不同产品的数量和金额:

Dim dtb As New DataTableBuilder("统计")
dtb.AddDef(
"客户"Gettype(String), 16)
Dim 
prds As List(of String) = DataTables("订单").GetValues("产品")
For Each 
prd As String In prds
    dtb.AddDef(prd & "_数量", Gettype(Integer))
    dtb.AddDef(prd & 
"_金额"Gettype(Double))
Next 

dtb.Build()

For
 Each cus As String In DataTables("订单").GetValues("客户")
    Dim
 dr As DataRow = DataTables("统计"
).AddNew()
    dr(
"客户") = cus
    For
 Each prd As String In
 prds
        dr(prd & 
"_数量") = DataTables("订单").Compute("Sum(数量)","客户 = '" & cus & "' And [产品] = '" & prd & "'")
        dr(prd & 
"_金额") = DataTables("订单").Compute("Sum(金额)","客户 = '" & cus & "' And [产品] = '" & prd & "'")
    Next
Next
MainTable
Tables("统计")

[此贴子已经被作者于2019/9/27 19:47:55编辑过]

 回到顶部
帅哥,在线噢!
lgj716330
  3楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:六尾狐 帖子:1387 积分:10693 威望:0 精华:0 注册:2013/11/8 15:27:00
  发帖心情 Post By:2019/9/28 10:28:00 [只看该作者]

Dim r1 As Row
For i As Integer = 0 To t1.Rows.Count(True) - 1
    r1 = t1.Rows(i,True)
    For Each prd As String In prds
        Dim xs As Double = DataTables("费用构成情况_Table1").Compute("Sum(销售金额)","部门名称 = '" & r1("部门名称") & "' And " & HZ3 & " = '" & prd & "'")
        If r1.IsGroup And xs <> 0 Then
        r1(prd & "_销售占比") = DataTables("费用构成情况_Table1").Compute("Sum(费用金额)","部门名称 = '" & r1("部门名称") & "' And " & HZ3 & " = '" & prd & "'")/DataTables("费用构成情况_Table1").Compute("Sum(销售金额)","部门名称 = '" & r1("部门名称") & "' And " & HZ3 & "  = '" & prd & "'")
        ElseIf r1.IsGroup And xs = 0 Then
        r1(prd & "_销售占比") =0
        End If
    Next
Next

上面标红部分,汇总行的计算代码不对,应该怎么调整
[此贴子已经被作者于2019/9/28 13:30:40编辑过]

 回到顶部
帅哥,在线噢!
有点蓝
  4楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:超级版主 帖子:110574 积分:562760 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2019/9/28 10:42:00 [只看该作者]

For i As Integer = 0 To t1.Rows.Count(True) - 1
    r1 = t1.Rows(i,True)
msgbo(r1("部门名称"))这里显示什么内容?汇总后部门名称列的数据是怎么样的?截图看看

 回到顶部
帅哥,在线噢!
lgj716330
  5楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:六尾狐 帖子:1387 积分:10693 威望:0 精华:0 注册:2013/11/8 15:27:00
  发帖心情 Post By:2019/9/28 11:11:00 [只看该作者]


不知咋回事,上传不了图,根据提示,汇总行计算中," & HZ3 & " = '" & prd & "'这里不对,提示未找到列

 回到顶部
帅哥,在线噢!
有点蓝
  6楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


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


msgbox("部门名称 = '" & r1("部门名称") & "' And " & HZ3 & " = '" & prd & "'") 显示什么内容?

 回到顶部
帅哥,在线噢!
lgj716330
  7楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:六尾狐 帖子:1387 积分:10693 威望:0 精华:0 注册:2013/11/8 15:27:00
  发帖心情 Post By:2019/9/28 12:21:00 [只看该作者]




[此贴子已经被作者于2019/9/28 13:27:28编辑过]

 回到顶部
帅哥,在线噢!
lgj716330
  8楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:六尾狐 帖子:1387 积分:10693 威望:0 精华:0 注册:2013/11/8 15:27:00
  发帖心情 Post By:2019/9/28 12:34:00 [只看该作者]

唉,解决了,是自己想多了
Dim r1 As Row
For i As Integer = 0 To t1.Rows.Count(True) - 1
    r1 = t1.Rows(i,True)
    For Each prd As String In prds
        If r1.IsGroup Then
        If r1("销售金额") <> 0 Then
        r1(prd & "_销售占比") = r1(prd & "_费用金额")/r1("销售金额")
        ElseIf r1("销售金额") = 0 Then
        r1(prd & "_销售占比") =0
        End If
        End If
    Next
Next


[此贴子已经被作者于2019/9/28 13:27:04编辑过]

 回到顶部