以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.net/bbs/index.asp)
--  专家坐堂  (http://foxtable.net/bbs/list.asp?boardid=2)
----  笔记 分组 交叉 临时表组合  (http://foxtable.net/bbs/dispbbs.asp?boardid=2&id=60046)

--  作者:石四
--  发布时间:2014/11/17 13:55:00
--  笔记 分组 交叉 临时表组合

在这里做笔记,方便以后调用.

 


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

 

Tables("部门考勤_Table3").StopRedraw
Dim Filter As String
With e.Form.Controls("bm1")
    If .Value IsNot Nothing Then
       Filter = "部门 in (\'" & .Value.replace(",", "\',\'") & "\')"
    End If
End With
With e.Form.Controls("StartDate")
    If .Value IsNot Nothing Then
        If Filter >"" Then
            Filter = Filter & " And "
        End If
        Filter = Filter & "考勤日期 >= #" & .Value & "#"
    End If
End With
With e.Form.Controls("EndDate")
    If .Value IsNot Nothing Then
        If Filter >"" Then
            Filter = Filter & " And "
        End If
        Filter = Filter & "考勤日期 <= #" & .Value & "#"
    End If
End With
DataTables("部门考勤").LoadFilter = Filter
DataTables("部门考勤").Load()
DataTables("考勤机数据").LoadFilter = Filter
DataTables("考勤机数据").Load()

Dim bd0 As New GroupTableBuilder("考勤机",DataTables("考勤机数据"))
Dim dt0 As fxDataSource
bd0.Groups.AddDef("部门") \'根据型号分组
Bd0.Groups.AddDef("姓名") \'根据型号分组
Bd0.Totals.AddDef("实出勤d","考勤机_出勤") \'对数量进行统计
Bd0.Totals.AddDef("请假h","考勤机_请假") \'对数量进行统计
Bd0.Filter = Filter
Dt0 = bd0.BuildDataSource()

Dim bd1 As New GroupTableBuilder("部门",DataTables("部门考勤"))
Dim dt1 As fxDataSource
bd1.Groups.AddDef("姓名") \'根据型号分组
bd1.Totals.AddDef("出勤","部门考勤_出勤") \'对数量进行统计
bd1.Totals.AddDef("请假","部门考勤_请假") \'对数量进行统计
dt1 = bd1.BuildDataSource()

Dim bd3 As New CrossTableBuilder("部门1",DataTables("部门考勤"))
Dim dt3 As fxDataSource
bd3.HGroups.AddDef("姓名") \'添加客户列用于水平分组
bd3.VGroups.AddDef("工作日") \'添加产品列用于垂直分组,并设置了Pattern参数
bd3.Totals.AddDef("出勤") \'添加数量列用于统计
bd3.Build \'生成统计表
dt3 = bd3.BuildDataSource

Dim bd2 As New DataTableBuilder("表B")
Dim dt2 As fxDataSource
bd2.AddDef("姓名", Gettype(String), 32)
For Each v As Date In DataTables("部门考勤").GetValues("考勤日期")
    bd2.AddDef(v, Gettype(String), 32, "", v.Day)
Next
bd2.Build()
dt2 = bd2.BuildDataSource

For Each v As String In DataTables("部门考勤").GetValues("姓名")
    Dim dr1 As DataRow = DataTables("表B").AddNew()
    dr1("姓名") = v
    For Each dr2 As DataRow In DataTables("部门考勤").DataRows
        If dr2("姓名") = v Then
            dr1(dr2("考勤日期")) = dr2("备注")
        End If
    Next
Next
dt0.Combine("姓名",dt1,"姓名")
dt0.Combine("姓名",dt3,"姓名")
dt0.Combine("姓名",dt2,"姓名")
Tables("部门考勤_Table3").DataSource = dt0 \'将统计结果绑定到Table

With DataTables("部门考勤_Table3").DataCols  \'用表达式列计算期初数据
    .Add("常规",Gettype(Double),"","常规")
    .Add("双休",Gettype(Double),"[部门考勤_出勤] - [星期四]")
   End With

For Each r As Row In Tables("部门考勤_Table3").Rows
    For Each dr2 As DataRow In DataTables("部门考勤").DataRows
        If dr2("姓名") = r("姓名") Then
            r(dr2("考勤日期")) = dr2("备注")
        End If
    Next
Next

Tables("部门考勤_Table3").ResumeRedraw
Tables("部门考勤_Table3").DefaultRowHeight = 24
Tables("部门考勤_Table3").DefaultColWidth = 46
Tables("部门考勤_Table3").ResumeRedraw
Tables("部门考勤_Table3").Sort = "部门"

 

脑已残.......


 

[此贴子已经被作者于2014-11-17 13:57:54编辑过]

--  作者:石四
--  发布时间:2014/11/17 14:00:00
--  
似乎交叉统计表无法再计算,交叉统计表列名如何引用?
--  作者:石四
--  发布时间:2014/11/17 14:06:00
--  

窗口表列可不可以反选?

类似Tables("看板_Table2").SetColVisibleWidth ,设置Tables("看板_Table2").SetColUnVisible,选中的列不显示.


--  作者:有点甜
--  发布时间:2014/11/17 14:14:00
--  
 请明确你想问什么,同时把例子发上来。
--  作者:石四
--  发布时间:2014/11/17 14:48:00
--  

交叉统计表可不可以再计算?用狐表的示例文件来说:

 


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

 

添加列,列名"A类",A类=PD01+PD02,计算公式怎么列?


--  作者:有点甜
--  发布时间:2014/11/17 14:51:00
--  

 生成的表以后,列名不是你看到的那个,而是类似 产品_1、产品_2、产品_3这样的,所以写表达式的时候,要写对列名

 

 http://www.foxtable.com/help/topics/0193.htm

 


--  作者:石四
--  发布时间:2014/11/17 15:00:00
--  

窗口表且是临时表能查看表结构吗?在那查看?


--  作者:有点甜
--  发布时间:2014/11/17 15:01:00
--  
http://www.foxtable.com/help/topics/0193.htm
--  作者:石四
--  发布时间:2014/11/17 15:17:00
--  
With DataTables("部门考勤_Table3").DataCols  \'用表达式列计算期初数据
    .Add("常规",Gettype(Double),"[出勤_1] + [出勤_2]")
    .Add("双休",Gettype(Double),"[部门考勤_出勤] - [常规]")
   End With

--  作者:石四
--  发布时间:2014/11/17 15:20:00
--  
考勤数据是动态的,如果"出勤_2"数据未输入"部门考勤"表,会弹出提示对话框,如何使提示框不弹出?