Foxtable(狐表)用户栏目专家坐堂 → [求助]统计汇总


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

主题:[求助]统计汇总

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


加好友 发短信
等级:五尾狐 帖子:1141 积分:11272 威望:0 精华:0 注册:2017/9/26 16:30:00
[求助]统计汇总  发帖心情 Post By:2020/10/26 17:00:00 [显示全部帖子]

老师好!
怎样在统计表中,每一天下面增加一行汇总行。
汇总列:[涨跌次数]=牛的次数-熊的次数;  [预测涨跌幅]=牛的涨跌幅+熊的涨跌幅。
如图,图一是数据表;图二是统计表:

图片点击可在新窗口打开查看此主题相关图片如下:截屏图片.jpg
图片点击可在新窗口打开查看


图片点击可在新窗口打开查看此主题相关图片如下:截屏图片 (1).jpg
图片点击可在新窗口打开查看




'''
Dim cn As String = "gp99"   'sql外部数据源
Dim bm As String = "统计表1"
Dim b As New SQLGroupTableBuilder(bm,"批量预测")
b.ConnectionName = cn
b.Groups.AddDef("日期",DateGroupEnum.Month,"月份") '根据产品分组
b.Groups.AddDef("日期",DateGroupEnum.none) '根据产品分组

b.Groups.AddDef("牛熊")    '根据分组
b.Totals.AddDef("牛熊",AggregateEnum.Count,"涨跌次数")
b.Totals.AddDef("预测涨跌幅") '对数量进行统计
b.Build '生成统计表

Tables("批量选股_Table10").DataSource = b.BuildDataSource()


Dim dt As Table = Tables("批量选股_Table10")  
Dim g As Subtotalgroup
dt.SubtotalGroups.Clear()
'定义分组
g = New Subtotalgroup
g.GroupOn = "月份"
g.TotalOn = "牛熊,预测涨跌幅,涨跌次数"
dt.SubtotalGroups.Add(g)
dt.Subtotal() '生成汇总模式
dt.GroupAboveData = True  '分组行位于数据行之上
dt .TreeVisible = True '显示目录树

With Tables("批量选股_Table10")  '合并
    .MergeMode = MergeModeEnum.Standard '标准合并模式
    .MergeCols.Clear() '清除原来的合并列
    Dim Names As String() = {"月份","日期","牛熊"}
    For i As Integer = 0 To Names.Length -1
        .MergeCols.Add(Names(i))
    Next
    .AllowMerge = True '启用合并模式
End With



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


加好友 发短信
等级:五尾狐 帖子:1141 积分:11272 威望:0 精华:0 注册:2017/9/26 16:30:00
  发帖心情 Post By:2020/10/26 21:13:00 [显示全部帖子]

谢谢蓝老师!可以了。

 

再问个问题:

如果统计表采用一天一行的方式,如图,统计列的表达式怎样写?

 


图片点击可在新窗口打开查看此主题相关图片如下:截屏图片 (2).jpg
图片点击可在新窗口打开查看 

 

Dim cn As String = "gp99"   'sql外部数据源
Dim bm As String = "统计表1"
Dim b As New SQLGroupTableBuilder(bm,"批量预测")
b.ConnectionName = cn
b.Groups.AddDef("日期",DateGroupEnum.Month,"月份")
b.Groups.AddDef("日期",DateGroupEnum.none)

b.Groups.AddDef("牛熊","牛涨跌次数")    '分组
b.Totals.AddDef("牛熊",AggregateEnum.Count,"牛涨跌次数")
 
b.Groups.AddDef("牛熊","熊涨跌次数")    '分组
b.Totals.AddDef("牛熊",AggregateEnum.Count,"熊涨跌次数")
 
......
b.Build '生成统计表
Tables("批量选股_Table10").DataSource = b.BuildDataSource()


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


加好友 发短信
等级:五尾狐 帖子:1141 积分:11272 威望:0 精华:0 注册:2017/9/26 16:30:00
  发帖心情 Post By:2020/10/27 19:21:00 [显示全部帖子]

谢谢蓝老师!

但是出个问题,统计表绑定窗口表显示时会报错,直接在数据表显示没问题。这是什么原因?

代码如下:

Dim bm As String = "统计表1"
Dim b As New SQLGroupTableBuilder(bm,"批量预测")
b.ConnectionName = cn
b.Groups.AddDef("日期",DateGroupEnum.Month,"月份")
b.Groups.AddDef("日期",DateGroupEnum.none)
b.Totals.Addexp("牛涨跌次数","Case When 牛熊 ='牛' then 1 else 0 End")
b.Totals.Addexp("熊涨跌次数","Case When 牛熊 ='熊' then -1 else 0 End")
b.Totals.Addexp("牛预测涨跌幅","Case When 牛熊 ='牛' then 预测涨跌幅 else 0 End")
b.Totals.Addexp("熊预测涨跌幅","Case When 牛熊 ='熊' then 预测涨跌幅 else 0 End")
b.Totals.Addexp("牛熊次数","Case When 牛熊 ='牛' then 1 else 0 End + Case When 牛熊 ='熊' then -1 else 0 End")
b.Totals.Addexp("牛熊涨跌幅","Case When 牛熊 ='牛' then 预测涨跌幅 else 0 End + Case When 牛熊 ='熊' then 预测涨跌幅 else 0 End")
b.Build '生成统计表

 

'MainTable = Tables("统计表1")     ----------------这样显示没问题
Tables("批量选股_Table10").DataSource = b.BuildDataSource()    ------------绑定窗口表显示会报错

 

 


图片点击可在新窗口打开查看此主题相关图片如下:截屏图片 (8).jpg
图片点击可在新窗口打开查看

 回到顶部
帅哥哟,离线,有人找我吗?
天一生水
  4楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:五尾狐 帖子:1141 积分:11272 威望:0 精华:0 注册:2017/9/26 16:30:00
  发帖心情 Post By:2020/10/27 21:45:00 [显示全部帖子]

谢谢老师!

还有个问题:这个窗口表,没有绑定数据表,类型是normal。我设置最后两列的样式,如果大于0,是红色;小于0,是绿色。

但是没有效果。

代码如下,是什么原因?

 

项目属性-全局表事件-DrawCell:

 

Select Case e.Table.Name

Case "批量选股_table10"
        DataTables("批量选股_table10").AddUserStyle("a1", Color.skyblue, Color.black)  '未来
        DataTables("批量选股_table10").AddUserStyle("b1", Color.Red , Color.White)    '正值
        DataTables("批量选股_table10").AddUserStyle("c1", Color.GreenYellow, Color.blue)    '负值
       
        If e.Col.Name = "日期" Then
            If e.Row.IsNull(e.Col.Name) = False '且该列已经输入内容
                If e.Row(e.Col.Name) > Date.Today Then
                    e.Style = "a1"  '那么用"不及格"样式绘制单元格
                End If
            End If
        Else

            If e.Col.Name = "牛熊次数" Or e.Col.Name = "牛熊涨跌幅" Then
                If e.Row.IsNull(e.Col.Name) = False '且该列已经输入内容
                    If e.Row(e.Col.Name) > 0 Then '如果该列的值小于60
                        e.Style = "b1"  '那么用样式绘制单元格
                    Else
                        e.Style = "c1"  '那么用样式绘制单元格
                    End If
                End If
            End If           
       

End Select

 

 

这三句代码写进窗口的afterload也不行:

Tables("批量选股_table10").DataTable.AddUserStyle("a1", Color.skyblue, Color.black)  '未来
Tables("批量选股_table10").DataTable.AddUserStyle("b1", Color.Red , Color.White)    '正值
Tables("批量选股_table10").DataTable.AddUserStyle("c1", Color.GreenYellow, Color.blue)    '负值

 


[此贴子已经被作者于2020/10/27 21:45:21编辑过]

 回到顶部
帅哥哟,离线,有人找我吗?
天一生水
  5楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:五尾狐 帖子:1141 积分:11272 威望:0 精华:0 注册:2017/9/26 16:30:00
  发帖心情 Post By:2020/10/27 22:05:00 [显示全部帖子]

还是没效果


 回到顶部
帅哥哟,离线,有人找我吗?
天一生水
  6楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:五尾狐 帖子:1141 积分:11272 威望:0 精华:0 注册:2017/9/26 16:30:00
  发帖心情 Post By:2020/10/28 8:21:00 [显示全部帖子]

请老师看实例:
 下载信息  [文件大小:   下载次数: ]
图片点击可在新窗口打开查看点击浏览该文件:2020-10-28统计提问.table



 回到顶部