Есть ли способ сделать так, чтобы на диаграмме SSRS 2008 отображались лучшие результаты X и группировались / суммировались остальные, как другие? - PullRequest
0 голосов
/ 11 февраля 2009

Мне бы хотелось, чтобы диаграмма в SQL Server Reporting Services 2008 показывала верхние значения X и суммировала / группировала остальные как другие. Возможно ли это без группировки в T-SQL?

Пример:

Запрос возвращает общий объем продаж из 50 штатов США. Я хочу показать пять штатов с наибольшим объемом продаж и сгруппировать остальные как «Все другие штаты» с суммой их продаж.

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

Я хотел бы кэшировать выполнение отчета для всех состояний и получить отчет из снимка.

1 Ответ

0 голосов
/ 11 февраля 2009

Самый простой способ сделать это - в самом SQL. Учитывая, что вы хотите запустить отчет из кэшированных данных, это не вариант.

Следующий очевидный способ сделать это - сделать это в пользовательском коде. Вы можете сделать что-то вроде следующего:

Щелкните правой кнопкой мыши пространство «Макет», выберите «Свойства» и нажмите вкладку «Код». Введите следующий код:

Public Dim RowCount As Integer = 0
Public Dim Top5Sum As Double = 0

Public Function HideThisRow(Value As Double) As Boolean
  RowCount = RowCount + 1
  if RowCount > 5 Then
    Return True
  Else
    Top5Sum = Top5Sum + Value
    Return False
  End If
End Function

На полосе подробностей сделайте две строки подробностей - первая - это ваша обычная строка, в которой вы суммируете поле со свойством Visibility-Hidden этой строки подробностей, имеющей следующее выражение:

=Code.HideThisRow(Fields!YourFieldToSum.Value)

Это выполнит приведенный выше код, поскольку он готовится отобразить каждую строку подробностей и скрыть все строки, кроме верхних 5. Он также имеет побочный эффект суммирования верхних 5 значений.

Во второй строке в вашей полосе подробностей мы отобразим раздел «Все другие состояния», поэтому дайте ему описание «Все другие состояния» в столбце, в котором указано название штата, и в столбце, в котором отображается ваше поле. иметь выражение:

=Sum(Fields!YourFieldToSum.Value) - Code.Top5Sum

Мы также должны скрыть эту строку для всех строк, кроме последней отображаемой строки (строка 5), поэтому мы делаем ее свойство Visibility-Hidden следующим выражением:

=IIF(RowNumber(Nothing) = 5, False, True)

Это эффективно скрывает эту строку для всех строк, кроме последней отображаемой строки (строка 5).

Можно подумать, что вы можете просто сделать это в нижнем колонтитуле отчета, а не делать все это скрытие строк, но есть ловушка - вы не можете предсказать порядок, в котором будет построен отчет, и, следовательно, порядок в который ваш код будет выполнять. В самом деле.

Если вы только что сделали отчет с вычислением в нижнем колонтитуле, а не в скрытой строке подробностей, то значение переменной Top5Sum будет рассчитано соответствующим образом. Однако функция Visibility-Hidden не будет работать (по крайней мере, в моей версии SSRS - в моем тесте было 17 пустых страниц перед созданием точного нижнего колонтитула). Однако предположим, что вы хотите вычислить процентное содержание каждого состояния, и поэтому вы добавляете следующее выражение в группу сведений:

=Fields!YourFieldToSum.Value / SUM(Fields!YourFieldToSum.Value)

Это вполне разумная вещь, но это полностью меняет порядок, в котором вычисляется отчет - в этом случае полосе детализации необходимо знать сумму поля, и поэтому полоса нижнего колонтитула вычисляется до полосы подробности. это означает, что переменная Top5Sum равна нулю во время расчета полосы нижнего колонтитула, и ваш расчет не работает. Тем не менее, строки Detail теперь скрыты соответствующим образом.

Вот почему вам нужно выполнять вычисления в полосе «Детали» и скрывать все остальные результаты, а не делать это в полосе «Нижний колонтитул», как кажется логичным.

...