我在SSRS中创建了一个包含两个报告参数的报告。我希望第二个根据第一个选择更新它的值。第一个是销售代理商列表,第二个是分销商列表。每个代理商都可以有很多经销商。
因此,如果报告用户选择了代理,我只希望他们的经销商在列表中显示第二个参数。显然,参数值将来自查询,但我不知道如何在选择代理后重新绑定列表。
答案 0 :(得分:13)
如果您正确订购参数和数据集,这将自动生效
WHERE
子句进行编码,以使参数变量的相关性正确如果第二个及后续数据集中的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)
您很可能需要为多个数据集创建共享数据源
如果您预览报告,它会在查看报告之前询问为param_name输入的值...
现在转到数据选项卡,添加新数据集....将其命名为dsPopParam
重要说明:如果报告未呈现或抛出异常,只需再次切换到数据选项卡,选择报告数据集并执行查询,系统将提示您输入值param_name ...输入并执行它...然后切换到预览选项卡和
答案 3 :(得分:2)
我自己没有尝试过,但是我看到了一个示例,他们将可用值配置为来自查询,然后使用表达式指定查询。表达式包括第一个参数的值。