微软SQL Server 2000 Reporting Services介绍
[摘要 ] 本文介绍了如何直接修改.rdl文件来实现报表.实际上.NET开发环境中的
报表设计器也只是对.rdl文件进行编辑.
[关键字] Reporting Services,.NET Framework. DrillThrough,rdl文件,rds文件
n 如何将报表系统集成到系统中
Reporing Services的帮助中提到:“有两种集成方式,通过URL访问或者利用Web Service,用URL的方式比较快捷,如果用Web Service就必须手工写一些代码.”具体步骤还需要详细阅读帮助.
n 修改.rdl快速实现报表
在.NET开发环境中提供了Report Designer来开发报表,但对于初学者,建议最好要知道其根本的原理,如果用编辑器将.rdl打开就会发现该文件就是一个XML文件,如果安装了Sample,到文件目录D:\Program Files\Microsoft SQL Server\MSSQL\Reporting Services\Samples\Reports下就可以看到如下文件,AdventureWorks.rds,该文件就是设置数据源的XML文件,用编辑打开看一下,
*********************************************************
<Extension>SQL</Extension>//表示数据源类型为SQL
<ConnectString>data source="(local)";initial catalog=AdventureWorks2000;integrated security=SSPI;persist security info=False</ConnectString>//这里的integrated security表示认证方式,如果有用户和密码的话,应该把这一项去掉.如果要改变数据源的话,应该把data source和initial catalog分别修改一下
.rdl文件也可以用编辑器打开这里选取Employee Sales Summary.rdl文件的一段做说明:
<Header>//这一段对应报表中的标题,
<TableRows>
<TableRow>
<Height>0.375in</Height>
<TableCells>
<TableCell>
……
<Value>Current Month Order Summary</Value>//在图片上可以看到这就是报表的标题!
…….
</Header>
<Details>//这一段对应报表中的标题
<TableRows>
<TableRow>
<Height>0.25in</Height>
<TableCells>
<TableCell>
<ReportItems>
<Textbox Name="OrderNumber">//在图片中可以看到OrderNumber就是第一列的标题!如果要修改的话,只要把名称修改一下就可以了!
<Style>
………….
</Details>
<TableGroups>//从这里开始就正式显示数据了
<TableGroup>
………..
<Value>=Sum(Fields!Sales.Value)</Value>//Sales为一个Field,在后面会定义
….
</TableGroups>
<TableColumns>//这一段表示报表有三列,如果要减少列或增加列,一定要先将这里修改一下,然后修改上面的两段代码,否则就会显示列数不匹配
<TableColumn>
<Width>1.125in</Width>
</TableColumn>
<TableColumn>
<Width>3.625in</Width>
</TableColumn>
<TableColumn>
<Width>1.125in</Width>
</TableColumn>
</TableColumns>
<Query>//这是最核心的部分,也就是SQL语句!其中还用到了几个参数
例如@ReportMonth就是图片顶部的Year查询条件
<DataSourceName>AdventureWorks</DataSourceName>
<CommandText>SELECT Employee.FirstName + ' ' + Employee.LastName AS Employee, DATEPART(Year, SalesOrderHeader.OrderDate) AS OrderYear, DATEPART(Month, SalesOrderHeader.OrderDate)
AS OrderMonthNum, DATENAME(Month, SalesOrderHeader.OrderDate) AS OrderMonth, SUM(SalesOrderDetail.LineTotal) AS Sales
FROM SalesOrderHeader INNER JOIN
<= @ReportMonth)
………………….
SalesOrderHeader.OrderDate)</CommandText>
<QueryParameters>
<QueryParameter Name="@ReportYear">
<Value>=Parameters!ReportYear.Value</Value>
</QueryParameter>
<Fields>//前面提到的Sales是一个定义过的Field,这里就是Field的定义,如果要增加数据,这里也要进行修改,
<Field Name="Employee">
<DataField>Employee</DataField>//Employee对应为SQL查询语句的返回结果!
<rd:TypeName>System.String</rd:TypeName>
</Field>
….
</Fields>
<ReportParameter Name="ReportMonth">
<DataType>Integer</DataType>//Month控件为Integer类型
<DefaultValue>
<Values>
<Value>6</Value>
</Values>
</DefaultValue>
<Prompt>Month</Prompt>//Prompt就是报表顶部的查询控件,Reporting Ser vices还提供DateTime类型
<ValidValues>
<ParameterValues>
<ParameterValue>
<Value>1</Value>
<Label>January</Label>
………….
<结束>
**********************************************************
以上简单的对rdl文件做了分析,很多功能没有分析到,具体可见Reporing Services帮助中的Report Definition XML Elements页面,里面详细的列出了rdl文件支持的所有元素,例如链接功能对应为DrillThrough!如果要看链接的具体实现,可以参照Territory Sales Drilldown.rdl文件,用”Action”搜一下就可以了.