报表生成器中的双向参数问题

Posted

技术标签:

【中文标题】报表生成器中的双向参数问题【英文标题】:Bi-directional Parameter issue in Report Builder 【发布时间】:2020-01-09 19:26:58 【问题描述】:

我手头有两项任务要在一份报告中完成。

    应用程序 URL 过滤 - 将在 URL 中传递一个 ListID 以过滤报告。我通过将@id 作为我的数据集的参数来实现这一点。在这种情况下,我只有一个参数。

    报告服务器过滤 - 对于无权访问应用程序/db 的用户,他们可以转到报告服务器并从填充列表 ID 参数的下拉参数 (@ListName) 中选择一个“列表名称” . 我通过级联参数和两个数据集来实现这个场景,一个用于独立的下拉参数(ListName),另一个用于依赖参数(ListID)。

但由于我无法根据应用程序中的 ListName 过滤报告,因此我需要一种方法来在同一个报告中实现两者。当我尝试使用来自应用程序 URL 的 '?id=123' 过滤报告时,它不会过滤报告。

【问题讨论】:

【参考方案1】:

您不需要两个参数,您只需要在 ListID 上进行过滤,因此这是您唯一需要的参数。您只使用 ListName 来查找 ListID。

假设列表参数值的数据集如下所示:

SELECT ListID, ListName FROM Lists

将此数据集链接到您的 ListID 参数的可用值。

参数对象有一个用于运行查询的Value 属性和一个用于向用户显示列表名称的Label 属性。将 ListID 映射到 Value 并将 ListName 映射到 Label。

现在应用程序可以简单地为报告提供一个列表 ID。但是,当用户运行报告时,他们将看到列表名称。当他们选择一个时,相应的 ListID 将作为报告参数 Value 提供。

【讨论】:

我尝试从类似的结果集中设置 id 的可用值,并提供 ListName 作为标签值。但它不会过滤使用 URL '?id=123'。我们只想传递 url 中的 id 字段。问题是,通过允许可用值,我必须使用未使用 id 参数过滤的数据集。当我使用 SELECT ListID、ListName FROM Lists where ListID = @id 等数据集时,URL 过滤器工作正常。但在这里我无法提供下拉菜单,因为它不允许使用参数的可用值/默认值。 是的,您必须使用包含您希望能够从可用值中选择的所有列表 ID 的查询,因此请使用与您用于运行报告的查询不同的查询。您将只能选择出现在查询的可用值列表中的 id,因此查询必须返回所有有效的 id 才能选择它们。如果您使用带有where ListID = @id 的选择查询,那么您将无法选择任何ID,因为您尚未输入@id 参数,因此列表中没有任何ID 可供选择。

以上是关于报表生成器中的双向参数问题的主要内容,如果未能解决你的问题,请参考以下文章

报表生成器 3 中的多项选择

在 s-s-rS 报表生成器中选择带参数的前 X 行

oracle EBS中的绑定参数

SQL Server 报表生成器:根据子报表中的值隐藏 Tablix 行

在报表生成器中更改图表中的图例

即时生成水晶报表