【Reporting Services 报表开发】— 表达式
一、常用的SSRS原始函数可以打开文本框的表达式中看到,如图1

图1
如下为SSRS中设计报表时常用的运算函数:
|
运算符/函数 |
说明 |
|
+ |
前后位数字则为加法,前后为字符串则为链接符号 |
|
- |
数值减法 |
|
* |
乘法 |
|
/ |
除法,例如:100/33 = 33.333... |
|
\ |
整数除法,例如:100\3 = 33 |
|
MOD |
求余,例如:10 MOD 3 = 1 |
|
^ |
次方,例如:4^2 = 16 |
|
& |
字符串与数字的链接符号 |
|
LEFT |
向左取出特定个数的字符,例如:LEFT(Fields!ProductName,1) |
|
RIGHT |
向右取出特定个数的字符,例如:RIGHT(Fields!ProductName,1) |
|
MID |
从指定位置取出特定数量的字符,例如:MID(Fields!ProductName,2,1) |
|
InStr |
从左方开始搜寻特定字符串的位置,大小写敏感 |
|
InStrRev |
从左方开始搜寻特定字符串的位置,大小写敏感 |
|
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) |
以上函数中基本上和SQLSERVER 中的函数的用法差不多,另外最常被弄混的就是“+”以及"&"。前者是当连接在两个数字之间时,则执行加法;当在两个字符串之间时,则将前后字符串相连。但是“&”符号则是无论前后是数字还是字符串,都会将它们视作字符串连接在一起。无论是“+”或者是“&”都只能处理字符串和时间之间的连接运算;如果数字和时间,即使是“&”符号也会产生编译错误。
以下为VB.NET中常用的数据转换函数
|
函数 |
说明 |
|
CBool |
转换为布尔值 |
|
CDate |
转换为日期 |
|
CCur |
转换为货币单位 |
|
CDbl |
转换为双精度浮点数 |
|
CDec |
转换为十进制书 |
|
CInt |
转换为整数 |
|
CLng |
转换为LONG数值 |
|
CSng |
转换为单精度浮点数 |
|
Cstr |
转换为字符串 |
在条件表达式中,常用的=、<>、>=、<=、and、or等比较运算符都可以使用,同时也支持VB.NET中的判断函数,下表为常用的判断函数:
|
函数 |
说明 |
|
IsNothing |
判断是否为空值 |
|
IsNumeric |
判断是否为数值 |
|
IsDate |
判断是否为日期 |
二、颜色管理
在以下案例中,我们将月销量低于100笔的数据格,利用存储数据格底色以及字型的属性变更,以提醒查看报表者注意。
再【Reporting Services 报表开发】— 矩阵的使用 的图23的基础上处理,改成如下,如图2

图2
1.请将要改变底色的单元格选中,并按F4,在属性窗口中选中BackgroundColor属性,并在下拉框中选择“表达式”。如图3

图3
2.接着,在编辑的表达式窗口上方方格内输入,如图4:
=IIF(Sum(Fields!SALES_QTY.Value) < 100 ,"Blue","White") =IIF(Sum(Fields!SALES_QTY.Value) < 100 and IsNothing(Sum(Fields!SALES_QTY.Value)) = 0,"Blue","White")

图4
这表示销售量(记得加上Sum函数表示汇总值)低于100件的背景色改为蓝色,其余维持原色(白色)。上方语句不管是否为空值,至于下方的语句是排除为空值的数据格,各位可以依照需求来判断使用哪段表达式:IIF()函数的用法如下:
IIF(判断条件式,True返回值,False返回值)
也可以写成“巢状IIF”,表示则销量低于100件为蓝色,100-199件为绿色,其余为白色
=IIF(Sum(Fields!SALES_QTY.Value) < 100,"Green",
IIF(Sum(Fields!SALES_QTY.Value) < 200,"Blue","White"))
TIP 巢状条件
虽然IIF可以写成巢状条件式,但这种写法实在很繁琐且难以维护,因此,建议利用以下Choose以及Switch语法。
=Choose(Datepart("w",Fields!BirthDate.Value),"第一","第二","第三","第四","第五","第六","第七")
=Switch(Sum(Fields!SALES_ATY.Value) < 100,"Green",Swich(Sum(Fields!SALES_ATY.Value) < 200,"Blue","White"))
3.切换预览,可以发现销量低于100件以下的商品会被蓝色标示出来,透过色彩的变化,可以让使用者能够立即察觉数据的异常。如图5

图5
参考书籍《SQL Server 2008 R2 Reporting Services 报表服务》
需要下载的数据库和SQL脚本:http://www.wsbookshow.com/bookshow/kjlts/jsj/kfzj/11395.html 的图书详情—>下载资源
【Reporting Services 报表开发】— 表达式的更多相关文章
- 【Reporting Services 报表开发】— 交互式报表
我们知道,界面是人与系统间的对话方式,当使用者面对的是冷冰冰的界面,不但会造成使用者对于系统的热情减低,也会因为不便而产生诸多抱怨.尤其像报表时企业内几乎每日都会使用到的工具,因此,如何让使用者可以再 ...
- 【Reporting Services 报表开发】— 页码编列
一.打开 SQL Server Business Intelligence Development Studio,新建项目—>商业智能项目—> 报表服务器项目,命名为CH4 二.在报表文件 ...
- 【Reporting Services 报表开发】— 矩阵的使用
矩阵,相较于数据表示一维的数据,只能指定固定的数据列,来呈现动态的明细数据行,所以,它可以说是种二维的数据展现形式,让我们能够很容易地从数据行和数据集的交替中查看对应的汇总信息.像SQL Server ...
- 【Reporting Services 报表开发】— 如何根据明细的行数实现分页(比如每隔5行分页)
一.新建报表:对于初学者可以参考我前面的文章[Reporting Services 报表开发]— 总结 如图1: 图 1 二.选择 new_name文本框—>添加组—>选择行组中的父组.具 ...
- 【Reporting Services 报表开发】— 数据表的使用
一.打开 SQL Server Business Intelligence Development Studio,新建项目—>商业智能项目—> 报表服务器项目,命名为CH3 二.在报表文件 ...
- 【Reporting Services 报表开发】— 级联式参数设置
级联式参数设置 再清楚的菜单,只要遇到选择项目一多的时候,难免会让人眼花缭乱,而找不到该选的选项.举例来说,像是零售业动辄万种商品品类,如果希望快速的选择到希望查看的产品品类时,就需要更有效率的搜索方 ...
- 【Reporting Services 报表开发】— 数据表存储格式修改
文本框 Format属性:日期:输入d(表示简易日期).2007/5/1 0:00:00 输入d之后 变成 2007/5/1 金额:输入C0(表示货币),系统会根据设定值产生对应的货币符号,至于0 ...
- 【Reporting Services 报表开发】— 如何设置报表分页列标题每一页都显示
一.打开已经开发好的报表ReportTest,选择列组下的高级模式—>选择行组的静态(会关联列标题订单编号),修改下面的属性: 1.Hidden:False 2.FixedData:True 3 ...
- 【Reporting Services 报表开发】— 总结
一.环境搭建:安装SQL Server 2008 R2或SQL Server 2012过程略,这里我安装的是SQL Server 2012. 二.新建报表项目: 1.打开Visual Studio 2 ...
随机推荐
- JLOI 斯迈利的赌注
直接高精度模拟,加上简单贪心 Program XJOI2263; ..] of longint; var a,b:arr; s1,s2:ansistring; i,j:longint; sum:int ...
- Unity3D ShaderLab 各向异性高光
Unity3D ShaderLab 各向异性高光 各向异性时一种模拟物体表面沟槽方向性的高光反射类型,它会修改或延伸垂直方向上的高光.当我们想模拟金属拉丝高光的时候,它非常适合.下面就一步一步实现. ...
- setSelection()和requestFocusFromTouch()
昨天我遇到一个问题,点击返回的时候要在onResume()中用setSelection()定位到刚才点击的item,因为点击item进入后,我又一直点击“下一个”按钮,但是返回的时候listview不 ...
- UI学习笔记---第四天
事件处理 事件概述 UIEvent:事件,是由硬件捕捉的一个表示用户操作设备的对象 分三类:触摸事件\ 晃动事件\ 远程控制事件 触摸事件:会包含1个到多个触摸点 实现触摸 UIView支持触摸事件 ...
- iOS学习笔记---c语言第十天
动态内存分配 一.存储区划分 从低到高(内存地址小----内存地址大) : 代码区---常量区---静态区---堆区---栈区 栈内存 //凡是在函数体内定义的变量 都存储在栈区(包括形参). ; ...
- pstack使用和原理
前言: 最近小组在组织<<深入剖析Nginx>>的读书会, 里面作者提到了pstack这个工具. 之前写JAVA程序, 对jstack这个工具, 非常的喜欢, 觉得很有用. 于 ...
- 94. Binary Tree Inorder Traversal
Given a binary tree, return the inorder traversal of its nodes' values. For example:Given binary tre ...
- ZOJ 1045 HangOver
原题链接 题目大意:叠扑克牌,给出伸出长度,问最多需要几张扑克牌. 解法:循环累加.退出循环后向上取整输出. 参考代码: #include<iostream> using namespac ...
- 关于C中scanf()函数读取字符串的问题
#include <stdio.h> int main(void) { ]; scanf("%s", s_name); printf("Hello, %s!\ ...
- Spring MVC 使用拦截器优雅地实现权限验证功能
在上一篇 SpringAOP 实现功能权限校验功能 中虽然用AOP通过抛异常,请求转发等勉强地实现了权限验证功能,但感觉不是那么完美,应该用拦截器来实现才是最佳的,因为拦截器就是用来拦截请求的,在请求 ...