Можно ли иметь группу по параметру в отчете матрицы SSRS и изменять порядок столбцов в зависимости от выбранной группы? - PullRequest
0 голосов
/ 09 мая 2020

Я на самом деле не работал с отчетами SSRS Matrix, и я не уверен, возможно ли то, что я пытаюсь сделать.

Пользователь может ввести год начала и окончания. Они хотят иметь возможность группироваться по CBA, CRA или Client. При выборе CBA и CRA после каждого имени будут выводиться промежуточные итоги, но клиент - нет. Столбцы для включения останутся неизменными для каждого варианта. Однако они хотят, чтобы все, что сгруппировано, было перемещено в начало отчета. Если вы выберете CBA, сначала должны появиться столбцы, относящиеся к CBA. Если вы выберете клиент, сначала должны появиться столбцы, относящиеся к клиенту.

Возможно ли что-либо из этого с матричным отчетом? Если да, с чего мне начать? Следует ли что-то из этого делать в хранимой процедуре или все это следует делать в Visual Studio? Я использую Visual Studio 2017. Ниже приведен пример того, как должен выглядеть результат.

Любая помощь приветствуется.

образец отчета

1 Ответ

0 голосов
/ 11 мая 2020

Конечно, это возможно. Есть несколько способов сделать это, и вам нужно будет выбрать, сколько из этого будет сделано в вашем запросе набора данных / сохраненном pro c и сколько будет сделано с помощью выражений SSRS.

Есть несколько вещей, которые нужно подумайте о том, какой маршрут вы выберете.

  1. Ваш запрос набора данных или сохраненный pro c всегда должен возвращать набор данных с одинаковыми именами столбцов с одинаковыми типами данных и в том же порядке
  2. Избегайте скрытия столбцов в дизайнере отчетов, так как это плохо работает
  3. Если набор данных возвращает много строк, вы можете захотеть выполнить часть работы в запросе

Метод SSRS:

Если вы хотите сделать это полностью в дизайнере отчетов, все затронутые столбцы и группы должны быть заданы как выражения. Например, в упрощенной версии вашего отчета выражение столбца секунда будет выглядеть примерно так.

=SWITCH(
        Parameters!myParam.Value = "CBA", Fields!CBAName.Value,
        Parameters!myParam.Value = "CRA", Fields!CRAName.Value,
        Parameters!myParam.Value = "Client", Fields!ClientName.Value
        )

Заголовок столбцов также должен быть аналогичным выражением.

=SWITCH(
        Parameters!myParam.Value = "CBA", "CBA Name",
        Parameters!myParam.Value = "CRA", "CRA Name",
        Parameters!myParam.Value = "Client", "Client Name"
        )

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

Вам придется повторить это для всех затронутых столбцов.

Далее

Вам также потребуется изменить RowGroups аналогичным образом. Таким образом, вы должны добавить группу строк, а затем выражения «Группировать по» и «Сортировать по» к одному и тому же.

=SWITCH(
        Parameters!myParam.Value = "CBA", Fields!CBAName.Value,
        Parameters!myParam.Value = "CRA", Fields!CRAName.Value,
        Parameters!myParam.Value = "Client", Fields!ClientName.Value
        )

Это довольно долгий процесс, но на самом деле это не так уж плохо 1037 *


Метод SQL

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

Вот очень простой пример.

SELECT
    CASE @myParam 
        WHEN 'CBA' THEN CBAName
        WHEN 'CRA' THEN CRAName 
        WHEN 'Client' THEN ClientName
    END AS ColumnAValue
    CASE @myParam 
        WHEN 'CBA' THEN 'CBA Name'
        WHEN 'CRA' THEN 'CRA Name '
        WHEN 'Client' THEN 'Client Name'
    END AS ColumnACaption
    , * 
FROM myTable

Здесь мы меняем местами содержимое ColumnAValue и ColumnACaption. В дизайнере отчетов мы бы отобразили ColumnAValue и установили выражение заголовка столбца на

=FIRST(Fields!ColumnAHeader.Value)

Группы строк будут просто сортировать по ColumnAValue

Этот метод означает намного меньше работы в отчете. дизайнер.


Существуют и другие варианты, но эти два метода я обычно использую go, поскольку они самые простые. Метод SQL легче понять другим разработчикам, потому что в свойствах сортировки и группировки групп строк не так много «скрытых».

В конце концов, решать вам, что вы чувствуете себя комфортно, но, надеюсь, этого у вас будет достаточно для начала.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...