表格类销售数据报表的设计和实现方法
表格类报表的典型代表是能够满足中国特色需求和本地化习惯的中国式报表,中国式报表
的需求可概括为“复杂的表格结构+大量数据呈现”,就是在单个报表中显示多层级的数据信
息。与结构简单的西方式报表结构相比,中国式报表呈现的信息量大、并且数据关系复杂。
借助葡萄城报表的表格和矩表(英文名Tablix)元素,可完美实现中国式复杂报表的设计。
葡萄城报表是一套强大的报表开发和系统搭建工具,既能与您开发的报表软件项目紧密集
成,也可独立部署运行,支持多数据源,具有无编码、灵活、稳定等特性,可以帮您快速搭建
专业的报表软件系统,实现各类报表的设计、管理、权限控制、数据填报、负载均衡及跨平台
发布。
1.单维度交叉表
本节详细讲解了如何使用距表控件实现单维度交叉表,即动态行列数据显示。
1.1报表模板
1.2报表结构分析
在创建报表之前,先要分析报表的结构,选择最适合的报表模板和数据控件,以及具体的
实现框架,这样才能保证报表模板的顺利创建,提高开发效率。
由上图可获取的报表结构信息:
(1)交叉报表,由行和列共同决定显示的数据,左上角使用斜线划分。
(2)行以月份分组,行数不固定,是根据月份动态生成的。
(3)列是以“类别”分组,列数是不固定的,根据类别的个数动态生成的。
(4)具体数据显示“销售额”。
(5)在最后一行,合计全年的商品的销售额,最后一列合计每月的总销售额。
综上分析,采用矩表控件快速实现交叉报表。
1.3报表实现
(1)新建RDL报表模板。
(2)添加数据源和数据集。
绑定数据源,选择Nwind_CHS.mdb数据库。
添加数据集:
输入SQL语句:
SELECTt.,类别.类别名称FROM(
SELECTDATEPART("yyyy",订单.订购日期)AS订购年,DATEPART("m",订单.订购日期)AS
订购月,类别.类别ID,产品.产品名称,订单明细.数量,订单明细.单价,订单明细.折扣FROM((订单
INNERJOIN订单明细ON订单.订单ID=订单明细.订单ID)
INNERJOIN产品ON订单明细.产品ID=产品.产品ID)
INNERJOIN类别ON产品.类别ID=类别.类别ID)ast
INNERJOIN类别ONt.类别ID=类别.类别ID
ORDERBY订购年,订购月
(3)添加页眉,右键单击报表资源管理器中的“报表”节点,选择页眉。
在页眉区域,添加TextBox,输入报表标题“产品销售数据分析表”。
(4)在报表中添加矩表(Tablix)控件。
添加Tablix后,会发现有类似方括号的符号,表示分组,即可根据具体数据动态生成行。
设计器下面会有矩表分组管理器。
(5)绑定数据字段
将“订购月”直接拖拽到行分组单元格。
将“类别名称”直接拖拽到列分组单元格。
在选中的TextBox4中可以将Value属性设为“=Sum(Fields!数量.ValueFields!单价.Value
(1-Fields!折扣.Value))”。设置Format属性为Decimal,小数位数2。
右键点击“行分组”单元格,选择“添加合计”-”分组后面”,会自动生成合计行,注意合
计行,会自动根据TextBox4的值添加Sum表达式,因此为了避免错误,需要手动删除合计行里
面的第一个Sum表达式。将
=Sum(Sum(Fields!数量.ValueFields!单价.Value(1-Fields!折扣.Value)))
修改为:
=Sum(Fields!数量.ValueFields!单价.Value(1-Fields!折扣.Value))
当然,合计不仅限于Sum表达式,任何表达式都支持,如First,AVG等。
右键点击“列分组”单元格,选择“添加合计”—>”分组后面”,会自动生成合计列
(6)添加斜线分隔线
拖拽Container控件到TexBox1,在Container中添加Line控件,添加两个Textbox,并输
入文本“月份”,“类别”。
到这里,交叉报表就基本的已经实现了,接下来需要做的是调整样式。
(7)添加警戒色
可以看到报表模板中,销售额低于3000的呈红色标识,大于20000背景色呈绿色,分两步
实现:
(a)“脚本”标签中添加以下代码:
FunctionSetColor(ByValvAsDouble)AsString
If(v<3000)
Return"#3eb370"
ElseIf(10000>v>5000)Then
Return"#000000"
ElseIf(v>20000)Then
Return"#ee7800"
ElseReturn"FFFFFF"
EndIf
EndFunction
(b)选中销售数据单元格,设置BackgroundColor属性:=Code.SetColor(Sum(Fields!
数量.ValueFields!单价.Value(1-Fields!折扣.Value)))
|
|