以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.com/bbs/index.asp)
--  专家坐堂  (http://foxtable.com/bbs/list.asp?boardid=2)
----  [求助]自定义汇总模式的设置  (http://foxtable.com/bbs/dispbbs.asp?boardid=2&id=93737)

--  作者:whataball
--  发布时间:2016/12/5 23:09:00
--  [求助]自定义汇总模式的设置
新手求助:

图片点击可在新窗口打开查看此主题相关图片如下:无标题.jpg
图片点击可在新窗口打开查看
如附件图片,这是汇总模式下的目录树样式,分别根据班次以及当班班长进行汇总统计,代码如下:
Dim t As Table = Tables("产量统计")
Dim g As SubtotalGroup
t.SubtotalGroups.Clear()
t.GroupAboveData = True
t.TreeVisible = True
t.SpillNode = True

g = New SubtotalGroup
g.Aggregate = AggregateEnum.Average
g.GroupOn = "班次"
g.TotalOn = "总线效率"
g.Caption = "{0} 效率"
t.SubtotalGroups.Add(g)

g = New SubtotalGroup
g.Aggregate = AggregateEnum.Average
g.GroupOn = "当班班长"
g.TotalOn = "总线效率"
g.Caption = "{0} 效率"
t.SubtotalGroups.Add(g)

t.Subtotal()

Dim r As Row
For i As Integer = 0 To t.Rows.Count(True) - 1
    r = t.Rows(i,True)
    If r.IsGroup 
        Dim f As String = "班长 = \'" & r("当班班长") & "\'"
        Dim v As String = " 当班次数:" & t.Compute("Count(班次)",f)
        v = v & " 总体效率:" & t.Compute("Average(总线效率)",f)
        r("当班班长") = "班长:" & r("当班班长") & v
     End If
Next

想达到的效果是在汇总行显示出每个班长 早、中、夜班分别上了多少次,上各个班次时的平均效率。如图所示标题倒是能显示了,但班长名字、班次次数以及效率均不能显示出来,请问代码需要怎样修改?
另外由于有时候一个班会有两个班长当班,所以当班班长列设为了多值字段,统计时两人当班的能否分别算入各自的汇总效率中?(网上看了不少代码都是两人各按50%算,而我则是想两人都各是按100%算入自己的汇总中)
[此贴子已经被作者于2016/12/5 23:09:29编辑过]

--  作者:有点蓝
--  发布时间:2016/12/6 8:48:00
--  
看不到数据,上例子说明
--  作者:whataball
--  发布时间:2016/12/6 10:01:00
--  补充文件上传
 下载信息  [文件大小:   下载次数: ]
图片点击可在新窗口打开查看点击浏览该文件:生产效率.table

文件在这里,谢谢。另外,汇总模式下如何使用排序功能?
[此贴子已经被作者于2016/12/6 10:29:48编辑过]

--  作者:有点蓝
--  发布时间:2016/12/6 10:35:00
--  
Dim bz As String
Dim r As Row
For i As Integer = 0 To t.Rows.Count(True) - 1
    r = t.Rows(i,True)
    If r.IsGroup
        Dim n As String =  r(0).split(" ")(0)
        Dim f As String
        If n = "早班" OrElse n = "中班" OrElse n = "夜班" Then
            f = "当班班长 = \'" & bz & "\' and 班次=\'" & n & "\'"
        Else
            bz = n
            f = "当班班长 = \'" & bz & "\'"
        End If
        
        Output.Show(f)
        Dim v As String = " 当班次数:" & t.Compute("Count(班次)",f)
        v = v & " 总体效率:" & Format(t.Compute("Avg(总线效率)",f),"0.00")
        r("当班班长") = "班长:" & r("当班班长") & v
    End If
Next

--  作者:whataball
--  发布时间:2016/12/6 11:10:00
--  
稍微调整了下代码,现在成这样了:
Dim bz As String
Dim r As Row
For i As Integer = 0 To t.Rows.Count(True) - 1
    r = t.Rows(i,True)
    If r.IsGroup
        Dim n As String =  r(0).split(" ")(0)
        Dim f As String
        If n = "早班" OrElse n = "中班" OrElse n = "夜班" Then
            f = "当班班长 = \'" & bz & "\' and 班次=\'" & n & "\'"
        Else
            bz = n
            f = "当班班长 = \'" & bz & "\'"
        End If
        
        Output.Show(f)
        Dim v As String = " 当班次数:" & t.Compute("Count(班次)",f)
        v = v & " 总体效率:" & Format(t.Compute("Avg(总线效率)",f),"0.00")
        r("产品") = r("当班班长") & v
    End If
Next
不过不清楚怎样保存自定义设置,只能每次重开文件都要重新输命令。

--  作者:有点蓝
--  发布时间:2016/12/6 11:15:00
--  
创建窗口,做个按钮
--  作者:whataball
--  发布时间:2016/12/6 11:31:00
--  
原来如此,已经创建好了,谢谢。
现在还剩几个小问题没解决:
1、当2人共同上一个班时的效率想各自算在每个人自己身上,但不是各取一半计算而是都取100%来计算。
2、当“产品”列列宽较小时,只有第一行的汇总信息能完整显示出来,其他汇总行都只能显示一部分。或者说本来想将汇总信息左端对齐到“班次日期”列的,但由于刚才的代码班长名字不能显示出来,所以才调整成现在的样子。
3、由于已经自定义了汇总信息,那“总线效率”列的统计要如何隐藏掉呢?
[此贴子已经被作者于2016/12/6 11:37:01编辑过]

--  作者:有点蓝
--  发布时间:2016/12/6 11:37:00
--  
1、这种多值字段的这种汇总模式处理不了你这种情况


--  作者:whataball
--  发布时间:2016/12/6 12:05:00
--  
可能是我没表述清楚。
1、这个问题解决不了也没有什么影响,感谢回复。
2、按照 r("当班班长") = "班长:" & r("当班班长") & v这一段代码,显示出来的是
(班长: 当班次数xx 总体效率:xx)而并非预想中的(班长:xx 当班次数xx 总体效率:xx)
3、参考教程文件中的例子
图片点击可在新窗口打开查看此主题相关图片如下:无标题.jpg
图片点击可在新窗口打开查看
自定义汇总模式后,自动汇总了金额,而汇总行中的“金额”列不再显示数据,但现在自定义后,“总线效率”列还有显示。

--  作者:有点色
--  发布时间:2016/12/6 12:51:00
--  

 你想要设置哪个列的值,都可以的啊

 

r("总线效率") = Nothing