65.9K
CodeProject 正在变化。 阅读更多。
Home

使用 Report Builder 和 Oracle DB 创建报表 - 第 2 部分

starIconstarIconstarIconstarIconstarIcon

5.00/5 (7投票s)

2014 年 12 月 28 日

CPOL

7分钟阅读

viewsIcon

29668

downloadIcon

257

在本系列文章中,我将分享如何使用 Report Builder 从 Oracle 数据库获取数据来创建报表。

引言

这是本系列文章的第 2 部分(第 1 部分在此)。在本系列文章中,我将分享如何使用 Report Builder 从 Oracle 数据库获取数据来创建报表。根据给定的要求,在获取数据之前,我们需要运行一个存储过程,该存储过程将根据给定的参数从表中获取数据,然后我们需要使用适当的格式在 Report Builder 中填充数据。

这是本系列文章的第二部分,共两部分。在第一部分中,我们了解了如何设置 SQL Developer、Oracle 客户端和 Report Builder。然后,我们使用 SQL Developer 在 Oracle 数据库中创建了表和存储过程。最后,我们使用 Report Builder 创建了一个简单的报表,用于显示 Oracle 数据库中的数据。

现在,在第 2 部分中,我们将为报表提供参数,并启用存储过程以根据给定参数筛选数据。然后我们将对报表进行格式化,最后查看更多可用选项,如 Tablix 和函数。演示应用程序的最终报表如下图所示(单击图像可获取全尺寸图像)

Final Report with Export Options

本文适用于 Report Builder 3.0 的初学者,我建议在阅读此部分之前,请先查看第 1 部分

目录

为了保持文章的合理篇幅,本文分为两部分。两篇文章的内容按照以下大纲进行组织:

第一部分

  • 演示概述
  • 使用 SQL Developer 测试连接
  • 设置 Oracle 客户端
  • 创建新表和存储过程
  • 创建报表

第二部分

  • 创建带参数的报表
  • 格式化报表
  • 使用代码格式化
  • 更多选项
  • 参考文献

创建带参数的报表

在第 1 部分中,我们只是创建了一个不提供任何筛选功能的简单报表。假设用户需要一项功能来生成包含特定部门员工的报表。为了实现这一点,我们首先需要更新存储过程,使其能够接受输入参数,然后我们需要相应地修改报表。以下是实现此需求的步骤。

  1. 替换存储过程“SP_GETEMPLOYEES”,使其可以接受部门名称作为输入。我们将使用SYS_REFCURSOR作为输出参数。此存储过程将仅包含一个简单的select查询,用于根据给定的departmentEmployee表中获取数据,如下所示:
    CREATE OR REPLACE
    PROCEDURE SP_GETEMPLOYEES (DEPARTMENTNAME varchar2, e_recordset OUT SYS_REFCURSOR)IS
    BEGIN
    OPEN e_recordset FOR
    SELECT * FROM EMPLOYEE where DEPARTMENT = DEPARTMENTNAME;
    END SP_GETEMPLOYEES;
  2. 现在我们将执行“SP_GETEMPLOYEES”存储过程,以验证我们的存储过程是否正常工作。以下是执行存储过程的语法。执行 SP 的语法
    var c refcursor;
    execute SP_GETEMPLOYEES('DBA',:c);
    print c;
    以下是存储过程执行的截图,我们能够看到筛选后的数据

    Execute SP with Parameter

  3. 现在,添加 DataSourceDataset 的步骤与我们在第 1 部分(“创建报表”部分 > 步骤 #1 到 4)中所做的相同。但这次添加 Dataset 后,您将能够看到 EMPLOYEEDATASET 数据集已添加到 Datasets 文件夹中,并且在“Parameters”文件夹中添加了一个名为 DEPARTMENTNAME 的新参数,如下图所示。在这里,DEPARTMENTNAME 是一个输入参数,其名称与我们在存储过程中声明的相同。

    Dataset with Parameter

  4. 现在,添加报表和表格的步骤与第 1 部分(“创建报表”部分 > 步骤 #6 和 7)中给出的相同。完成这些步骤后,单击选项卡中的“运行”按钮或按 F5 运行报表。将为您创建报表。运行报表时,您会在上方看到一个文本框,您可以在其中提供“DEPARTMENTNAME”的值,该值将传递给 SP,报表将正常工作并按预期筛选数据。

    Provide Value for Parameter

  5. 在上面的截图中,“DEPARTMENT NAME”标签之间没有空格。如果用户想要一个下拉列表来显示所有部门名称呢?让我们通过右键单击 DEPARTMENTNAME 参数并单击“参数属性”来实现。在这里,您可以根据需要,如果用户只需要选择一组值,或者其他许多格式,来向用户显示一个漂亮的下拉列表 UI。

     

    Parameter Properties

  6. 接下来,我们将进行格式化,将部门显示为包含少量选定值的下拉列表。在提示文本框中,您可以添加空格或任何其他您想要作为下拉列表标签显示的文本。

    Parameter Dispay Name Change

  7. 在这里,如果用户希望在下拉列表中以大写字母显示数据,但数据在 Oracle 表中以其他格式保存。为了处理这种情况,我们提供了与参数值不同的显示方式。按照下面的截图并单击“确定”。

    Parameter Dropdown Values

  8. 运行报表,希望您能在下拉列表中看到department名称。

    Parameter Dropdown Values

格式化报表

Report Builder 提供了一些选项来格式化报表,这些选项类似于 MS Excel/Word 中可用的基本操作。例如,单元格中文本的格式化、添加行/列、添加页眉/页脚等。它还提供了各种内置字段,您可以通过简单地拖放来在报表中使用它们。

假设您想向报告添加执行时间和名称。您需要做以下事情:

在表格标题上方插入两行。在第一行中,将报表名称命名为“EMPLOYEE DETAILS REPORT”。在第二行中,写入“Rerun On”作为标签,然后从左侧窗格的内置字段中拖放“Execution Time”。它将显示报表执行日期和时间。“Execution Time”是一个函数,在左侧窗格中作为内置字段提供。还有许多其他类似的内置字段,您可以根据需要使用它们。

Add Execution Time

使用代码进行格式化

很多时候,我们需要根据相同条件设置颜色和其他类型的突出显示。在这种情况下,我们需要使用代码进行格式化。

  1. 假设用户希望根据其地址以不同颜色查看记录。要实现此目的,请转到报表生成器,导航到属性窗口。(如果无法看到属性窗口,请单击顶部功能区中的“视图”选项卡,您将看到属性复选框。)在表中选择一行,然后在属性窗口中查找“BackgroundColors”,单击其值文本框,然后单击“Expression”超链接。现在在表达式窗口中写入如下所示的SWITCH语句,然后单击“确定”。
       =SWITCH(
       Fields!ADDRESS.Value = "Bangalore", "LightBlue",
       Fields!ADDRESS.Value = "Hyderabad", "Moccasin"
    ) 
    上述步骤在下面的截图中突出显示

    Use Code for Background Color

    现在,单击上面截图所示的运行按钮来运行报表,您将得到所需的结果。

  2. 如以下截图所示,使用“导出”选项,您可以将报表保存为给定格式。

    Final Report with Export Options

更多选项

  • 自定义函数:您可以用 VB.NET 编写自定义代码,并在报表中使用这些函数用于各种目的,例如可见性或格式设置。有关更多信息,请查看此 MSDN 页面此文章
  • Tablix:它为您提供在一个报表中提供多个表格(数据区域)的功能。有关更多信息,请阅读此 MSDN 页面
  • 交互式排序:它允许用户在表格中的行或矩阵中的行和列之间切换升序和降序。有关更多信息,请查看此 MSDN 页面
  • 探索更多可能性:MSDN 此处提供了完整的指南,描述了 Report Builder 的各种功能。

结论

在本系列文章的第一部分,我们学习了如何使用 Report Builder 通过存储过程从 Oracle 数据库获取数据来创建简单的报表。在这一部分中,我们学习了如何向存储过程添加参数以筛选数据,在报表中进行一些格式设置,并查看可用的高级选项。欢迎您的评论和建议,以使本文更有用。谢谢!

参考文献

  1. SQL Server 2014 的 Report Builder 帮助
  2. 报表生成器 3.0
  3. Oracle 数据库 11g
  4. Oracle SQL Developer
© . All rights reserved.