SSRS 2012 Report Items -- 独立报表单元
数据区域会与数据集细节以显示数据内容,独立报表单元则与数据集无关(文本框仅能显示单笔数据内容),但是却与报表排版与美观息息相关。
文本框
有别于“数据表”呈现多笔数据的特性,当我们想要加入标题或是制作报表的表头中的文字,“文本框(Textbox)”可说是最好的选择,“文本框”不但可显示报表中的数据(一次只能显示一笔),同时也可以显示参数,内置字段甚至于表达式的计算结果。前面介绍的数据表或矩阵,其实都可以视为一连串的文本框的组合,更不用提列表了,文本框是列表构成弹性报表结构的重要基本单元。
在操作方面,一样也是从工具箱拖拉至报表设计区,以刚才的缴费单为例,我们先输入缴费单的学校名称,请将文本框内的文字输入“某某大学”,接下来,在下方再拖放一个文本框,点击此框,选择“表达式”,并输入以下表达式内容:
<Fields!SchoolYear.Value+”学年度第”+Fields!SchoolSemester.Value+”续期注册缴费单”>
基本上,这个表达式的意思是将自定义文本以及数据列的文字相加,请记得,SSRS表达式中的字符串都需要以“双引号”标注。同理,各位可以将原来[SchoolCollege]字段改为“=”学院:”+Fields!CollegeName.Value”,其余字段依次类推。
在“文本框”中还提供许多属性可以用来变更内容的格式。
例如,我们将缴费单的学校名称等文本框的“TextAlign”设为“Center”,如此即可将文字内容放在中间。此外,也可以利用字型属性来设置显示的字体以及颜色格式。
需要注意的是,若是文本框内输入的是数字或是日期,可以利用格式化字符串的方式来更新文本框的“Format”属性,以转换成指定数字或日期的格式。这个部分想必各位并不陌生,因为之前的范例中已经利用“C0”字符串格式来调整销售金额的显示格式了,以下我们针对字符串格式做更深入的介绍。
格式化字符串 |
说明 |
C或c |
显示操作系统中地区选项所设置的货币格式,包含千分位以及小数点 |
D或d |
显示十进制数字,不包含千分号。位数不足前方补零,只支持整数格式 |
E或e |
以科学计数显示数字,可指定小数位数 |
F或f |
显示十进制数字,不包含千分号,可以指定小数位长度,不足者补零 |
G或g |
以科学计数显示数字,不可指定小数位数 |
N或n |
数字,包含千分位符号 |
P或p |
百分比,可指定小数位数,含千分位 |
X或x |
十六位数字,只支持整数数据 |
除了少数像是D、G或是X这类只支持整数格式的字符串之外,大多数的字符串格式同时可以指定小数点的精确位数。指定小数位数的方法很简单,只需要在字符串后直接接上要指定的小数位数即可。举例来说,我们希望数值变成小数下两位的货币格式,那么就只要将Format属性设为C2即可。
关于数值格式的设置,可以参考如下:
格式化字符窜 |
原始数据 |
结果 |
d8 |
1234 |
00001234 |
f4 |
1234.56 |
1234.5600 |
除了以上的常用字符串格式之外,也可以定制字符串:
定制数值字符串格式化 |
格式 |
# |
代表数值位数 |
0 |
代表数值固定位数 |
. |
小数点 |
, |
千分号 |
% |
百分比符号 |
举例来说,如果我们希望数值保留千分位符号,且小数点下两位,则此时就要在Format属性中填入=”#,###.##”,此时,原来数值“1233.567”就会被格式化为“1,233.57”。格式化字符串“#”与“0”之间最大的差别在于,如果使用“#”,当位数不足时,并不会自动补齐,而如果使用“0”,则会在不足位数之处补零。举例来说,数值“1233.5”的Format设为=”#,###.###”时,则呈现结果为“1,233.5”;但若是Format设为=”0,000.000”时,则呈现结果为“1,233.500”。此外要注意的是,如果是使用默认常见字符串格式,只要直接在Format属性输入格式化字符串即可,如果是使用定制字符串格式时,必须在开头加上等号,同时字符串前后加上双引号。
日期的格式化就显得更加复杂,因为涉及以符号显示还是以文字显示的问题。以下是默认常用的日期字符串格式。
日期格式化字符串 |
说明 |
d |
简单日期 |
D |
完整日期(完整年月日) |
t |
简单时间(时分) |
T |
完整时间(时分秒) |
f |
完整日期时间(完整年月日) |
F |
完整日期时间(完整年月日,时间到时分秒) |
g |
一般日期时间 |
G |
一般日期时间(时间到时分秒) |
R或r |
RFC1123格式 |
日期格式化字符串呈现的结果:
格式化字符串 |
原始数据 |
结果 |
d |
2004/7/19 下午 10:07:21 |
2004/7/19 |
D |
2004/7/19 下午 10:07:21 |
2004年7月19日 |
t |
2004/7/19 下午 10:07:21 |
下午10:07 |
T |
2004/7/19 下午 10:07:21 |
下午10:07:21 |
f |
2004/7/19 下午 10:07:21 |
2004年7月19日 下午10:07 |
F |
2004/7/19 下午 10:07:21 |
2004年7月19日 下午10:07:21 |
除了使用基本的日期格式化字符串之外,还可以使用定制日期字符串格式来显示时间。
定制日期字符串格式 |
格式 |
D |
日期 |
Dd |
日期,不足二位数者前方补零 |
Ddd |
星期几 |
Dddd |
星期几完整名称 |
M |
月份 |
MM |
月份,不足二位数者补零 |
MMM |
完整月份名 |
Y |
年份 |
Yyyy |
完整公元年份 |
举例来说,我们希望日期格式显示“2011-01-01”的话,就只要在Format属性处输入=”yyyy-MM-dd”即可。如果要显示的是“2004/1/1”,则要将Format的表达式改写为=”yyyy/M/d”。
除此之外,还有两个文本框属性会影响到日期格式的显示,那就是Calendar以及Language。Calendar属性是会自动将日期转换成指定国家历法的对应年份。而Language影响的范围则是使用者操作系统的地区设定,来显示地区定制的格式。
请注意,Calendar的设置会受到Language所影响。举例来说,当Language设为“中文(简体)”时,Calendar属性就不得设为“Japan”。如果希望设置特殊国家的历法时,必须事先将Language设置为正确的语言。
在新增“文本框”时,我们会发现默认的大小是固定的,若想改变“文本框”的大小,可直接拖放“文本框”的边框来调整,或是利用属性窗口的“Size”属性的“Width”与“Height”来设置,使用属性设置比较可以确保文本框的大小以便排列整齐。
当文本框内呈现的是数据库字段内容或计算后产生的结果时,通常都无法预期数据内容的长度是否会超过“文本框”的大小,此时,可将“CanGrow”属性设置为“True”,“文本框”会随着其中的内容横向扩展,而高度将会保持原状不会改变。相反的,也有可能显示的文字内容小于“文本框”,大部分情况下,都会让“文本框”维持原状。但如果在特别的情况下,将“CanShrink”属性设为“True”,可达到自动缩小“文本框”宽度的效果。
线条
线条(Line)可说是在报表单元中最单纯,容易上手的,除了可以放置在页面上任何地方,还可以随心所欲的拖放,斜放、垂直或水平的形式来梅花报表或用作为报表标题与正文的分割线,但比较遗憾的是目前SSRS还无法画出弯曲的线条。
与一般绘图工具相同的是,“线条”是由“起点(Location)”和“终点(EndPoint)”属性来定义它的位置,并且可以通过“LineColor”、“LineWidth”、“LineStyle”外观属性改变线条的颜色、粗细、样式,例如:实线(Solid)、虚线(Dashed)或点(Dotted)让线条更为活泼美观。
此外,“线条”的长度无法随着报表大小的改变而动态延伸,必须再以手动方式做调整,因此,如果想要使用“线条”做为报表标题的底线,建议设定“文本框”的“BorderStyle”属性,会比使用“线条”来得方便许多。
以刚才的徐杂费缴费单为例,我们可以利用虚线来设定缴费单的分割线,同时搭配文字方块以呈现缴费单所需的各项说明信息。
矩形
在SSRS中,矩形(Rectangle)除了作为装饰报表的图形元素外,还可以用来放置其他报表单元,不仅可将单元组化,当多个文本框或其他报表单元同时需要在报表中变换位置时,只需要移动一个“矩形”就能达到此效果,更有助于版面的编排。
“矩形”的属性中大多属于外观设置,其中“PageBreak”属于比较特殊的属性,利用其“Start”、“End”或“StartAndEnd”属性,可强制在报表中加入换页的效果。例如,我们在刚才的学杂费缴费单的矩形(列表一定会伴随着矩形)中设置“PageBreak”属性为“End”,就可以让学杂费单一张变成一页。
图像
在制作商务报表时,除了会使用文字内容之外,图形内容也是不可或缺,尤其是大多数的企业报表都希望能放入公司Logo或是说明图片,除了单纯的图像之外,也可以用来作为背景图或水印。因此,SSRS贴心地提供了“图像(Image)”报表单元,让报表可以经由图片使得内容更为丰富、生动。
SSRS的“Image”支持.BMP、.JPEG、.GIF和.PNG四种图像格式,并且提供多种图像来源,包括:
n 内嵌在报表中的图像(Embedded Image)。
n 从数据库读取的图像(Database Image)。
n 外部的图像URL。
以下将针对各种图像模式的操作过程进行说明。
内嵌
内嵌(Embedded Image)顾名思义是将图像嵌入报表中。使用内嵌图像时,报表设计器会以MIME(Multipurpose Internet Mail extension)的形式来编码图像,并且在报表定义文档(.rdl)将“Image”储存为文字。如此即可将所有图像的数据储存在报表定义中。使用内嵌图像的好处是,可以确保报表随时都能使用图像,但缺点是该图像文件只有这个报表可以使用,无法和其他报表共享,并且也会使报表定义的大小增加。
设置内嵌图像的步骤很简单,首先,从工具箱中拖拉“Image”至报表设计区域,此时,弹出的对话框中的“General”标签页将“select the image source”选择“Embedded”选项,可在“Use this image”处指定图像的路径,或是利用“Import…”功能将图像导入项目中,即可完成设置。
单击“OK”按钮,即可在报表数据窗口中的“Image”目录中看到刚才加入的图像,同时报表设计区域中也可以看到此图像内容,设计者可以自行调整图像大小以及摆设位置。
外部图像
外部图像可以利用两种模式来使用,第一种是将图像储存于报表单元中,第二种方式则是利用URL来引用图像。
相对于将图像嵌入在报表内,将图像储存在报表单元中的最大好处在于,当部署项目时,图像会被当成独立数据,会与报表定义文件分开放置在报表服务器上。假若有许多报表需要使用到相同的图片文件(如企业商标),使用者储存于报表单元的方式,即可让图像文件能够跨报表共享,且当图像文件更换时,只需要重新部署项目内的图像,不必重新部署报表,只需按下重新整理报表,即可查看更新后的图像。
如果希望将图像加入项目,只需在方案资源管理器中右击“Reports”图示,选择“Add”、“Existing Item…”,将文件类型切换为所有文件,即可将图像加入项目之中。
当项目加入图像之后,待拖拉新的图像之后,将“Select the image source”设为“External”,即可在“Use this image”的下拉菜单中看到刚才加入项目的图像名称,选择此图像即可引用到项目内。
另一种外部图像使用方式则是使用URL存取网络服务器上的图像文件。在报表中希望使用网络上的图像时,只需在“Use this image”区域直接输入链接到图像的URL地址(例如:/image1.jpg">http://<servername>/image1.jpg)即可,不过请注意,有些网站会设置安全性策略禁止外部盗链图片,如果有限制其实会造成引用图像失败。
数据库
前面介绍了内嵌与外部两种图像来源的使用方式,这两种图像来源比较适合在加入少量的图片文件到报表时使用,但是当文件数量较多,或是希望利用参数动态修改对应图片内容时,比较建议将图片先以二进制的方式储存到数据库中。
如何将图像存储到数据库中?
可以使用以下语法来将图像更新至图像列:
UPDATE 表
SET 图像列 =(
SELECT * FROM OPENROWSET(
BULK ‘图像路径’, SINGLE_BLOB)AS A)
WHERE …
当拖拉图像至报表设计区时,首先,将“Select the image source”改为“Database”,并在“Use this field”下拉菜单选择要使用的二进制字段,接下来,请指定该二进制编码的MIME类型,如image/jpeg。
接下来,请切换至“Size”标签页,勾选“Original Size”,如此图像就会以原来的大小来显示。
在此使用了“List”来编排书籍的封面文件、书名、作者以及出版社信息。
以上是加入图像文件的三种模式,此外,图像也可以利用属性来调整相关格式。
当图像文件放入报表时,会发现“Image”报表单元的大小不一定会等于原图片文件的尺寸,此时,可通过图像的“Sizing”属性的四种不同设置方式,依原图片比例调整、缩放,或以“Image”项目所设置的大小为基准对原图片进行切割。
图像的“Sizing”属性有“AutoSize”、“Fit”、“FitProportional”、“Clip”四种设置方式。SSRS默认“图像”的属性为“FitProportional”。
设置完成图像文件后,还可以为其他报表单元设置“BackgroundImage”属性,此属性是用来设置背景图像,这是一个属性集合。
本文转自UltraSQL51CTO博客,原文链接: http://blog.51cto.com/ultrasql/1609277,如需转载请自行联系原作者