Report Builder 3.0 - 允许用户在报告生成后添加数据

Report Builder 3.0 - permit user to add data in after report generated

对夜间生成的多维数据集使用 Report Builder 3.0。

我正在设计的报告用于为患者存档或传输(物理)文件。用户 运行 报告,打印它,然后将其附加到文件,然后将这些文件发送到中心区域,该区域将 archive/send 文件放在。

该报告有许多参数是为 return 单个患者设计的。这一切都很好。

其中一个参数 (@prmReason) 是关于文件发生什么的单一选择,例如,"Transfer"(将文件传输到另一个办公室)、"Archive - closed"、"Archive - deceased"、"Archive - excess"(办公室 space 人手有限,因此员工归档 'older' 个文件)。

returned 字段之一是 CloseReason。这个字段总是有一个值。如果该字段在数据库中为空(因为客户端尚未关闭),则它将包含值:"Unknown".

根据@prmReason,显示或隐藏此字段(以及其他字段)。再次 - 所有工作都没有问题。

现在是棘手的部分。
如果 @prmReason = "Archive - closed" 或 "Archive - deceased" 则报告将显示 CloseReason.
问题是如果 CloseReason = "Unknown" 那么我需要知道文件关闭的原因并将其显示在报告中。

我希望用户能够从关闭原因列表中选择一个值。然后我希望选择显示在报告中。显然,如果有真正的原因,则显示此值。

所以我追求的效果是: 用户 select 的参数和 运行 的报告。 Report 然后检查报告为什么 运行(例如@prmReason)。 如果@prmReason =("Archive - closed" OR "Archive - deceased") AND CloseReason = "Unknown" 然后以某种方式生成用户可以 select 的 CloseReasons 列表。然后该值显示在报告中。 我什至可以应付它是一个自由文本字段。只是一些东西,以便中心区域可以在必要时更新数据库并保存 phone call/email 等

(是的,我意识到我可以将列表作为用户在打印报告后勾选的一系列复选框,但这在其他报告中将是一个有用的功能)。

编辑:CloseReasons 的空值与 Whosebug 格式冲突(抱歉没有正确检查 post)。值实际上小于符号,然后是单词 Unknown,然后大于符号。它并没有真正影响问题

您可以添加一个额外的隐藏参数。

如果此参数未设置,则在您的报告中显示一个小的 table,其中包含关闭原因列表。

您然后设置 table 单元格的操作 属性 以打开报告,选择您现有的报告作为要打开的报告,但这次您可以为最终参数传递一个值,其中,除了在报告中显示关闭原因外,还会隐藏上述关闭原因选项 table。

更新 说清楚更清楚。

以下内容基于 Northwind 示例数据库。我有一个指向这个数据库的共享数据源。

创建新报告。

添加指向共享 Northwind 数据源的数据源

使用以下查询添加指向上述数据源的新数据集

SELECT 
    EmployeeID,
    FirstName, LastName, Address, City, Country, Title, Notes
 FROM Employees
 WHERE EmployeeID = @EmployeeID

向报告中添加一些字段以显示一些基本信息。

我们现在有一个只有一个参数的简单报表 @EmployeeID

接下来我们要显示每个员工的一些操作。为灵活起见,我根据员工的 Country 使此列表动态化。此列表可以是静态的。

使用以下查询创建新数据集dsActions

    DECLARE @actions TABLE(ActionID int, ActionLabel varchar(20))

    -- Get employees country
    DECLARE @Country varchar(20) = (SELECT Country FROM Employees WHERE EmployeeID = @EmployeeID)

    IF @Country = 'UK'
       BEGIN
          INSERT INTO @actions VALUES
          (1,'Sack them'),
          (2,'Buy them a pint'),
          (3,'Promote')
       END
    ELSE
       BEGIN
          INSERT INTO @actions VALUES
          (1,'Fire them'),
          (2,'High 5 them'),
          (3,'Ask them to run for office')
       END

SELECT * FROM @actions

在报告中添加 table 以显示这些值。

目前我的设计是这样的。 (所有表达式都是来自第一个数据集的简单字段,用于显示员工详细信息,没什么特别的)

当我 运行 我明白了。

好的,现在所有的基础都已经完成了,我们需要能够再次调用这个报告,但是已经选择了一个动作。我们将使操作 table 可点击并将操作的标签传递给报表。 这是同一份报告,我们只会有一份报告。

首先,在报告中添加一个名为 action 的新参数并将其隐藏。添加默认值 'noaction'。

接下来,如果 action 参数设置为 'noaction',我们只想显示我们的操作 table。为此,将操作 table (tablix) 的 Hidden 属性 设置为以下

=Parameters!action.Value <> "noaction"

接下来我们要添加一个显示结果action参数的文本框,但前提是action参数不是noaction.

所以添加一个文本,将它的表达式设置为=Parameters!action.Value,将隐藏的属性设置为=Parameters!action.Value = "noaction"

最后,我们需要让我们的动作列表调用我们的报告,但带有特定的动作。为此,我们需要修改操作 table.

首先保存报表,无论你选择什么名称都是你将select作为目标报表的名称,因为报表会调用自己。

右键单击包含 ActionLabel 的单元格,然后转到文本框属性。

Select 操作选项卡,然后选择 "Go to report"。选择您当前正在处理的报告的名称(此实际报告将自称为报告)。

将 EmployeeID 参数设置为 [@EmployeeID],将 action 参数设置为 [ActionLabel]

为了简单起见,我使用了标签,但只要在显示操作的文本框中考虑到这一点,您就可以传递 ActionID。

您可以选择格式化文本,使其看起来像 link、

最终设计和 action/parameter 设置如下所示

当我第一次 运行 报告时,我得到以下...

只要单击其中一个操作,我就会得到这个...

希望现在一切都清楚了。