Reporting Service [在开发中自我学习]

  SQL ServerReporting Services 提供了各种现成可用的工具和服务,帮助您创建、部署和管理单位的报表,并提供了使您能扩展和自定义报表功能的编程功能。

  Reporting Services 是基于服务器的报表平台,为各种数据源提供了完善的报表功能。Reporting Services 包含一整套可用于创建、管理和传送报表的工具以及允许开发人员在自定义应用程序中集成或扩展数据和报表处理的 API。Reporting Services 工具在 MicrosoftVisual Studio 环境中工作,并与 SQL Server 工具和组件完全集成。

  --摘自MSDN:http://msdn.microsoft.com/zh-cn/library/ms159106.aspx

  最近项目需要,做了几个ReportingService的报表。

  之前接触过,不过都是其他RD开发好的,直接引用跳转链接就OK,具体的报表设计没有深入了解,这次自己动手急急忙忙要做,也没多准备,都是开发中遇到问题去找答案,慢慢摸索.

  使用Visual Studio开发Repoting Service

  不得不说,微软的Visual Studio集成工具为我们开发人员提供了很大方便.

  在VS里新建报表服务器项目,就可以进入上面的界面,类似Crystal  Report可以添加数据源、数据集、定义字段、查询字段、使用SQL、或者使用存储过程.

  报表设计窗口分[数据][布局][预览]三个Tab,分别用于编辑数据源、数据集,报表样式、布局、内容,预览报表效果。

  [数据]  

  数据源、数据集通过窗口,可以很方便的选择:

  [布局]

  布局界面,这里提供了丰富的UI模型,一些常用的基本模型都有提供,包括[文本框][线条][表][矩阵][矩形][列表][图像][自报表][图表],这些模型还可以多重结合,解决一些复杂的报表设计。比如表格里增加子报表,用于显示详细信息之类的需求。

  [预览]  

  上面基本是废话,下面列一些我在开发中遇到的东西,可能对知道的人来说不值一提,但是对我这个第一次做的人来说,是经验的累积。

  数据集、参数、筛选器

  在设计数据集的时候,往往会需要参数、查询过滤等动作,在ReportingServic里提供了参数+过滤器,对一些简单的过滤条件,这个方式很实用。

  比如在报表我预设了[FORM_NO]这个参数条件,在筛选器里可以选择数据集的某个字段[FORM_ID]以某种方式[=/LIKE/!=/>/>=/</<=..]和参数对应.

  如果普通的直接对应关系不能满足你的需求,还可以使用表达式,这里提供了更多的处理函数、运算符等

  实在不行,就自己动手写SQL吧:

View Code
SELECT 
AR.FORM_NO AS FORM_ID,
AR.SAMPLE_DES,
EDA.EMP_NAME AS OWNER,
EDA.ORG_ID AS OWNER_GROUP,
AR.PRE_COST AS PRE_COST,
AR.CREATE_DT,
AR.END_DT,
AR.Z_MACHINE AS TOOL,
AF.FAB_NAME AS WEBSITE,
CASE FORM_STATUS
WHEN 'AP' THEN '完成'
ELSE '未完成'
END AS STATUS,
AR.REPORT_DESC,
AR.REPORT_PATH,
AR.LAST_APPROVER,
AR.APPROVER_DATE
FROM AUOFORM22 AR
LEFT JOIN EMP_DATA_ALL EDA ON EDA.EMP_NO = AR.FORM_APPLICANT
LEFT JOIN AUOFORM22_FAB AF ON AF.FAB_SN = AR.FAB_SN
WHERE AR.CREATE_DT>=CONVERT(DATETIME,@DATE_FROM)
AND AR.CREATE_DT<=CONVERT(DATETIME,@DATE_TO)
AND (@FORM_NO IS NULL OR AR.FORM_NO = RTRIM(LTRIM(@FORM_NO)))
AND (@FAB IS NULL OR LEN(@FAB)=0 OR @FAB ='ALL' OR AF.FAB_NAME = RTRIM(LTRIM(@FAB)))
AND (@MACHINE IS NULL OR LEN(RTRIM(LTRIM(@MACHINE)))=0 OR AR.Z_MACHINE LIKE '%'+ RTRIM(LTRIM(@MACHINE))+'%')
AND (@APPLIER_NO IS NULL OR LEN(RTRIM(LTRIM(@APPLIER_NO)))=0 OR EDA.EMP_NAME like '%'+RTRIM(LTRIM(@APPLIER_NO))+'%')
AND AR.FORM_STATUS='AP'

 

  布局,控件模型的使用

  表格应该是做报表不可避免会用到的模型,在我的需求里需要通过点击ID展现某笔资料更详细的情况,一开始就是直接考虑使用子报表展现详细资料,但是具体怎么显示一直在和呈现效果纠结着。

  起初使用URL跳转的形式,把ID设计为一个超链接的形式,点击后跳转到子报表,并传入ID的参数值:  

  但是实际显示的效果不佳:  

  点击[表单号码]会在本页面直接覆盖,显示子报表的信息:  

  后来转变思路考虑用[列表]  

  基本实现了这样的功能,但是导出Excel部分会把子报表一起显示出来,User对这个又不想显示子报表信息...纠结,又反功。没有找到控制导出的内容的方法,只能换思路。

  最终还是换成表格,嵌入子报表的形式,完成需求,不过导出Excel时,还是会带着子报表的一行[不知是否有办法解决]

  报表设计部分还有一些比较零碎地小功能,比如项目的显示[可以设置可见性]、字段内容的格式、分组、排序、分页等等,基本看看属性,摸摸就知道啦!

  这次的几个小报表任务,让我在ReportingService部分算是填充了一个空白吧,以此庆贺一下~哈哈

  附上几个效果图[比较丑,不要见怪]

  《表格+子报表》  

  《图表+矩阵》

  最简单的表格

posted @ 2012-02-02 13:33  liver.wang  阅读(935)  评论(4编辑  收藏  举报