zoukankan      html  css  js  c++  java
  • Reporting Services系列一:初试

    Reporting Services(以下称RS)这东西国内用的好像不是很多,百度搜去,没几条。最近上头忽然提出要用这东西。

     

    总而言之、统而言之,RS是基于XML的数据呈现。

     

    根据菜鸟我这几天的接触,觉得RS有以下的优点:

    1.数据报表的制作方便,有点类似PB中制作数据呈现

    2.报表发布之后,可以通过URL方便地访问

    3.支持PDFExcel等多种格式的呈现和导出方式

    4.订阅功能允许你以共享文件或电子邮件方式让RS定时生成报表到指定目录或发送到指定邮箱中

     

    但它相应也有不少缺点:

    1.须得安装SQL Server

    2.须得使用VS.NET发布(总觉得应该有更简便的发布方式,还没来得及仔细去弄,高手们如果有发布RS的经验,不吝赐教,多谢!)

     

    装好了RS,在IIS里看增加了两个虚拟目录,一个是ReportServer 做部署用,一个是Reports 做管理用。

     

    另外,会在开始菜单SQL SERVER的下发现多了一个相应的菜单,其中包括一个“报表管理器”和RS的联机丛书。同时,打开你的VS.NET 2003,可以在“智能商业项目”中找到RS的项目模板,这样你就可以新建一个RS项目。

     

    项目打开之后,在解决方案的项目下有两个文件夹:“共享数据源”、“Reports”。RS可以使用多种数据源,所谓“共享”,是指可供多张报表共用的数据源。而“Reports”文件夹下放的则是你要的一张张报表。

     

    添加一张报表之后,界面上会有“数据”、“布局”、“预览”三个TAB页。在“数据”页中,你可以配置当前报表所需的数据集,这需要你提供SQL查询语句。“布局”窗口允许你设计报表的样式,在左侧的工具箱中你可以看到“表格”、“矩阵”、“图表”等,另外,工具箱边上有一个“字段”窗口,选择相应数据集,将列出所有数据列,可以将列拖放到表格的“详细信息”行中的某一格上,表示表格该列所呈现的是此列的数据。“预览”窗口可以让你即时地看到你所制作的报表的效果。

     

    下面介绍RS中的两个概念,这在使用RS的过程可能会常常遇到、用到:

    (1)参数:

    在“数据”或“布局”视图下,主菜单上的“报表”项下有“报表参数”一项,允许你设置可供报表使用的参数。最常见的使用参数的方法是,先设定报表参数如p_id,而后在生成数据集时的sql语句中就可用@p_id来表示(Oracle中是:p_id):select * from products where categoryid=@p_id

     

    具体在参数页面中包括设置其:名称、提示、数据类型、可用值、默认值等。为报表设置参数后,当其显示时,在页面上方将显示参数栏,可能是简单的文本框,或者是下拉框,这取决于你对可用值的设定。提示则作为标签显示于文本框或下拉框的左侧。

     

    可用值的设置有两种方式,包括无查询、来自查询,无查询方式中你可以指定相应的“标签”“值”对,如:

    标签       

    True              1

    False      0

    “来自查询”需要你预先设置一个数据集,以该数据集中某个字段的值集合作为该参数可供选择的值。

     

    类似的,默认值中也有无查询和来自查询,道理跟上面一样。

     

    在通过url访问时,可以直接通过url指定相关参数的值,指定的方法与一般指定url参数的方法一样,以“&”作为分隔符。如“……&p_id=1&p_date=20061213

     

    (附带说明,经过测试,IE地址限制为2083B)

     

    内置参数:

    RS中有另一类内置参数,与上面所述参数不同,“url访问参数”可以用于控制报表格式等等,可简单分为两类:以“rs:”为前缀的指向报表服务器,以“rc:”为前缀的表示与HTML页面显示相关,

     

    rc:Toolbar,用truefalse表示是否显示工具栏,RS报表默认带有工具栏,工具栏上包括查询、刷新、导出等按钮,如果指定为false将不显示工具栏

     

    rc:Parameters,表示是否显示参数栏,如果报表设置了参数,默认将在页面上方显示参数栏,允许你输入参数,如果指定为false将不显示参数栏

     

     

    rs:Command,指示出要应用到您所指定的路径的操作。例如,rs:Command=Render 将呈现一个报表,而 rs:Command=ListChildren 将列出文件夹中所有项。

     

    rs:Format,它用于指定呈现报表的格式。这使您可以包括不需要显示在 HTML 中的报表,还可以使用诸如 PDF 甚至是 XML 的格式。

     

    关于内置参数,具体可参见RS联机丛书:url access

     

    关于参数,具体可参见RS联机丛书---管理他使用发布的报表---运行报表---运行参数化报表。

     

     

    (2)表达式:

    使用表达式可以使报表更丰富多样。RS报表在很多指定属性的地方都可以使用表达式,比如详细信息行的Color属性指定为:

    =IIF(Fields!WEIGHT.Value<=0,"Red","Black")

    (IIF类似于一个三元运算操作)

     

    =IIF(Fields!WEIGHT.Value<=0, "Red", IIF(Fields!WEIGHT.Value <= 1, "Green", "Black"))

    (IIF可以嵌套,以上表示当Weight列的值为0时,界面将以红色显示该行,否则以黑色显示)

     

    =WeekdayName(Weekday("2007-01-04"))

    (星期四)

     

    =Globals.ReportName

    (用于显示报表名称,可以在报表最上方插入一行,合并所有单元格,然后写入该表达式,即可获得该报表的名称)

     

    在指定报表参数的默认值等情况下亦可以使用默认值,如一个时间类型的参数:

    =Format(Today(),"d")

    (表示当天,格式参数"d"表示短日期格式,不包括时间,如果是"D"则是长日期,包括时间。)

    =Format(DateAdd(DateInterval.Day, -30, Today()),"d")

    (表示30天前)

     

    (附:DateAdd是一个VB函数,DateAdd(interval, number, date)

    interval 字符串表达式,是所要加上去的时间间隔的单位。

    number 数值表达式,是要加上的时间间隔的数目。

    date 日期表达式,这一日期还加上了时间间隔。

     

    Interval包括:yyyy 年、q 季、m 月、y 一年的日数、d 日、w 一周的日数、ww 周、h 时、n 分钟、s 秒,例如:

    DateAdd("d",10,"2000-6-18") = 2000-06-28

    DateAdd("m",-1,"2000-6-18") = 2000-05-18)

     

    (部分RS中可用的函数,可参见:

    RS联机丛书----设计和创建报表----生成报表----创建报表的方法----access导入报表----支持的access报表功能)

     

    可结合表达式与报表参数,如,预先设置一个报表参数p_chart,可用值指定为“表格”、“图表”,默认值为“表格”。在一张报表上分别制作了表格形式与图表形式的报表,分别指定其Visibility---Hidden属性:

    =IIF(Parameters!p_chart.Value="表格",False,True)

    =IIF(Parameters!p_chart.Value="图表",False,True)

    完成之后你就可以通过选择p_chart参数来改变报表形式。

     

    同样,可以结合表达式与报表参数来控制报表显示哪些列,隐藏哪些列。

     

    另一个可用到表达式的地方是数据集中的查询字符串:

    ="Select * From Nodes " & IIF(Parameters!p_Today.Value=1,"where

    trunc(InDate)=trunc(sysdate)","")

    (当选择p_Today参数为1时,列出当天录入到表Nodes的节点信息,否则列出所有的节点信息,有一个不好的地方是在查询字符串中使用表达式的话,要保证表达式为一行,所以在注意删除多余的换行符。如果表达式较长,会比较麻烦。)

     

     

    //另有一些表达式示例(网络资源)

    下面的表达式也是根据 PctComplete 的值返回三个值中的一个

    =Switch(Fields!PctComplete.Value >= .8, "Green", Fields!PctComplete.Value >= .5, "Amber", Fields!PctComplete.Value < .5, "Red")

     

    在数据区域内的文本框中使用包含 RowNumber 函数的表达式,可以显示该表达式所在的每个文本框实例的行号。此函数可用于为表中的各行编号。还可以将其用于更复杂的情况,例如,根据行数插入分页符。有关详细信息。

    下面的表达式显示最外面数据区域中从第一行到最后一行的行号。Nothing 关键字表示该函数将从最外面的数据区域中的第一行开始计数。若要从子数据区域开始计数,可使用数据区域的名称。

    =RowNumber(Nothing)

     

    下面的表达式提供报表的名称及其运行时间。可以将该表达式置于报表表尾或表体的文本框中。其时间格式为短日期形式的 .NET Framework 格式设置字符串:

    =Globals.ReportName & ", dated " & Format(Globals.ExecutionTime, "d")

     

    下面的表达式位于报表表尾的文本框中,提供报表的页码和总页数:

    =Globals.PageNumber & " of " & Globals.TotalPages

     

    下面的表达式位于表头左侧的文本框中,提供页面中的 LastName 文本框的第一个值:

    =First(ReportItems!LastName.Value)

     

    下面的表达式位于表头右侧的文本框中,提供页面中的 LastName 文本框的最后一个值:

    =Last(ReportItems!LastName.Value)

     

    您可以对表头或表尾中的报表项引用应用聚合函数。

    =Sum(ReportItems!Cost.Value)

     

    下面的表达式如果用在组表达式中,可为每 25 行指定一个编号。如果为组定义了分页符,则会每隔 25 行插入一个分页符。

    =Int((RowNumber(Nothing)-1)/25)

     

    对数据行应用交替着色。

    =Iif(RowNumber(Nothing) Mod 2, "PaleGreen", "White")

     

     

    一篇比较详尽的RS入门文章(不保证地址始终有效^^)

    http://www.microsoft.com/china/msdn/library/data/sqlserver/SQLServerReportServ.mspx?mfr=true

     

  • 相关阅读:
    换个角度思考问题
    云南印象
    子网掩码划分实例
    子网掩码划分工具下载
    实景地图
    AutoCAD图像输出(输出图像)技巧
    两种消费观念
    子网掩码划分计算方法及实例
    C/C++从入门到高手所有必备PDF书籍收藏
    WINCE6.0添加特定的软件键盘
  • 原文地址:https://www.cnblogs.com/morvenhuang/p/611778.html
Copyright © 2011-2022 走看看