以文本方式查看主题 - Foxtable(狐表) (http://foxtable.net/bbs/index.asp) -- 专家坐堂 (http://foxtable.net/bbs/list.asp?boardid=2) ---- [求助]子表如何引用父表数据,并在父表里进行计算,再赋值回子表? (http://foxtable.net/bbs/dispbbs.asp?boardid=2&id=179708) |
-- 作者:rpg2813 -- 发布时间:2022/9/5 3:14:00 -- [求助]子表如何引用父表数据,并在父表里进行计算,再赋值回子表? 成绩表的语文标准分为:500 + 100 * ([语文] - Avg([语文]))/StDev([语文]) 想实现的效果是(以张三为例) 87+12=99之后,在成绩表里进行标准分计算,并把得到的标准分赋值到“错漏明细”的语文标准分里 其实就是让学生知道,如果空的题做了,错的题做了,相应会有什么成绩 |
-- 作者:有点蓝 -- 发布时间:2022/9/5 8:58:00 -- 没看懂,请举例说明一下,比如张三和李四,按什么公式进行计算,正确结果是多少? |
-- 作者:rpg2813 -- 发布时间:2022/9/5 12:14:00 -- 父表的标准分是:500 + 100 * ([语文] - Avg([语文]))/StDev([语文])算出来的 就是: 500 + 100 * ([87]- Avg([87,67……102,86]))/StDev([[87,67……102,86]])=521.06 —— 而子表的标准分希望的是(以语文为例) 500 + 100 * ([87+12]- Avg([(87+12),67……102,86]))/StDev([[(87+12),67……102,86]])=596.48 —— 目的就是告诉张三,语文那12分不丢的话,你可以拿到596.48分 |
-- 作者:有点蓝 -- 发布时间:2022/9/5 13:40:00 -- 这种情况没有办法直接使用表达式计算。 方法1、在子表每个科目增加一个辅助列,比如列名叫【语文未扣分】,这个列等于父表语文+子表的语文求和。然后根据辅助列进行计算 2、使用代码计算 话说回来这种统计有点自欺欺人吧,【语文那12分不丢的话,你可以拿到596.48分】,还不如直接告诉学生一分都不丢的话,岂不都是满分了!
|
-- 作者:rpg2813 -- 发布时间:2022/9/5 14:08:00 -- 有意义的,标准分本来就是衡量一个成绩在一个范围内的分值,现在有的省份还在用做高考成绩统计 那12分是没有做,空着丢的,我算出来后,还得让对方明白 (596.48-521.06)/12=6.285,多拿1分可以多6.285标准分 这个帖子太老,然后可能他的算法更精确,我暂时用不到这么精确的算法(我的算法公式是从excel里改过来的)
[此贴子已经被作者于2022/9/5 14:11:28编辑过]
|
-- 作者:rpg2813 -- 发布时间:2022/9/5 22:25:00 -- 版主你好,我用了取巧的办法做是做出来了,但是用代码写3楼的的公式应该怎么写才对?就是以下红色部分 子表的datacolchanged Select Case e.DataCol.Name
Case "语文" , "数学", "英语" Dim dr As DataRow Dim dt As DataTable = DataTables("成绩") dr = dt.Find("学号 = \'" & e.DataRow("学号") & "\'") If dr IsNot Nothing Then Dim oldyw As Double = dr("语文") Dim newyw As Double = dr("语文") + e.DataRow("语文") dr("语文") = newyw e.DataRow("标准分_语文") = dr("标准分_语文") dr("语文") = oldyw End If End Select |
-- 作者:有点蓝 -- 发布时间:2022/9/5 22:54:00 -- 看看:http://www.foxtable.com/bbs/dispbbs.asp?BoardID=2&ID=92787&skin=0 |
-- 作者:rpg2813 -- 发布时间:2022/9/6 0:30:00 -- 谢谢,看完之后,感觉取巧也挺好的…… 我试试
|
-- 作者:rpg2813 -- 发布时间:2022/9/6 1:15:00 -- ok,一开始感觉很复杂,照着链接中的链接,http://www.foxtable.com/help/topics/0545.htm 搞定了 谢谢版主
Dim p As Integer = Tables("成绩").Cols("语文").Index \'获得数量列的位置 Dim n As Integer = Tables("成绩").Rows.Count Dim x As Double = Tables("成绩").Aggregate(AggregateEnum.Average, 0, p, n - 1, p) Dim v As Double = Tables("成绩").Aggregate(AggregateEnum.Std, 0, p, n - 1, p) Dim y As Double = 500 + 100 * (87 - x) / v Output.Show(y) [此贴子已经被作者于2022/9/6 1:16:21编辑过]
|