根据参数选择更新报告参数? (SSRS)

时间:2009-06-27 18:46:18

标签: sql-server-2005 reporting-services

我在SSRS中创建了一个包含两个报告参数的报告。我希望第二个根据第一个选择更新它的值。第一个是销售代理商列表,第二个是分销商列表。每个代理商都可以有很多经销商。

因此,如果报告用户选择了代理,我只希望他们的经销商在列表中显示第二个参数。显然,参数值将来自查询,但我不知道如何在选择代理后重新绑定列表。

4 个答案:

答案 0 :(得分:13)

如果您正确订购参数和数据集,这将自动生效

  • 首先,设置主(报告)数据集,然后设置每个参数下拉列表的数据集。对数据集中的WHERE子句进行编码,以使参数变量的相关性正确
  • 其次,在Report |中订购参数参数菜单,以便您希望用户填写的第一个变量/参数位于顶部,并使第二个数据集依赖于该参数。通过参数遵循此顺序;最终参数应该是实际报告数据集所依赖的参数。
  • 重复后续参数

如果第二个及后续数据集中的WHERE子句具有SSRS知道的变量,则这将在早期参数中填充。

例如,我有来自古老的pubs数据库的三个数据集(2000年的样本)。

pubslist用于填充@p参数,如下所示:

 select pub_id, pub_name from publishers

titleslist填充@t参数,如下所示:

 select title_id, title from titles where pub_id = @p

最后,reportdataset看起来像这样:

 select title, price, ytd_sales from titles where title_id = @t

Report | Report Parameters菜单中参数的顺序至关重要;因为必须按照上面显示的顺序执行数据集,并且@t参数位于依赖于首先设置的@p参数的数据集中,我们将@p移动到列表的顶部。

现在,SSRS评估使用标签填充第一个参数下拉列表所需的数据集。它依赖于不需要参数的数据集,因此可以立即生成。

然后,获得该参数值后,它可以填充第二个参数的下拉列表。这反过来会导致生成报告。

答案 1 :(得分:3)

首先创建一个数据集,其中包含用户将从中选择的项目列表。

Select ID,Agentname from Agents Order by Agentname

然后创建第二个数据集;

例如。 Select ID,ItemName from Orders where agentid=@agentid

在报告参数中,单击agentid参数,然后单击查询可用值。您选择dataset1和ID作为值,选择AgentName作为Label。

您的上一个数据集将是实际数据。在此您可以创建如下语句:

Select Quantity, Amount From Orderdetails where OrderID=@orderid

在报告服务中,您转到参数并设置订单以从数据集2获取值

所以参数顺序应该是agentid,orderid。报告服务将按订单自动提示参数。

答案 2 :(得分:3)

您很可能需要为多个数据集创建共享数据源

  1. 首先设计报告,查询和要显示的字段不带任何参数。这样,您就可以设置报告的主数据集。
  2. 通过添加参数来更新数据集的查询。始终在param_name之前使用@
  3. 在报表布局视图中,右键单击并从弹出菜单中选择参数。
  4. 参数列表将自动具有不带@符号的param_name。
  5. 从列表中选择参数并更新其属性...
  6. 如果您预览报告,它会在查看报告之前询问为param_name输入的值...

  7. 现在转到数据选项卡,添加新数据集....将其命名为dsPopParam

  8. 该查询将用于填充param_name参数....此处不需要参数。
  9. 重复步骤3到5,但在步骤5中,将“可用值”部分中的属性设置更新为来自查询,然后选择数据集dsPopParam。值和标签字段将是dsPopParam查询返回的字段。
  10. 再次选择视图选项卡,并注意这次包含参数列表的下拉列表框....
  11. 重要说明:如果报告未呈现或抛出异常,只需再次切换到数据选项卡,选择报告数据集并执行查询,系统将提示您输入值param_name ...输入并执行它...然后切换到预览选项卡和

答案 3 :(得分:2)

我自己没有尝试过,但是我看到了一个示例,他们将可用值配置为来自查询,然后使用表达式指定查询。表达式包括第一个参数的值。