SharePoint 场中动用 SQL Server BI,固然报表服务器使用 SQL Server
分类:博客热点

核心提示:灵活的报表功能是大多数业务应用程序的一个要求,这些报表功能在集成到 Web 应用程序中之后用途更加广泛

本文转自:

 

灵活的报表功能是大多数业务应用程序的一个要求,这些报表功能在集成到 Web 应用程序中之后用途更加广泛。利用 SQL Serverreg; 2000 Reporting Services 的最新版本,您可以轻松地具有来自各种数据源的报表生成功能。在本文中,我将介绍使用 Visual Studioreg; 和 Reporting Services 来编写报表,并演示如何将报表集成到 Web 应用程序中。

 

前言

在sql server2012报表配置管理器上没有“sharepint集成”模式选择项(采用新建),如下图:

威尼斯正规官网 1

怎么回事情呢?后来通过查询资料才知道,如下:

重要提示

从 SQL Server 2012 版本开始,Reporting Services 配置管理员不设计用来管理 SharePoint 模式报表服务器。 SharePoing 模式通过使用 SharePoing 管理中心和 PowerShell 脚本进行管理和配置。 有关为 SharePoint 集成模式安装和配置 Reporting Services 的信息,请参阅 SQL Server 联机丛书中的安装 Reporting Services SharePoint 模式作为单服务器场

重要提示

配置和管理 Reporting Services SharePoint 模式不再需要或支持 Reporting Services 配置管理器。 使用 SharePoint 管理中心在 SharePoint 模式中配置报表服务器。 有关详细信息,请参阅管理 Reporting Services 服务应用程序

Reporting Services 是基于服务器的报表生成平台,该平台构建在 .NET Framework 上并与 SQL Server 2000 集成在一起,因此您可以使用一个扩展的基于 Web 服务的 API 将丰富的报表生成功能集成到应用程序中。尽管报表服务器使用 SQL Server 作为报表的储存库,但利用 OLE DB、ODBC 或 ADO.NET 提供程序的任何数据源都可以用来为报表提供数据,这就使得 Reporting Services 成为在各种企业环境中生成报表的极佳工具。

若要查看部署到报表服务器的报表或在本地文件系统上存在的报表,您可以在 Web 应用程序中使用 WebForms ReportViewer 控件来呈现它们。

安装Sql Server2012数据库

· 本主题不涉及安装 SharePoint 2010 产品。 有关详细信息,请参阅在 SharePoint 场中使用 SQL Server BI 功能的指南。

· 这些过程适用于配置 SQL Server 2012 报表服务器,而不能用于未使用 SharePoint 共享服务体系结构的报表服务器早期版本。 例如,SQL Server 2008 Reporting Services 报表服务器和 SQL Server 2008 R2 Reporting Services 报表服务器。

· 验证是否已在 Windows 服务器管理器中启动“SharePoint 2010 管理”服务。

威尼斯正规官网 2

Reporting Services 是作为 SQL Server 2000 的一部分而授权的,因此如果您有已授权的 SQL Server 的副本,则可以在同一服务器上运行 Reporting Services 而无需支付额外的许可证费用。如果您决定在独立的、尚未经 SQL Server 授权的计算机(例如,Web 服务器)上运行 Reporting Services,您将需要购买额外的 SQL Server 许可证。

 

单服务器配置的数据库注意事项

· Reporting Services 和 SharePoint 产品及技术均使用 SQL Server 关系数据库来存储应用程序数据。

· SQL Server 2012 Reporting Services (SSRS) 需要兼容的 SQL 引擎的 SQL Server 评估版实例。 有关硬件和软件要求的详细信息,请参阅安装 SQL Server 2012 的硬件和软件要求。

· 如果已安装了数据库实例,则 SharePoint 产品可以使用现有的数据库实例。 如果未安装数据库引擎实例,则 SharePoint 产品安装程序将安装 SQL Server Express Edition 以用于 SharePoint 应用程序数据库。

· 报表服务器实例不能将 SQL Server Express Edition 用于其数据库。 但是,由 SharePoint 产品安装的 SQL Server Express Edition 实例可以与您也可能安装的其他数据库引擎版本并存。

要开始使用 Reporting Services,您可以下载位于 SQL Server 2000 Reporting Services 的 120 天试用版软件,它还包括有关如何获得该产品的安装媒体的说明。在安装该产品时,请确保选中包括示例报表的选项,因为我要将这些报表集成到本文的 Web 应用程序中。

 

在 SharePoint 模式下安装 Reporting Services 报表服务器
  1. 运行 SQL Server 安装向导。
  2. 在向导的左侧单击“安装”,然后单击“全新 SQL Server 独立安装或向现有安装添加功能”
  3. “安装程序支持规则”页上单击“确定”,假定所有规则均已通过验证。
  4. “安装程序支持文件”页中,单击“安装”
  5. 在支持文件已完成安装并且支持规则显示“已通过”状态后,单击“下一步”。 查看任何警告或妨碍安装的问题。
  6. “产品密钥”页中,键入密钥或接受 Enterprise Evaluation Edition 的默认密钥。

单击“下一步”

  1. 阅读并接受许可条款。 对于您单击以同意发送功能使用情况数据来帮助改进产品功能和支持,Microsoft 深表感谢。

单击“下一步”

  1. “安装角色”页上选择“SQL Server 功能安装”

单击“下一步”

威尼斯正规官网 3

  1. “功能选择”页中,选择以下选项:

· Reporting Services – SharePoint

· 用于 SharePoint 2010 产品的 Reporting Services 外接程序威尼斯正规官网 4 用于安装外接程序的安装向导选项是 SQL Server 2012 版中的新增功能。

· 如果您尚未安装 SQL Server Database Engine 实例,则您还可以选择“数据库引擎服务”“管理工具 - 完整”以提供一个完整环境。

单击“下一步”

  1. “安装规则”页上单击“下一步”。 查看任何警告或妨碍安装的问题。
  2. 如果您已选择“数据库引擎服务”,请在“实例配置”页上接受 MSSQLSERVER 的默认实例,然后单击“下一步”。 与以前的 Reporting Services 体系结构不同,Reporting Services 共享服务体系结构不基于实例。
  3. 阅读“磁盘空间要求”页,然后单击“下一步”
  4. “服务器配置”页上键入相应的凭据。 如果您要使用 Reporting Services 数据警报或订阅功能,则需要将 SQL Server 代理的“启动类型”更改为“自动”

单击“下一步”

  1. 如果您选择了“数据库引擎服务”,您将看到“数据库引擎配置”页。请将相应的帐户添加到 SQL 管理员列表,然后单击“下一步”
  2. “Reporting Services 配置”页上,您将看到“仅安装”选项处于选中状态。 此选项将安装报表服务器文件,它将不会为 Reporting Services 配置 SharePoint 环境。SQL Server 安装完成后,您需要按照本主题的其他章节的内容配置 SharePoint 环境。 这包括安装 Reporting Services 共享服务和创建 Reporting Services 服务应用程序。
  1. 请通过在“错误报告”页上单击用于发送错误报告的复选框,来帮助 Microsoft 改进 SQL Server 功能和服务。

单击“下一步”

  1. 查看任何警告,然后在“安装配置规则”页上单击“下一步”
  2. “准备安装”页上,查看安装摘要,然后单击“下一步”。 该摘要将包含一个 Reporting Services 节点,该节点将包含 SharePointFilesOnlyMode 的安装模式值以及帐户信息。

 

Reporting Services 概述

 

配置SharePoint集成模式下的Report Services

 

Reporting Services 报表设计使用新的 Visual Studio .NET 2003 报表设计器,在安装有 Visual Studio 的同一计算机上安装了 Reporting Services 后,该设计器就可以使用。设计器以新的基于 XML 报表定义语言 (RDL) 输出报表布局和数据访问的说明,而 RDL 文件会发布到报表服务器。如果您希望为用户提供创作功能,也可以使用第三方的报表设计器。

 

Powershell脚本配置Reporting Services

在执行 SQL Server 安装向导的过程中已安装了必需的文件,但需要将服务注册到 SharePoint 场中。 SQL Server 2012 版本引入了对 SharePoint 模式下的 Reporting Services 的 PowerShell 支持。 以下步骤将指导您完成打开 SharePoint Management Shell 并运行 cmdlet 的过程:

  1. 单击“开始”按钮
  2. 单击“Microsoft SharePoint 2010 产品”组。如下图:

威尼斯正规官网 5

  1. 右键单击“SharePoint 2010 Management Shell”,然后单击“以管理员身份运行”
  2. 运行以下 PowerShell 命令以安装 SharePoint 服务。 命令成功完成后会在 Management Shell 中生成一个新行。 当命令成功完成时,不会向 Management Shell 返回任何消息:

Install-SPRSService

  1. 运行以下 PowerShell 命令以安装服务代理:

Install-SPRSServiceProxy

  1. 运行以下 PowerShell 命令以启动服务,或者查看下面的注释以了解有关从 SharePoint 管理中心启动服务的说明:

get-spserviceinstance -all |where {$_.TypeName -like "SQL Server Reporting*"} | Start-SPServiceInstance

如下图:

威尼斯正规官网 6

您也可以从 SharePoint 管理中心(而不是通过运行第三个 PowerShell 命令)来启动服务。 以下步骤对于验证服务是否正在运行很有用。

  1. 在 SharePoint 管理中心的“系统设置”组中,单击“管理服务器上的服务”

威尼斯正规官网 7

  1. 找到“SQL Server Reporting Services 服务”,然后在“操作”列中单击“启动”

威尼斯正规官网 8

  1. Reporting Services 服务的状态将从“已停止”更改为“已启动”。 如果 Reporting Services 服务不在列表中,请验证是否已使用 PowerShell 安装了该服务。

注意

如果 Reporting Services 服务停留在“正在启动”状态,并且未更改为“已启动”,请验证是否已在 Windows 服务器管理器中启动“SharePoint 2010 管理”服务。

管理员可以使用基于 Web 的报表管理器来管理已发布的报表,并且可以执行一些任务,例如,保证某些用户组报表的安全或更改已部署报表的数据源连接字符串。用户也可以使用报表管理器来浏览和查看报表;但是很多公司倾向于使用 URL 请求或 Reporting Services Web 服务,将报表查看直接集成到它们现有的内部 Web 站点或应用程序中。

 

 

图 1 Reporting Services 体系结构

 

创建 Reporting Services 服务应用程序

本节提供您在查看现有服务应用程序的情况下,用于创建新的服务应用程序的步骤和属性说明。

  1. 在 SharePoint 管理中心的“应用程序管理”组中,单击“管理服务应用程序”

威尼斯正规官网 9

  1. 在 SharePoint 功能区中,单击“新建”按钮。
  2. 在“新建”菜单中,单击“SQL Server Reporting Services 服务应用程序”

威尼斯正规官网 10

注意

如果 Reporting Services 选项没有出现在列表中,则表明 Reporting Services 共享服务尚未安装。 查看上一节,了解如何使用 PowerShell cmdlt 安装 Reporting Services 服务。

  1. “创建 SQL Server Reporting Services 服务应用程序”页中,输入应用程序的名称。 如果您要创建多个 Reporting Services 服务应用程序,则一个描述性名称或命名约定将帮助您组织长期的管理操作。
  2. “应用程序池”部分中,为该应用程序创建一个新应用程序池(推荐)。 使用与服务应用程序相同的名称作为新应用程序池的名称,可能会使您正在进行的管理更加容易。

为该应用程序池选择或创建一个托管帐户。 请确保指定一个域用户帐户。 通过域用户帐户,可以使用 SharePoint 的托管帐户功能,从而使您可以在一个位置中更新密码和帐户信息。 如果您计划扩展部署以便包括将在同一标识下运行的附加服务实例,则域帐户也是必需的。

威尼斯正规官网 11

  1. “数据库服务器”中,您可以使用当前服务器或选择其他 SQL Server。
  2. “数据库名称”中,默认值是 ReportingService_<guid>,该名称是唯一的数据库名称。 如果要键入新值,您必须键入唯一的值,因为我们建议对每个服务应用程序都使用唯一的数据库。

威尼斯正规官网 12

  1. “数据库身份验证”中,默认值是“Windows 身份验证”。 如果您选择“SQL 身份验证”,请参考 SharePoint 管理员指南以便了解有关如何在 SharePoint 部署中使用此身份验证类型的最佳实践。

威尼斯正规官网 13

  1. “Web 应用程序关联”部分中,选择要设置为供当前 Reporting Services 服务应用程序访问的 Web 应用程序。 可以将一个 Reporting Services 服务应用程序与一个 Web 应用程序相关联。 如果所有当前 Web 应用程序均已与一个 Reporting Services 服务应用程序相关联,则将显示警告消息。

威尼斯正规官网 14

  1. 单击“确定”

可以将报表参数化,这样用户可以在查看报表时从选择列表中进行挑选;它们还可以导出为多种格式,例如,Microsoftreg;Excel、PDF 和 XML。尽管实时报表提供最新的数据,也可以将报表缓存一段时间以提高性能并减少数据源上的负载。对于商务智能应用程序,报表可以访问 Analysis Services OLAP 多维数据集,而且 Reporting Services 甚至可以导入现有的 Microsoft Access 报表,尽管由于这两种技术间存在差异,它并不能支持所有的 Access 功能。有关 Reporting Services 体系结构的详细情况,请参见图 1。

将 ReportViewer 控件添加到 Web 应用程序

  1. 使用 Microsoft Visual C# 或 Microsoft Visual Basic 创建一个新的 Microsoft ASP.NET 网站。

    - 或 -

    打开一个现有的 ASP.NET 网站并添加一个新的 Web 窗体。

  2. 在“工具箱”中找到 ReportViewer 控件。 如果“工具箱”不可见,则可以通过从“视图”菜单中选择“工具箱”来进行访问。

  3. 将 ReportViewer 控件拖到 Web 窗体的设计图面上。

    名为 reportViewer1 的 ReportViewer 控件便添加到该窗体中。

将控件添加到该窗体之后,“ReportViewer 任务”智能标记将出现,提示您选择某一报表。 如果您要查看的报表已部署到报表服务器上,则从“选择报表”下拉列表中选择<服务器报表>选项。 选择<服务器报表>选项后,将出现两个附加的属性:“报表服务器 URL”和“报表路径”。 “报表服务器 URL”是指向相应报表服务器的地址,“报表路径”是指向要呈现的报表的完整路径。 如果您想要以本地模式查看报表,则选择“设计新报表”选项以启动报表设计器或选择已是现有项目的一部分的报表。

在远程处理模式下查看报表)


下面的示例演示如何呈现已部署到某一报表服务器的报表。 此示例使用     AdventureWorks2012   示例报表项目随附的 Sales Order Detail 报表。

该示例使用集成的 Windows 身份验证,因此您首先必须启用模拟。 为此,将以下行插入 web.config 文件:

 

复制window.epx.codeSnippet.copyCode('CodeSnippetContainerCode_0ff6de4d-61a7-4a1b-a1a8-dc6e9b1ce19d');)

<!-- Web.config file. -->
<identity impersonate="true"/>
注意

默认情况下,模拟处于禁用状态。

C#

VB

复制window.epx.codeSnippet.copyCode('CodeSnippetContainerCode_2aa292be-4209-49db-8bcb-ecc34256c22b');)

protected void Page_Init(object sender, EventArgs e)
{
    if (!Page.IsPostBack)
    {
        // Set the processing mode for the ReportViewer to Remote
        reportViewer.ProcessingMode = ProcessingMode.Remote;

        ServerReport serverReport = reportViewer.ServerReport;

        // Set the report server URL and report path
        serverReport.ReportServerUrl =
            new Uri("http://<Server Name>/reportserver");
        serverReport.ReportPath =
            "/AdventureWorks Sample Reports/Sales Order Detail";

        // Create the sales order number report parameter
        ReportParameter salesOrderNumber = new ReportParameter();
        salesOrderNumber.Name = "SalesOrderNumber";
        salesOrderNumber.Values.Add("SO43661");

        // Set the report parameters for the report
        reportViewer.ServerReport.SetParameters(
            new ReportParameter[] { salesOrderNumber });
    }
}

在本地处理模式下查看报表)


下面的示例演示如何呈现作为 Windows 应用程序的一部分并且尚未部署到报表服务器的报表。

设计第一个报表

 

尽管我介绍的重点在于将报表集成到应用程序中而不是创作报表,但熟悉 Reporting Services 的最好办法就是立即着手创建一个新的报表项目。为此,请打开 Visual Studio 并使用 Report Project Wizard 创建一个新的项目,该向导位于 Business Intelligence Projects 部分。为您的项目指定一个名称,单击“OK”,然后将显示报表向导对话框。在您选择数据源的这一步骤中,单击“Edit”按钮,以便指定连接到您数据库服务器上的 AdventureWorks2000,单击“OK”,然后选中使其成为共享数据源的选项。

 

单击“Next”进入到“Design the Query”步骤,指定简单的 SQL 语句(例如,“SELECT * FROM Product”),然后单击“Next”。Reporting Services 支持显示一组固定列的标准表格式 (Tabular) 报表,也支持使用带有动态列的交叉表样式视图的矩阵式 (Matrix) 报表,因此为该报表选择 Tabular,然后单击“Next”。

 

将某些列(例如,ProductID 和 Name)拖到 Details 部分并单击“Next”。选择默认的 Bold 样式,单击“Next”,然后指定您的报表服务器的虚拟目录的 URL,例如,。现在,单击“Next”。最后一步,您可以为您的第一个报表指定名称,例如,Products Report;然后单击“Finish”。

 

该向导将会创建该项目,同时还创建一个可以由多个报表共享 AdventureWorks2000 数据源,以及一个在设计器中打开的有关 Products 数据的报表(请参见图 2)。默认情况下,显示使您可以修改报表设计的 Layout 选项卡。

 

图 2 Visual Studio 报表设计器

 

Data 选项卡用于指定报表的查询,包括设置参数以便在执行报表时提示用户提供值。单击“Preview”选项卡来测试报表显示给用户的方式。

将 Sales Order Detail 报表添加到网站

  1. 打开该报表将添加到的网站。

  2. 在“网站”菜单中,选择“添加现有项”。

  3. 浏览到安装了 AdventureWorks 报表示例项目的位置。

    默认位置是 C:Program FilesMicrosoft SQL Server100SamplesReporting ServicesReport SamplesAdventureWorks Sample Reports。

  4. 选择 Sales Order Detail.rdl 文件并单击“添加”按钮。

    Sales Order Detail.rdl 文件现在应是该项目的一部分。

  5. 在解决方案资源管理器中右键单击 Sales Order Detail.rdl 文件,然后选择“重命名”。 将该报表重命名为 Sales Order Detail.rdlc,然后按 Enter。

    如果解决方案资源管理器不可见,则可以通过从“视图”菜单中选择“解决方案资源管理器”来将其打开。

现在,您可以将附加的报表添加到该项目,或者通过添加附加列、将数据分组、添加汇总、甚至是添加能够显示来自其他查询的数据的附加表来修改 Products 报表。与很多报表设计器不同,Reporting Services 使用带外设计,这使得它可以轻松地创建将各种源的数据集中在同一个位置的报表。 您刚刚创建的报表项目由当前驻留在您的开发计算机上的一组文件组成。为了将这些报表发布给用户,您需要将该项目部署到报表服务器。

 

以下代码示例将为销售订单数据创建一个数据集,然后以本地模式呈现 Sales Order Detail 报表。

C#

VB

复制window.epx.codeSnippet.copyCode('CodeSnippetContainerCode_5b2d9d9f-d223-4308-a60b-eff4256eeade');)

protected void Page_Init(object sender, EventArgs e)
{
    if (!Page.IsPostBack)
    {
        // Set the processing mode for the ReportViewer to Local
        reportViewer.ProcessingMode = ProcessingMode.Local;

        LocalReport localReport = reportViewer.LocalReport;

        localReport.ReportPath = "Sales Order Detail.rdlc";

        DataSet dataset = new DataSet("Sales Order Detail");

        string salesOrderNumber = "SO43661";

        GetSalesOrderData(salesOrderNumber, ref dataset);

        ReportDataSource dsSalesOrder = new ReportDataSource();
        dsSalesOrder.Name = "SalesOrder";
        dsSalesOrder.Value = dataset.Tables["SalesOrder"];

        localReport.DataSources.Add(dsSalesOrder);

        GetSalesOrderDetailData(salesOrderNumber, ref dataset);

        ReportDataSource dsSalesOrderDetail = new ReportDataSource();
        dsSalesOrderDetail.Name = "SalesOrderDetail";
        dsSalesOrderDetail.Value = dataset.Tables["SalesOrderDetail"];

        localReport.DataSources.Add(dsSalesOrderDetail);

        // Create the sales order number report parameter
        ReportParameter rpSalesOrderNumber = new ReportParameter();
        rpSalesOrderNumber.Name = "SalesOrderNumber";
        rpSalesOrderNumber.Values.Add("SO43661");

        // Set the report parameters for the report
        localReport.SetParameters(
            new ReportParameter[] { rpSalesOrderNumber });
    }
}

private void GetSalesOrderData(string salesOrderNumber,
                           ref DataSet dsSalesOrder)
{
    string sqlSalesOrder =
        "SELECT SOH.SalesOrderNumber, S.Name AS Store, " +
        "       SOH.OrderDate, C.FirstName AS SalesFirstName, " +
        "       C.LastName AS SalesLastName, E.Title AS " +
        "       SalesTitle, SOH.PurchaseOrderNumber, " +
        "       SM.Name AS ShipMethod, BA.AddressLine1 " +
        "       AS BillAddress1, BA.AddressLine2 AS " +
        "       BillAddress2, BA.City AS BillCity, " +
        "       BA.PostalCode AS BillPostalCode, BSP.Name " +
        "       AS BillStateProvince, BCR.Name AS " +
        "       BillCountryRegion, SA.AddressLine1 AS " +
        "       ShipAddress1, SA.AddressLine2 AS " +
        "       ShipAddress2, SA.City AS ShipCity, " +
        "       SA.PostalCode AS ShipPostalCode, SSP.Name " +
        "       AS ShipStateProvince, SCR.Name AS " +
        "       ShipCountryRegion, CC.Phone AS CustPhone, " +
        "       CC.FirstName AS CustFirstName, CC.LastName " +
        "       AS CustLastName " +
        "FROM   Person.Address SA INNER JOIN " +
        "       Person.StateProvince SSP ON " +
        "       SA.StateProvinceID = SSP.StateProvinceID " +
        "       INNER JOIN Person.CountryRegion SCR ON " +
        "       SSP.CountryRegionCode = SCR.CountryRegionCode " +
        "       RIGHT OUTER JOIN Sales.SalesOrderHeader SOH " +
        "       LEFT OUTER JOIN  Person.Contact CC ON " +
        "       SOH.ContactID = CC.ContactID LEFT OUTER JOIN" +
        "       Person.Address BA INNER JOIN " +
        "       Person.StateProvince BSP ON " +
        "       BA.StateProvinceID = BSP.StateProvinceID " +
        "       INNER JOIN Person.CountryRegion BCR ON " +
        "       BSP.CountryRegionCode = " +
        "       BCR.CountryRegionCode ON SOH.BillToAddressID " +
        "       = BA.AddressID ON  SA.AddressID = " +
        "       SOH.ShipToAddressID LEFT OUTER JOIN " +
        "       Person.Contact C RIGHT OUTER JOIN " +
        "       HumanResources.Employee E ON C.ContactID = " +
        "       E.ContactID ON SOH.SalesPersonID = " +
        "       E.EmployeeID LEFT OUTER JOIN " +
        "       Purchasing.ShipMethod SM ON SOH.ShipMethodID " +
        "       = SM.ShipMethodID LEFT OUTER JOIN Sales.Store" +
        "        S ON SOH.CustomerID = S.CustomerID " +
        "WHERE  (SOH.SalesOrderNumber = @SalesOrderNumber)";

    SqlConnection connection = new
        SqlConnection("Data Source=(local); " +
                      "Initial Catalog=AdventureWorks; " +
                      "Integrated Security=SSPI");

    SqlCommand command =
        new SqlCommand(sqlSalesOrder, connection);

    command.Parameters.Add(
        new SqlParameter("SalesOrderNumber",
        salesOrderNumber));

    SqlDataAdapter salesOrderAdapter = new
        SqlDataAdapter(command);

    salesOrderAdapter.Fill(dsSalesOrder, "SalesOrder");
}

private void GetSalesOrderDetailData(string salesOrderNumber,
                       ref DataSet dsSalesOrder)
{
    string sqlSalesOrderDetail =
        "SELECT  SOD.SalesOrderDetailID, SOD.OrderQty, " +
        "        SOD.UnitPrice, CASE WHEN " +
        "        SOD.UnitPriceDiscount IS NULL THEN 0 " +
        "        ELSE SOD.UnitPriceDiscount END AS " +
        "        UnitPriceDiscount, SOD.LineTotal, " +
        "        SOD.CarrierTrackingNumber, " +
        "        SOD.SalesOrderID, P.Name, P.ProductNumber " +
        "FROM    Sales.SalesOrderDetail SOD INNER JOIN " +
        "        Production.Product P ON SOD.ProductID = " +
        "        P.ProductID INNER JOIN " +
        "        Sales.SalesOrderHeader SOH ON " +
        "        SOD.SalesOrderID = SOH.SalesOrderID " +
        "WHERE   (SOH.SalesOrderNumber = @SalesOrderNumber) " +
        "ORDER BY SOD.SalesOrderDetailID";

    using (SqlConnection connection = new
        SqlConnection("Data Source=(local); " +
                      "Initial Catalog=AdventureWorks; " +
                      "Integrated Security=SSPI"))
    {

        SqlCommand command =
            new SqlCommand(sqlSalesOrderDetail, connection);

        command.Parameters.Add(
            new SqlParameter("SalesOrderNumber",
            salesOrderNumber));

        SqlDataAdapter salesOrderDetailAdapter = new
            SqlDataAdapter(command);

        salesOrderDetailAdapter.Fill(dsSalesOrder,
            "SalesOrderDetail");
    }
}

请参阅)


部署和测试

概念

使用 ReportViewer 控件集成 Reporting Services

在部署报表项目之前,需要指定将项目部署到哪一个服务器。如果您最初使用该向导创建了报表项目,那么您可能已经指定了目标服务器。

要检查该设置或指定一个新服务器,请选择“Project | Properties”来显示 Project Properties 对话框。进行该设置使您可以指定项目的文件夹名和 Reporting Services Web 服务的 URL。在菜单上选择“Build | Deploy Solution”将构建报表项目,然后将其部署到服务器。

在部署报表项目后,您就可以进行测试了。已部署到服务器的每个报表都具有唯一的路径,该路径可以用于在浏览器中显示报表。例如,要显示您创建的第一个报表,请打开浏览器并导航到 +Project1/Products+Report。这会以 HTML 格式呈现报表并在页面的顶端显示一个工具栏,以便使您可以对报表进行翻页、更改缩放比例,甚至以各种其他格式(例如,PDF)查看报表。

您还可以通过导航到服务器上的以下 URL,来浏览已部署到服务器的所有报表项目的列表:。报表服务器提供使您可以查看已部署的报表类型和查看报表的最小的用户界面。

报表管理器是一个更加友好、功能更丰富的工具,可以通过简单地导航到本地服务器上的以下 URL 来访问该工具:。

威尼斯正规官网,将报表添加到 Web 应用程序

既然您知道如何设计、部署和测试报表,就让我们将这些报表集成到应用程序中吧!很多 Web 应用程序都包括针对每个用户的自定义主页,通常称为“仪表板”。这个页面通常提供针对用户量身定做的摘要式信息并作为跳转点来访问应用程序的其他功能。

我将使用 Reporting Services 附带的示例报表构建一个仪表板来演示报表集成,如图 3 所示。如果您在安装过程中安装了示例报表,您可以打开该报表项目(安装到 Reporting ServicesSamplesReports)并将其部署到测试服务器。您可以使用报表管理器工具通过浏览到 SampleReports 文件夹来测试示例报表。

图 3 仪表板 Web 应用程序

为用户提供从应用程序访问报表的权限的最简单方法就是使用超级链接。如您已经看到的那样,每个报表都具有唯一的、用于在浏览器中显示报表的路径。对于仪表板应用程序,报表应该在单独的窗口中打开,因此我将为该超级链接指定一个目标。到目前为止,这是非常简单的,但是对于具有参数报表的报表(例如,Employee Sales Summary 报表)来说,情况又如何呢?要真正地将报表集成到应用程序中,您通常需要为参数指定某些值,以便用户不会被经常提示。

Reporting Services 使这项任务非常简单:报表参数的值可以指定为 URL 的一部分。例如,Employee Sales Summary 报表具有 ReportYear、ReportMonth 和 EmpID 参数,因此显示编号为 24 的员工在 11 月份的销售额的超级链接可以是:

a href= Sales SummaryReportMonth=11EmpID=24 target=_blankNovember Sales Summary/a

不具有在 URL 中指定的值的参数将使用在报表设计器中设置的默认值,因此刚才展示的示例销售汇总报表使用的 ReportYear 值是 2003。Reporting Services 还有一组用于控制报表显示方式的内置参数。这些参数通过加上前缀“rs:”来区别您自己的报表参数。

其中最有用的一个参数就是 rs:Format 参数,它用于指定呈现报表的格式。这使您可以包括不需要显示在 HTML 中的报表,还可以使用诸如 PDF 甚至是 XML 的格式。其他常用参数是 rs:Command,指示出要应用到您所指定的路径的操作。例如,rs:Command=Render 将呈现一个报表,而 rs:Command=ListChildren 将列出文件夹中所有项。

如果您没有指定命令,Reporting Services 将查看您指定的路径并计算出要采取的适当操作,例如,呈现报表。图 4 显示了 rs:parameters 的列表。

另一组内置参数控制各种输出格式的行为并使用 rc:prefix。每个报表格式都具有其自己特定的一组参数。例如,要以没有标题行的逗号分隔值 (CSV) 格式呈现报表,您应该使用 rc:NoHeader 参数:

a href= Sales rs:Command=Renderrs:Format=CSVrc:NoHeader=trueCompany Sales/a

HTML 格式具有非常多的 rc:parameters,在将报表集成到 Web 应用程序中时为您提供很多的灵活性。如果应用程序将报表参数选择传递到报表,那么您可能要通过将 rc:Parameters 设置为 false 来避免提示用户,甚至可以通过将 rc:Toolbar 设置为 false 来关闭整个工具栏。有关常用 HTML rc:parameters 的列表的详细信息,请参见图 5。

如果您的 Web 应用程序使用框架来显示报表(比如说,在左侧窗格中显示报表列表,在右侧窗格中显示报表内容),您将需要使用 rc:LinkTarget 参数来指定内容框架的名称。否则,当用户点击报表中的任意嵌入链接时,浏览器就会使用整个窗口来重新显示报表,而不是保留导航窗格和内容窗格的框架。

您可以使用我介绍过的 URL 参数来添加“快速启动”区域,该区域包含使用户可以打开常用报表的超级链接的列表(请参见图 3)。每个超级链接将其目标设置为 _blank 以在独立的浏览器窗口中打开报表,并使用诸如 rs:Format=EXCEL 这样的参数来控制报表在浏览器中的显示方式。

将报表嵌入到 Web 应用程序中

如果在用户查看报表时,不再使用弹出新的浏览器窗口,您可能希望实际地将报表嵌入到自己的 Web 页中。最简单的方法就是在 Web 页上使用 IFRAME,并使用我介绍过的基于 URL 的相同技术来设置 SRC 属性。如果您使用这种技术,切记要将 rc:LinkTarget 参数设置为 IFRAME 的名称,以避免当用户单击报表的链接时在框架外弹出任意一个框架。

如果您以前设计过 ASP.NET 的服务器控件,您可能会认为 IFRAME 技术并不十分完美,因为它要求 Web 开发人员理解 Reporting Services 的 URL 参数语法才能构建适当的 SRC 字符串。构建一个封装有所有参数并使开发人员可以简单地设置诸如 ReportPath 和 Zoom 之类的参数的服务器控件难道不是一个更好的想法吗?

Reporting Services 非常方便地附带了名为 ReportViewer 的示例(安装到 Reporting ServicesSamplesApplicationsReportViewer 目录),它可以实现这个想法。该控件封装了 IFRAME 和 URL 访问参数逻辑,并提供了一个更简单的用于将报表嵌入到应用程序中的方法。要使用该控件,请打开并构建 ReportViewer 解决方案,然后通过浏览到 ReportViewer 解决方案的 bin 目录中的 ReportViewer.dll,切换到您的 Web 应用程序并将该控件添加到工具箱中。

您可以使用该控件将嵌入报表添加到仪表板应用程序中。将控件添加到 Web 页,设置高度和宽度属性并添加以下代码以便在页面中显示一个报表:

Private Sub Page_Load(ByVal sender As System.Object, ByVal _ e As System.EventArgs) Handles MyBase.Load If Not IsPostBack Then ReportViewer1.ServerUrl = ReportViewer1.ReportPath = /SampleReports/Sales Order _ DetailSalesOrderNumber=so8153 ReportViewer1.Toolbar = ReportViewer.multiState.False ReportViewer1.Zoom = 75 End IfEnd Sub

保证报表的安全

Reporting Services 安全性使用熟悉的基于角色的模型。用户和组可以分配给诸如 System Administrator 或 Browser 之类的角色,特定角色的所有成员都将允许执行为该角色定义的操作。

报表管理器用于执行与安全性相关的任务,例如,分配用户角色或修改项(例如,报表)的权限等。默认情况下,Administrators Windows 组同时是所有文件夹的 System Administrator 和 Content Manager 的成员。为了扩展报表访问到其他用户,用户帐户或组必须添加到诸如 Browser 的角色中。这通常是在文件夹级设置的,同时也可以针对单独的报表进行重写。

除了保护对报表的访问外,管理员还必须决定如何将报表连接到源数据库。可以配置数据源使用集成的安全性,以便可以使用当前的用户帐户进行数据库连接。此外,还可以定义 Windows? 或 SQL Server 用户名和密码,并将其安全地存储在报表服务器数据库中。这种方法要求报表运行在无用户交互(例如,订阅所涉及的交互)的情况下。

使用 Reporting Services Web 服务

到目前为止,我一直使用的 URL 访问方法提供了一种快速便捷的方式来查看报表并指定参数,但是它不能提供对所有可用的报表管理功能的访问。Reporting Services 还附带了一个具有丰富功能的 API,为您提供通过 Web 服务对高级功能的访问。例如,该 Web 服务包括用于管理报表的数据源信息的方法或者枚举某个文件夹中所有项的方法。

我将使用 Web 服务将报表的动态列表添加到仪表板应用程序中。为此,您将需要使用 Add Web Reference 将一个 Web 服务引用添加到应用程序中。指定到 Web 服务的路径,如下所示:

在添加引用后,您可以创建 ReportingService 代理类的一个实例,并调用该服务上的一个方法,就像我在此处完成的一样:

Private Sub LoadSampleReports() Dim rs As New ReportingService rs.Credentials = System.Net.CredentialCache.DefaultCredentials Dim item As CatalogItem For Each item In rs.ListChildren(/SampleReports, False) If item.Type = ItemTypeEnum.Report Then DropDownList1.Items.Add(New ListItem(item.Name, item.Path)) End If NextEnd Sub

如果您正在一个 Intranet 环境中部署应用程序,您要通过将 添加到应用程序的 web.config 文件中来启用模拟。您还要将客户端登录凭据传递到该服务,如前面的示例所示。

ListChildren 方法返回 CatalogItem 对象的数组,该数组表示用户有权查看的项,包括报表、文件夹和数据源。Path 属性提供了到项的唯一路径,例如,/SampleReports/Sales Order Detail,Type 属性使您可以区别报表和其他类型的项。

既然我已经将报表名称加载到了下拉列表中,我必须决定如何在仪表板应用程序内显示报表。我决定扩展我早期编写的 ReportViewer 代码并且只要用户选择某个报表并点击“Go”按钮就更改 ReportPath 属性。您还可以使用 IFRAME 并将 SRC 设置为适当的 URL(并为报表的名称加上前缀“”)。

除了报表管理功能外,Web 服务提供的其他主要功能就是报表呈现。大多数应用程序(包括报表管理器应用程序)都使用 Web 服务功能来列出报表或更改设置,并使用我介绍过的 URL 方法来显示报表。但是,如果您想要完全控制报表内容在应用程序中处理的方式,可以使用 ReportingService 类的 Render 方法。该方法返回一个可以在以后保存到输出文件的字节数组;取决于请求的格式,输出文件可以是图形文件或 Excel 电子表格。如果您要以 HTML 格式呈现报表,可能会更加复杂一些,因为您将需要使用 RenderStream 方法来分别呈现图像或其他资源。

尽管本文的讨论重点在于 Web 应用程序,您也可以使用相同的技术将报表生成功能添加到基于 Windows 的应用程序中。最简单的方法仍是使用 URL 访问,或者从应用程序启动用户的浏览器,或者包括 Microsoft WebBrowser ActiveX? 控件并使用 Navigate 方法来加载适当的 URL。当您想要更好地控制某些操作(例如,在图片框中显示结果或将文件直接保存到磁盘的操作)时,Web 服务的 Render 信息工作者通常必须处理两种类型的报表:当他们需要收集信息时他们想要获得的类型以及每周都出现在他们桌面上或他们电子邮件中的类型。至此,我已重点阐述了用户获取他们自己的报表的过程,但 Reporting Services 还包括一种非常强大的称为订阅的功能,它使您可以将报表“推”给客户。

订阅报表

Reporting Services 订阅功能让用户按照计划接收报表。报表通常会通过电子邮件发送到用户,但 Reporting Services 同时还让您将报表生成到一个文件共享甚至可以编写自己的提交扩展。这使您可以轻松地完成分发任务,例如,向每个销售代表以电子邮件方式发送每周销售统计报表,或者设置每月财政报表在每个月的最后一天运行,并将其作为一个 PDF 写出到公司文件共享。

在设置订阅前,您需要考虑报表将如何连接到数据库以检索其数据。因此,订阅的报表将不会由用户直接执行,您无法为数据源使用集成的安全性,但在报表运行时必须指定要使用的用户名和密码。如果您试图为使用集成安全性的报表设置订阅,Reporting Services 将会返回一个错误。

要更改示例报表的数据源,请打开“Report Manager | Sample Reports”,然后单击 AdventureWorks 数据源。该数据源由所有示例报表共享,因此对它所做的任何更改将会影响所有报表。选中“Credentials stored securely in the report server”选项,指定一个具有访问 AdventureWorks 数据库权限的帐户的有效域用户名和密码,选中“Use as Windows credentials when connecting to the data source option”,然后单击“Apply”按钮。请注意,这种更改意味着指定的帐户将始终用于连接该数据库,不管实际上是哪个用户运行该报表。

因此,您已经准备好深入研究并查看提供对订阅访问的 Web 服务 API。使用 Web 服务的这一部分比使用 List 或 Render 方法要多一些挑战,主要原因在于可用选项的数量。我将要使用的方法是 CreateSubscription,它也属于 ReportingService 类。有关该方法的参数的详细说明,请参阅 ReportingService 类,但最基本的是您需要指定要订阅的报表、生成计划(例如,每周一早晨或每月的最后一个周五)、电子邮件选项(包括电子邮件地址)以及所有报表参数值。

我已经将名为 EmailSubscriber 的实用工具类包括在本文的示例代码中,该示例代码摘要了某些复杂的内容。仪表板应用程序使用该类允许用户指定他们的电子邮件地址并使 Employee Sales Summary 报表通过电子邮件每周一发送给他们。在产品应用程序中,您可以调整每个用户的报表,例如,当您创建订阅时,可以根据员工的 Windows 用户帐户检索他们的员工 ID,然后适当地设置报表参数。

如果您不希望等到下周一才测试您的订阅,它有助于您了解有关 Reporting Services 如何处理订阅计划的更多信息。当您创建一个订阅时,Reporting Services 会创建一个根据要求的计划执行的 SQL Server 代理作业。您可以通过打开 Enterprise Manager,展开 Management、SQL Server Agent 和 Jobs 文件夹来查看这个作业。该订阅作业将具有“Report Server”类别,并以由 Reporting Services 用来跟踪该作业的 GUID 命名。右键单击该作业并选择 Start Job,如果您已正确地设置了您报表的方方面面,您的报表将会发送电子邮件给您。

接下来该怎么做?

您可以用来向应用程序中添加重要报表生成功能的两个其他 Reporting Services 功能包括 Data Driven Subscriptions 和 Snapshots,前者使您可以设置用户的邮件列表并以电子邮件形式将特定参数化的报表发送给他们,后者是在计划点的报表视图,同时还可以提供报表的历史视图。Reporting Services 是使用模块化的体系结构构建的,如果您需要更强大的功能,它可以使您使用自己喜好的、以 .NET 为目标的语言来添加功能强大的新扩展。

本文由威尼斯在线注册平台发布于博客热点,转载请注明出处:SharePoint 场中动用 SQL Server BI,固然报表服务器使用 SQL Server

上一篇:5.随机提取条记录的例子,列出上传文档最多的五个人的信息 下一篇:威尼斯正规官网Server编写存储过程小工具功能,INSERT ON 语句手工删除
猜你喜欢
热门排行
精彩图文