Условное группирование табликса в отчетах SSRS

В моем таблисе есть следующие столбцы

Country, City, College, totalstudent,passedstudent,failedstudent

У меня есть параметр «GroupBy» со значениями «страна / город / колледж». Итак, когда я выбираю один из параметров, мой таблик должен быть сгруппирован по этому параметру и только так, чтобы столбец параметра + итоговые, пройденные, неудачные столбцы

Например, Если пользователь выберет GroupBy = "City", отобразится табликс

City, totalstudent, passedstudent, failedstudent

Итоговые значения, пройденные и не выполненные - это общая сумма, сгруппированная в этом городе.

Аналогичную логику следует применить и к стране и колледжу.

Итак, пока я могу показать все столбцы с группировкой по стране, затем по городу, а затем по колледжу. (что является одной из простых группировок ssrs)

(Мне нужно применить только одну группировку на основе параметра и показать только эти конкретные столбцы)

Примечание. У меня есть необработанный набор данных, в котором все эти значения получены с помощью встроенного sql из моей базы данных sql. (Набор данных 1: страна, город, колледж, общее количество студентов, прошедших обучение, не прошедших обучение)


person OmGanesh    schedule 08.03.2017    source источник
comment
Некоторое время назад делал нечто подобное. Для моего sql я отправляю ячейки для ненужных групп как пустые. Затем в отчете я скрыл строку, если группа по ячейке была пустой. Молитесь, чтобы вам не нужно было разворачивать и сворачивать, потому что тогда вам нужно это закодировать.   -  person Snowlockk    schedule 08.03.2017


Ответы (3)


Вы можете сгруппировать свою таблицу по выражению. В свойствах вашей группы вы должны написать что-то вроде этого:

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

Остальные столбцы должны иметь возможность просто использовать обычные Sum функции и работать с любой группировкой.

person StevenWhite    schedule 08.03.2017
comment
Спасибо, Стивен, я попробовал ваш подход к группировке на уровне набора данных SSRS, что кажется мне очень медленным, поскольку я получаю необработанные записи всех столбцов из sql, а загрузка сгруппированных данных занимает около 10 секунд. Поскольку мне также нужна сортировка для каждого столбца, это очень медленно. Итак, я сместил логику группировки в сторону sql - person OmGanesh; 09.03.2017

Я пробовал разные подходы (я использовал последний / третий подход)

  1. Использовал несколько табликсов для различных условий группировки и использовал параметр для скрытия / отображения правильных табликсов в отчете. Ловушка: это ужасно медленно, так как у меня есть 4 разных условия группировки и я вставляю 4 разных табликса.

  2. Использование концепции динамической группировки, как показано на (http://www.advancedssrs.com/2014/01/how-can-i-use-dynamic-grouping.html), что хорошо. Но это не подходило для моей ситуации, так как это было сравнительно медленно, пока я пытаюсь отсортировать столбцы в SSRS. (Мне нужна функция сортировки по всем столбцам)

  3. Создан новый параметр (groupby), который используется для имитации сценария вкладок. Итак, когда пользователь выбирает одно из значений (Страна / Город / Колледж), я группирую свой результат SQL на основе этого значения параметра groupby с использованием операторов условной группировки и возвращаю результат обратно в SSRS.


    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 в моем первом столбце, а остальные агрегированные значения в оставшихся столбцах одного табликса. Результат выглядит так:  Пример вывода отчета SSRS

person OmGanesh    schedule 09.03.2017

При создании набора данных не записывайте запрос напрямую в поле - вместо этого используйте выражение.

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

Ваши "passedstudent" и "failedstudent" будут некоторой агрегацией, либо COUNT, либо SUM, в зависимости от вашего случая.

person William Xu    schedule 08.03.2017
comment
Использовал аналогичную концепцию, но не на уровне отчета, а на уровне sql, передав переменную groupby в мой запрос - person OmGanesh; 09.03.2017