Foxtable(狐表)用户栏目专家坐堂 → 跨表统计自动更新


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

主题:跨表统计自动更新

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


加好友 发短信
等级:幼狐 帖子:64 积分:644 威望:0 精华:0 注册:2019/4/22 15:47:00
跨表统计自动更新  发帖心情 Post By:2019/12/19 7:51:00 [只看该作者]

1、不能及时更新,修改了两三次数据才更新第一次,有时候就不更新,感觉不稳定,不知具体原因出现在哪里?
2、因为订单表每次更新都是整年更新,若要重置列更新感觉速度太慢,订单表一年大概有一万行左右,对于此问题老师给我点具体设计思路,我想了一个月,思想如以下代码,但是感觉不好,效率低下,大量重算速度慢。

订单表(备注:这里有三种日期,访客、订单、过来)
DataColChanged事件写入如下代码:
Select Case e.DataCol.Name
    Case "单数","预算利润","实际利润"
        Dim pr,pr1,pr2 As DataRow
        pr = DataTables("推广流水").Find("编号= '" & e.DataRow("编号") & "'")
        If pr IsNot Nothing Then
            DataTables("推广流水").DataCols("编号").RaiseDataColChanged(pr)
        End If
        pr1 = DataTables("公司流水").Find("日期= '" & e.DataRow("订单日期") & "'")
        If pr1 IsNot Nothing Then
            DataTables("公司流水").DataCols("日期").RaiseDataColChanged(pr1)
        End If
        pr2 = DataTables("公司流水").Find("日期= '" & e.DataRow("过来日期") & "'")
        If pr2 IsNot Nothing Then
            DataTables("公司流水").DataCols("日期").RaiseDataColChanged(pr2)
        End If
End Select
公司流水表DataColChanged事件写入如下代码:
If e.DataCol.Name = "日期" Then
    If e.NewValue Is Nothing Then
        e.DataRow("广告费")=Nothing
        e.DataRow("加v")=Nothing
        e.DataRow("人工成本")=Nothing
        e.DataRow("订单日期_单数")=Nothing
        e.DataRow("订单日期_预算利润")=Nothing
        e.DataRow("订单日期_实际利润")=Nothing
        e.DataRow("过来日期_单数")=Nothing
        e.DataRow("过来日期_预算利润")=Nothing
        e.DataRow("过来日期_实际利润")=Nothing
        e.DataRow("出团_订单日期_单数")=Nothing
        e.DataRow("出团_订单日期_预算利润")=Nothing
        e.DataRow("出团_订单日期_实际利润")=Nothing
        e.DataRow("待出团_过来日期_单数")=Nothing
        e.DataRow("待出团_过来日期_预算利润")=Nothing
        e.DataRow("待出团_过来日期_实际利润")=Nothing
    Else
        Dim Filter,Filter1,Filter2,Filter3,Filter4,Filter5,Filter6 As String
        Filter = "日期 = #" & e.DataRow("日期") & "# And 公司= '" & e.DataRow("公司") & "'"
        Filter1 = "订单日期 = #" & e.DataRow("日期") & "# And 公司= '" & e.DataRow("公司") & "'"
        Filter2 = "过来日期 = #" & e.DataRow("日期") & "# And 公司= '" & e.DataRow("公司") & "'"

        Filter3 = "订单日期 = #" & e.DataRow("日期") & "# And 公司= '" & e.DataRow("公司") & "'And 出团='出团'"
        Filter4 = "订单日期 = #" & e.DataRow("日期") & "# And 公司= '" & e.DataRow("公司") & "'And 出团='待出团'"

        Filter5 = "过来日期 = #" & e.DataRow("日期") & "# And 公司= '" & e.DataRow("公司") & "'And 出团='出团'"
        Filter6 = "过来日期 = #" & e.DataRow("日期") & "# And 公司= '" & e.DataRow("公司") & "'And 出团='待出团'"


        e.DataRow("广告费")=DataTables("广告费").SQLCompute("sum([消费])",Filter )
        e.DataRow("现金")=DataTables("广告费").SQLCompute("sum([现金])",Filter )
        e.DataRow("加v")=DataTables("加V").SQLCompute("sum([数量])",Filter )
        e.DataRow("人工成本")=DataTables("分摊").SQLCompute("sum([人工成本])",Filter )
        
        e.DataRow("订单日期_单数")=DataTables("订单表").SQLCompute("sum([单数])",Filter1 )
        e.DataRow("订单日期_预算利润")=DataTables("订单表").SQLCompute("sum([预算利润])",Filter1 )
        e.DataRow("订单日期_实际利润")=DataTables("订单表").SQLCompute("sum([实际利润])",Filter1 )

        e.DataRow("过来日期_单数")=DataTables("订单表").SQLCompute("sum([单数])",Filter2 )
        e.DataRow("过来日期_预算利润")=DataTables("订单表").SQLCompute("sum([预算利润])",Filter2 )
        e.DataRow("过来日期_实际利润")=DataTables("订单表").SQLCompute("sum([实际利润])",Filter2 )

        e.DataRow("出团_订单日期_单数")=DataTables("订单表").SQLCompute("sum([单数])",Filter3 )
        e.DataRow("出团_订单日期_预算利润")=DataTables("订单表").SQLCompute("sum([预算利润])",Filter3 )
        e.DataRow("出团_订单日期_实际利润")=DataTables("订单表").SQLCompute("sum([实际利润])",Filter3 )
        e.DataRow("待出团_订单日期_单数")=DataTables("订单表").SQLCompute("sum([单数])",Filter4 )
        e.DataRow("待出团_订单日期_预算利润")=DataTables("订单表").SQLCompute("sum([预算利润])",Filter4 )
        e.DataRow("待出团_订单日期_实际利润")=DataTables("订单表").SQLCompute("sum([实际利润])",Filter4 )

        e.DataRow("出团_过来日期_单数")=DataTables("订单表").SQLCompute("sum([单数])",Filter5 )
        e.DataRow("出团_过来日期_预算利润")=DataTables("订单表").SQLCompute("sum([预算利润])",Filter5 )
        e.DataRow("出团_过来日期_实际利润")=DataTables("订单表").SQLCompute("sum([实际利润])",Filter5 )
        e.DataRow("待出团_过来日期_单数")=DataTables("订单表").SQLCompute("sum([单数])",Filter6 )
        e.DataRow("待出团_过来日期_预算利润")=DataTables("订单表").SQLCompute("sum([预算利润])",Filter6 )
        e.DataRow("待出团_过来日期_实际利润")=DataTables("订单表").SQLCompute("sum([实际利润])",Filter6 )
    End If
End If

推广流水表DataColChanged事件写入如下代码:
If e.DataCol.Name = "编号" Then
    If e.NewValue Is Nothing Then
        e.DataRow("账户币")=Nothing
        e.DataRow("现金")=Nothing
        e.DataRow("加v")=Nothing
        e.DataRow("订单日期_单数")=Nothing
        e.DataRow("订单日期_预算利润")=Nothing
        e.DataRow("订单日期_实际利润")=Nothing
        e.DataRow("过来日期_单数")=Nothing
        e.DataRow("过来日期_预算利润")=Nothing
        e.DataRow("过来日期_实际利润")=Nothing
        e.DataRow("出团_订单日期_单数")=Nothing
        e.DataRow("出团_订单日期_预算利润")=Nothing
        e.DataRow("出团_订单日期_实际利润")=Nothing
        e.DataRow("待出团_过来日期_单数")=Nothing
        e.DataRow("待出团_过来日期_预算利润")=Nothing
        e.DataRow("待出团_过来日期_实际利润")=Nothing
        e.DataRow("运营") = Nothing
        e.DataRow("推广") = Nothing
        e.DataRow("路径") = Nothing
    Else
        Dim dr As DataRow
        dr = DataTables("ku").Find("[编码] = '" & e.NewValue & "'")
        If dr IsNot Nothing Then
            e.DataRow("运营") = dr("运营")
            e.DataRow("推广") = dr("平台")
            e.DataRow("路径") = dr("路径")
        End If
        Dim Filter,Filter1,Filter2,Filter3,Filter4,Filter5,Filter6 As String
        Filter = "日期 = #" & e.DataRow("日期") & "# And 编号= '" & e.DataRow("编号") & "'And 公司= '" & e.DataRow("公司") & "'"
        Filter1 = "订单日期 = #" & e.DataRow("日期") & "# And 公司= '" & e.DataRow("公司") & "'And 编号= '" & e.DataRow("编号") & "'"
        Filter2 = "过来日期 = #" & e.DataRow("日期") & "# And 公司= '" & e.DataRow("公司") & "'And 编号= '" & e.DataRow("编号") & "'"
        
        
        Filter3 = "订单日期 = #" & e.DataRow("日期") & "# And 公司= '" & e.DataRow("公司") & "'And 出团='出团'And 编号= '" & e.DataRow("编号") & "'"
        Filter4 = "订单日期 = #" & e.DataRow("日期") & "# And 公司= '" & e.DataRow("公司") & "'And 出团='待出团'And 编号= '" & e.DataRow("编号") & "'"
        
        Filter5 = "过来日期 = #" & e.DataRow("日期") & "# And 公司= '" & e.DataRow("公司") & "'And 出团='出团'And 编号= '" & e.DataRow("编号") & "'"
        Filter6 = "过来日期 = #" & e.DataRow("日期") & "# And 公司= '" & e.DataRow("公司") & "'And 出团='待出团'And 编号= '" & e.DataRow("编号") & "'"
        
        
        e.DataRow("账户币")=DataTables("广告费").SQLCompute("sum([消费])",Filter )
        e.DataRow("现金")=DataTables("广告费").SQLCompute("sum([现金])",Filter )
        e.DataRow("加v")=DataTables("加V").SQLCompute("sum([数量])",Filter )
        
        e.DataRow("订单日期_单数")=DataTables("订单表").SQLCompute("sum([单数])",Filter1 )
        e.DataRow("订单日期_预算利润")=DataTables("订单表").SQLCompute("sum([预算利润])",Filter1 )
        e.DataRow("订单日期_实际利润")=DataTables("订单表").SQLCompute("sum([实际利润])",Filter1 )
        
        e.DataRow("过来日期_单数")=DataTables("订单表").SQLCompute("sum([单数])",Filter2 )
        e.DataRow("过来日期_预算利润")=DataTables("订单表").SQLCompute("sum([预算利润])",Filter2 )
        e.DataRow("过来日期_实际利润")=DataTables("订单表").SQLCompute("sum([实际利润])",Filter2 )
       
        e.DataRow("出团_过来日期_单数")=DataTables("订单表").SQLCompute("sum([单数])",Filter5 )
        e.DataRow("出团_过来日期_预算利润")=DataTables("订单表").SQLCompute("sum([预算利润])",Filter5 )
        e.DataRow("出团_过来日期_实际利润")=DataTables("订单表").SQLCompute("sum([实际利润])",Filter5 )
        e.DataRow("待出团_过来日期_单数")=DataTables("订单表").SQLCompute("sum([单数])",Filter6 )
        e.DataRow("待出团_过来日期_预算利润")=DataTables("订单表").SQLCompute("sum([预算利润])",Filter6 )
        e.DataRow("待出团_过来日期_实际利润")=DataTables("订单表").SQLCompute("sum([实际利润])",Filter6 )
    End If
End If

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


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

1、代码没有问题,不更新,是因为您限制了"单数","预算利润","实际利润"这3列数据有变动才会触发更新的操作。但是查询统计条件却还有公司、出团等等列,如果这些列没有数据,很明显统计不到的,也就是说"单数","预算利润","实际利润"这3列数据有变动之前,公司、出团这些列必须先要有数据。

2、这种没有什么好办法,如果要即时统计,只能这样,再说是后台统计的肯定会慢。如果实时性要求不高,个人的建议是专门做一个统计窗口,通过sql进行统计,定时(比如10分钟)或者点击按钮后再统计,把最后结果显示到窗口中。

 回到顶部