Самый простой способ сделать это - в самом 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 теперь скрыты соответствующим образом.
Вот почему вам нужно выполнять вычисления в полосе «Детали» и скрывать все остальные результаты, а не делать это в полосе «Нижний колонтитул», как кажется логичным.