花了我几个小时的时间搜索和拼凑零碎的部分来找到解决方案,所以我想我会在这里张贴它以期帮助别人。
问题:我们需要显示报告,并进行适当的分组和下钻。但是,我们应该只允许一次钻取一组。
SSRS并不具备强大的脚本选项 - 例如,您无法在“点击”或其他任何类似关闭的情况下关闭其他组。那你怎么做的?
答案 0 :(得分:1)
在我的示例中,我正在使用AdventureworksDW数据库。我想要一个包含每个组和区域的总销售额的数据集。我的存储过程看起来像这样:
SELECT dst.SalesTerritoryGroup,
dst.SalesTerritoryRegion,
SUM(fis.SalesAmount) AS SaleTotal,
DATEPART(YEAR,fis.OrderDate) AS OrderYear
FROM [dbo].FactInternetSales AS fis
INNER JOIN [dbo].DimSalesTerritory AS dst
ON fis.SalesTerritoryKey = dst.SalesTerritoryKey
WHERE fis.OrderDate < @QueryEndDate
GROUP BY
dst.SalesTerritoryGroup,
dst.SalesTerritoryRegion,
DATEPART(YEAR,fis.OrderDate)
UNION ALL /*The ResellerSales table. Same info.*/
从那里我添加了一个包含两个组的表:SalesTerritoryRegion及其父组SalesTerritoryGroup。我还在SalesTerritoryGroup的左边添加了一个列,带有一个X(如果你愿意的话,这也可以是一个图像)。这是我们将使用的“向下钻取”按钮。
创建一个字符串参数,我的是@ExpandedGroup。将Default设置为空字符串(以便所有组开始折叠)。右键单击SalesTerritoryRegion组或您的子组,然后转到可见性选项卡。单击“基于表达式显示或隐藏”并输入以下内容:
=iif(Parameters!ExpandedGroup.Value="" or
Fields!SalesTerritoryGroup.Value<>Parameters!ExpandedGroup.Value,True,False)
此声明表示:如果我们尚未打开下拉列表,或者下拉列表不是所选的下拉列表,请将hidden设置为true。否则,是假的。
接下来,单击SalesTerritoryGroup或您的超级组左侧的“X”列。右键单击以转到“文本框属性”。单击操作选项卡。从那里选择“转到报告”。指定报表时,请自行创建目标(例如,我的是Main)。然后,将参数添加到报告中。
最重要的是ExpandedGroup。该名称应为ExpandedGroup,但该值不仅仅是[ExpandedGroup]。相反,它是一个表达式:
=IIF(Fields!SalesTerritoryGroup.Value=Parameters!ExpandedGroup.Value,
"",
Fields!SalesTerritoryGroup.Value)
此表达式表示:如果组与Expanded组相同,则在加载报表时将ExpandedGroup设为空字符串。否则,发送TerritoryGroup值。从本质上讲,这将让我们切换钻取和退出钻取(如果您有传统的钻取,则与报告中的相同)。
注意:另外一定要传递其他参数!例如,我的查询需要一个日期来排除某些交易数据。如果您未在“转至报告”操作中传递此参数,则必须在DrillDown时再次输入该参数。这也意味着当您点击钻取(更改显示的图表等)时,您可以给自己更大的灵活性,这就是我正在为此项目所做的工作。
希望它可以帮助别人!当然,如果有一个更优雅或更简单的解决方案,我绝对喜欢听到它。