有条件地在SSRS报告中对tablix进行分组

时间:2017-03-08 15:13:31

标签: reporting-services ssrs-2012 ssrs-tablix ssrs-grouping

我的Tablix有以下列

Country, City, College, totalstudent,passedstudent,failedstudent

我有一个参数“GroupBy”,其值为“country / city / college”。因此,当我选择其中一个参数时,我的tablix应该按该参数分组,并且只有参数列+总数,通过,失败的列

例如。 如果用户选择GroupBy =“City”,则Tablix将显示

City, totalstudent, passedstudent, failedstudent

总计,通过和失败的值是在该城市中分组的总和。

类似的逻辑也应适用于国家和大学。

所以,我能够显示所有列按国家/地区应用分组,然后是城市,然后是大学。 (这是简单的ssrs分组之一)

(我的需要是仅应用基于参数的一个分组,仅显示特定的列)

注意:我有一个原始数据集,它使用来自我的sql数据库的内联sql检索所有这些值。 (数据集1:国家,城市,学院,学生,学生,学生不合格)

3 个答案:

答案 0 :(得分:2)

您可以通过表达式对表进行分组。在您的组属性中,您可以编写如下内容:

=Switch(Parameters!GroupBy.Value = "City", Fields!City.Value
    , Parameters!GroupBy.Value = "College", Fields!College.Value
    , ...)

其他列应该只能使用常规Sum函数并使用任何分组。

答案 1 :(得分:0)

我尝试了不同的方法(我经历了最后/第三种方法)

  1. 为不同的分组条件使用了多个tablix,并使用该参数隐藏/显示报告中的正确tablix 陷阱:由于我有4种不同的分组条件并放入4种不同的Tablix,因此速度非常慢。

  2. 使用(http://www.advancedssrs.com/2014/01/how-can-i-use-dynamic-grouping.html)所示的动态分组概念,这很好。但它不适合我的情况,因为当我尝试对SSRS中的列进行排序时,它也相对较慢。 (我需要在所有列中进行排序功能)

  3. 创建了一个新参数(groupby),用于模拟制表符的场景。因此,当用户选择其中一个值(国家/城市/学院)时,我使用条件分组语句根据此groupby参数值对我的SQL结果进行分组,并将结果返回给SSRS。

  4. 
        SELECT
        CASE WHEN @GroupBy = 'Country' THEN CountryName
        WHEN @GroupBy = 'City' THEN CityName
        WHEN @GroupBy = 'College' THEN CollegeName
        END AS GroupTitle,
        SUM(totals) AS totalstudent,
        SUM(passes) AS passedstudent,
        SUM(fails) AS failedstudent,
        FROM #temp
        GROUP BY CASE WHEN @GroupBy = 'Country' THEN CountryName
        WHEN @GroupBy = 'City' THEN CityName
        WHEN @GroupBy = 'College' THEN CollegeName
        END
        ORDER BY 1
        DROP TABLE #temp
    

    现在,我在第一列中使用GroupTitle,在单个Tablix中使用其余列中的其余聚合值。 输出如下: SSRS Report sample output

答案 2 :(得分:-1)

创建数据集时,不要直接在框中编写查询 - 而是使用表达式。

="SELECT " + Parameters!GroupBy.Value + ", passedstudent, failedstudent
  FROM Table GROUP BY " + Parameters!GroupBy.Value  

您的“passedstudent”和“failedstudent”将是一些汇总,COUNTSUM,取决于您的情况。