只允许在SSRS中进行一次向下钻取

时间:2014-03-04 16:26:35

标签: reporting-services

花了我几个小时的时间搜索和拼凑零碎的部分来找到解决方案,所以我想我会在这里张贴它以期帮助别人。

问题:我们需要显示报告,并进行适当的分组和下钻。但是,我们应该只允许一次钻取一组。

SSRS并不具备强大的脚本选项 - 例如,您无法在“点击”或其他任何类似关闭的情况下关闭其他组。那你怎么做的?

1 个答案:

答案 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(如果你愿意的话,这也可以是一个图像)。这是我们将使用的“向下钻取”按钮。

Grouping and Table.

创建一个字符串参数,我的是@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时再次输入该参数。这也意味着当您点击钻取(更改显示的图表等)时,您可以给自己更大的灵活性,这就是我正在为此项目所做的工作。

希望它可以帮助别人!当然,如果有一个更优雅或更简单的解决方案,我绝对喜欢听到它。