SSRS 2012 表达式 -- 介绍
SSRS 2012 表达式 -- 介绍
在SSRS设计报表时,界面提供了许多属性设置,可以用来修改项目的外观以及显示模式,而大多数的属性也都支持利用表达式的模式,只要看到属性值下拉菜单有出现“表达式…”或是“fx”的字样,就表示可以利用表达式的技术,根据逻辑判断以产生复杂的显示效果。
目前SSRS支持VB.NET的表达式语法,我们可以使用这些表达式将已有的全局属性进行处理后生成要显示的值,或是可以通过表达式的撰写,根据条件动态指定报表的属性值。
在介绍如何撰写SSRS的表达式之前,首先要介绍在SSRS中如何定义运算的数据。基本上,在SSRS提供五种可以在表达式使用的全局属性,分别为:
n 字段(Fields)
n 参数(Parameters)
n 内置字段(Globals)
n 报表条目(ReportItems)
n 使用者(User)
在SSRS中是使用标准的Visual Basic集合语法,来存取这些全局属性,以进行后续的运算。一般来说,有以下的四种形式:
n Collection!ObjectName (默认的表示法)
=User!Language
n Collection.Item(“ObjectName”)
=User.Item(“Language”)
n Collection(“ObjectName”)
=User(“Language”)
n Collection.ObjectName (仅限于全局变量与使用者)
=Globals.PageNumber
这几种方式有何差别呢?一般是使用第一种申明模式,但是,如果希望利用参数来动态指定字段时,就不能使用默认的表示方法,因为字符串参数是不能更改字段名称的,此时,可利用第二或是第三种申明方式,将字段名称以字符串参数传入,就可以利用参数动态变更字段名称。
SSRS表达式的运算与一般VB.NET差不多,以下是几个撰写表达式要注意的地方:
n 所有的字符串前后都必须加上双引号“””。
n 全局属性引用时,属性名称有大小写的差异,举例来说,当“Fields!ProductName”写成“Fields!productName”时,会发生编译错误,不过全局属性集合名称(“fields!ProductName”是没问题的)以及运算函数则不受大小写限制。
n 请注意运算函数所能处理的数据类型限制。
由于SSRS支持所有VB.NET运算函数,以及Microsoft.VisualBasic、System.Convert与System.Math命名空间下的类,或是开启“Expression”选项,使用表达式编辑器来选择要使用的函数以及属性。
在编辑器的上半部可输入想撰写的表达式;左下角则列出可使用的常量、参数、字段、函数等;下方的中间列表,则会随着开发者在左下角所选的类别,列出这类别下可用的值;最后,在右下角的描述方框,则是解释开发者在下方中所选函数的意义。
常用的SSRS运算函数
运算符/函数 |
说明 |
+ |
前后为数字则为加法,前后为字符串则为连接符号 |
- |
数值减法 |
* |
乘法 |
/ |
除法,例如:100/3=33.333… |
\ |
整数除法,例如:100\3=33 |
MOD |
余数,例如:100MOD3=1 |
^ |
次方,例如:4^2=16 |
& |
字符串与数字的连接符号 |
LEFT |
向左取出特定个数的字符,例如:LEFT(Fields!ProductName,1) |
RIGHT |
向右取出特定个数的字符RIGHT(Fields!ProductName,1) |
MID |
从指定位置取出特定数量的字符,MID(Fields!ProductName,2,1) |
InStr |
从左方开始搜寻特定字符串的位置,大小写敏感 |
Replace |
Replace(String,Substring1,Substring2),将字符串中特定子字符串替换 |
LEN |
返回字符串长度,例如:LEN(Fields!ProductName) |
YEAR |
取出时间类型数据的公元年份数值,例如:=YEAR(Globals!ExecutionTime) |
MONTH |
取出时间类型数据的月份数值,例如:=MONTH(Globals!ExecutionTime) |
DAY |
取出时间类型数据的日期数值,例如:=DAY(Globals!ExecutionTime) |
DATEDIFF |
返回两个日期相隔区间,DATEDIFF(dateinterval,date1,date2) |
在以上函数中,最长被弄混的就是“+”以及“&”。前者是当连接在两个数字之间时,则执行加法,当连载两个字符串之间时,则将前后字符串相连。但是“&”符号则是无论前后是数据或是字符串,都会将它们是做字符串连接在一起。无论是“+”或者是“&”都只能处理字符串与时间之间的连接运算,如果是数字与时间,即使是“&”符号也会产生编译错误。
常用的数据转换函数
函数 |
说明 |
CBool |
转换为布尔值 |
CDate |
转换为日期 |
CCur |
转换为货币单位 |
CDbl |
转换为双精确度浮点数 |
CDec |
转换为十进制数值 |
CInt |
转换为整数 |
CLng |
转换为LONG数值 |
CSng |
转换为单精度浮点数 |
CStr |
转换为字符串 |
在条件式中,常用=、<>、>=、<=、and、or等比较运算符都可以使用,同时也支持VB.NET中的判断函数。
常用的判断函数
函数 |
说明 |
IsNothing |
判断是否为空值 |
IsNumeric |
判断是否为数值 |
IsDate |
判断是否为日期 |
要注意的是IsNull是旧的VB中判断空值的函数,在SSRS中已经不再适用,而要更换为IsNothing。
本文转自UltraSQL51CTO博客,原文链接: http://blog.51cto.com/ultrasql/1611241,如需转载请自行联系原作者