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


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

主题:跨表统计问题

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


加好友 发短信
等级:幼狐 帖子:52 积分:1030 威望:0 精华:0 注册:2012/2/26 22:20:00
跨表统计问题  发帖心情 Post By:2019/11/10 17:09:00 [只看该作者]

帮忙修改一下代码:

当跨表合计数 Sum()等于空值或0时计算就会出现转换类型错误。

 

 

If e.DataCol.Name  = "所属部门" OrElse e.DataCol.Name = "所属编制"  Then
    Dim Filter As String = "[所属部门] = '" & e.DataRow("所属部门") & "' and [所属编制] = '" & e.DataRow("所属编制") & "'"
    Dim Filter2 As String = "[所属编制] = '" & e.DataRow("所属编制") & "'"
    Dim Filter3 As String = "[体制] = '" & e.DataRow("体制") & "'"
    e.DataRow("人数") = DataTables("在职人员信息").Compute("Count(姓名)", Filter)
    e.DataRow("基本基数") = DataTables("在职人员信息").Compute("Sum(基本基数)", Filter)
    e.DataRow("补充基数") = DataTables("在职人员信息").Compute("Sum(补充基数)", Filter)
    e.DataRow("基养个人") = DataTables("在职人员信息").Compute("Sum(个人_养老保险)", Filter)
    e.DataRow("基医个人") = DataTables("在职人员信息").Compute("Sum(个人_医疗保险)", Filter)
    e.DataRow("失业个人") = DataTables("在职人员信息").Compute("Sum(个人_失业保险)", Filter)
    e.DataRow("年金个人") = DataTables("在职人员信息").Compute("Sum(个人_年金)", Filter)
    e.DataRow("年金企业") = DataTables("在职人员信息").Compute("Sum(企业_年金)", Filter)
    e.DataRow("基本公积金") = DataTables("在职人员信息").Compute("Sum(基本公积金企业)", Filter) + DataTables("在职人员信息").Compute("Sum(基本公积金个人)", Filter)
    e.DataRow("补充公积金") = DataTables("在职人员信息").Compute("Sum(补充公积金企业)", Filter) + DataTables("在职人员信息").Compute("Sum(补充公积金个人)", Filter)
    e.DataRow("统筹内") = format(DataTables("在职人员信息").Compute("Sum(基本基数)", Filter) / DataTables("在职人员信息").Compute("Sum(基本基数)", Filter2) * DataTables("社保下达").Compute("Sum(其中养统内)", Filter2 ) +0.001,"#")
    e.DataRow("统筹外") = format(DataTables("在职人员信息").Compute("Sum(基本基数)", Filter) / DataTables("在职人员信息").Compute("Sum(基本基数)", Filter2) * DataTables("社保下达").Compute("Sum(统筹外)", Filter2 ) +0.001,"#")
    e.DataRow("基养企业") = format(DataTables("在职人员信息").Compute("Sum(基本基数)", Filter) / DataTables("在职人员信息").Compute("Sum(基本基数)", Filter3) * DataTables("社保下达").Compute("Sum(基养企业)", Filter3 ) , "0.00")
    e.DataRow("基医企业") = format(DataTables("在职人员信息").Compute("Sum(基本基数)", Filter) / DataTables("在职人员信息").Compute("Sum(基本基数)", Filter3) * DataTables("社保下达").Compute("Sum(基医企业)", Filter3 ) , "0.00")
    e.DataRow("失保企业") = format(DataTables("在职人员信息").Compute("Sum(基本基数)", Filter) / DataTables("在职人员信息").Compute("Sum(基本基数)", Filter3) * DataTables("社保下达").Compute("Sum(失业企业)", Filter3 ) , "0.00")
    e.DataRow("工伤企业") = format(DataTables("在职人员信息").Compute("Sum(基本基数)", Filter) / DataTables("在职人员信息").Compute("Sum(基本基数)", Filter3) * DataTables("社保下达").Compute("Sum(工伤保险)", Filter3 ) , "0.00")
    e.DataRow("生育保险") = format(DataTables("在职人员信息").Compute("Sum(基本基数)", Filter) / DataTables("在职人员信息").Compute("Sum(基本基数)", Filter3) * DataTables("社保下达").Compute("Sum(生育保险)", Filter3 ) , "0.00")
    e.DataRow("补充医疗") = format(DataTables("在职人员信息").Compute("Sum(基本基数)", Filter) / DataTables("在职人员信息").Compute("Sum(基本基数)", Filter3) * DataTables("社保下达").Compute("Sum(补医合计)", Filter3 ) , "0.00")
End If

 

 


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


加好友 发短信 一级勋章
等级:超级版主 帖子:7235 积分:40550 威望:0 精华:16 注册:2008/8/31 23:23:00
  发帖心情 Post By:2019/11/10 20:02:00 [只看该作者]

提示:0不能做除数,判断/后面的值为0时,结果为0,否则,源代码除数计算式不变!

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


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

比如

e.DataRow("统筹内") = format(DataTables("在职人员信息").Compute("Sum(基本基数)", Filter) / DataTables("在职人员信息").Compute("Sum(基本基数)", Filter2) * DataTables("社保下达").Compute("Sum(其中养统内)", Filter2 ) +0.001,"#")

改为

dim i1 as double = DataTables("在职人员信息").Compute("Sum(基本基数)", Filter2)
if i1 = 0 then 
  e.DataRow("统筹内") = 0
else
  e.DataRow("统筹内") = format(DataTables("在职人员信息").Compute("Sum(基本基数)", Filter) / i1 * DataTables("社保下达").Compute("Sum(其中养统内)", Filter2 ) +0.001,"#")
end if
[此贴子已经被作者于2019/11/10 21:18:40编辑过]

 回到顶部