办公自动化——数据查询及汇总分析
手机亲爱的你还好吗,我是失踪很久的edon。
之前给大家讲了一下生产信息报表怎么做,并且可以生成相应的excel文档,广大的网友给我私信说不能接着再讲一些相应的报表分析的例子,那今天我们就给大家来分享一个查询统计结合图表的示例。
我们大概要做这样的分析功能。
我们先简单分析一下,我们需要做哪些东西,这个窗体上,我们需要放一个图表,一个数据表窗体,查看图表的同时,我们可以查看数据,选择条件的同时,图表与数据一起发生变化。接下去我们来实现这些操作。
01、建表
创建如下图一样的表,然后我往表中添加一些数据。
02、创建子窗体
我们先创建一个数据表窗体。
我先把子窗体的数据源设置为:
SELECT Year([销售日期]) & '-' & Format(DatePart('ww',[销售日期]),'00') AS 周期,
产品名称, 产品类别,客户名称, Sum(销售数量) AS 销售数量之总计 FROM 销售信息表
GROUP BY Year([销售日期]) & '-' & Format(DatePart('ww',[销售日期]),'00'), 产品名称, 产品类别, 客户名称;
03、创建主窗体
如下图,我们创建一个主窗体,在主窗体中添加两个选项组控件,分别在两个选项组中添加单选按钮,接着添加一个选项卡控件,在选项卡中添加两个页,一个放图表控件,一个放子窗体控件。主窗体上控件比较多,大家要有耐心,一个一个排版好。
注意:选择区间默认值填写3,这默认选择为月,图表的默认值为51,这样默认为柱形图
04、添加代码
接下我们来添加一下代码
Function 执行查询()
Dim strWhere As String
Dim strField As String
Dim strFormat As String
Dim strCaption As String
Const xlCategory = 1 '在这里声明常量是为了去掉图表类型库的引用后代码也能正常运行
Select Case Me.区间单位
Case 1
strCaption = "日"
strField = "销售日期"
strFormat = "yyyy-mm-dd"
Case 2
strCaption = "周"
strField = "Year([销售日期]) & '-' & Format(DatePart('ww',[销售日期]),'00')"
strFormat = "yyyy-mm"
Case 3
strCaption = "月"
strField = "Format([销售日期],'yyyy-mm')"
strFormat = "yyyy-mm"
Case 4
strCaption = "季"
strField = "Year([销售日期]) & '-' & DatePart('q',[销售日期])"
strFormat = "yyyy-mm"
Case 5
strCaption = "年"
strField = "Year([销售日期])"
strFormat = "0"
End Select
'设置子窗体中区间字段标题
Me.子窗体!周期.Controls(0).Caption = strCaption
'重置子窗体的数据源
Me.子窗体.Form.RecordSource = " SELECT " & strField & " AS 周期,产品名称," _
& " 产品类别,客户名称,Sum(销售数量) AS 销售数量之总计" _
& " FROM 销售信息表" & strWhere _
& " GROUP BY " & strField & ",产品名称,产品类别,客户名称;"
'重置图表的数据源
Me.Graph.RowSource = " TRANSFORM Sum(销售数量) AS 销售数量之总计" _
& " SELECT " & strField & " AS 周期" _
& " FROM 销售信息表" & strWhere _
& " GROUP BY " & strField & "" _
& " PIVOT 客户名称"
On Error Resume Next
Me.Graph.Axes(xlCategory).TickLabels.NumberFormatLocal = strFormat
End Function
Private Sub Form_Load()
Call 执行查询
End Sub
Private Sub 区间单位_AfterUpdate()
Call 执行查询
End Sub
Private Sub 图表样式_AfterUpdate()
'选项按钮的选项值必须和下面常量的值对应
Const xlColumnClustered = 51
Const xlBarClustered = 57
Const xlLine = 4
Const xlColumnStacked = 52
Const xl3DPieExploded = 70
Const xlCylinderColClustered = 92
Const xlRows = 1
Const xlColumns = 2
'更改图表样式
Me.Graph.Object.ChartType = Me.图表样式
'行列切换
If Me.图表样式 = xl3DPieExploded Then
Me.Graph.Object.Application.PlotBy = xlRows
Else
Me.Graph.Object.Application.PlotBy = xlColumns
End If
End Sub
05、运行测试
最后,就是来运行测试了,我们来看一下效果
从事access开发多年,喜欢access做一些小东西,分享一些小经验
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?