SQL Reporting services 05 - отображение пользовательской суммы кода в заголовке таблицы - PullRequest
3 голосов
/ 06 апреля 2010

У меня есть вид, извлекающий данные типа

Course Attendee if-student shadow-tutor course-max

CS1     steve      no           mark        5

CS1     anna       yes          dan         5

и после извлечения я выбираю курс, количество (участник), теневой наставник, курс-макс, где if-student = Параметры! If_student. Результат будет выглядеть так:

Course shadow-tutor Actual# max#

CS1       mark         1

          dan          1
        CS1 total:     2      5

в отчете я использовал Sum(Fields!Actual.Value) и Fields!Max.Value для общего столбца. И в заголовке я хотел использовать Sum(Fields!Actual.Value) и Sum(Fields!Max.Value) как общее значение. Однако это не работает. сумма (max) вернет мне сумму всех столбцов, в этом случае она возвращает 10 вместо 5.

Я попытался использовать пользовательский код следующим образом:

Public Dim total_cmax As Integer = 0

Public Function sum_cmax(cmax As Integer) As Integer
   total_cmax = total_cmax + cmax
   Return cmax
End Function

Public Function get_cmax(obj As Object) As Integer
   obj.Value =  total_cmax
End Function

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

Есть какое-нибудь решение для этого? Я перепробовал много методов, но никто не работает. Я просто хочу, чтобы сумма отображалась в начале, но не в конце.

1 Ответ

0 голосов
/ 06 апреля 2010

Хорошо, я опубликую некоторые методы, которые я попробовал. Некоторые из них из Интернета (1 неделя исследования), а некоторые из меня.

1, определите область действия

=SUM(Fields!Max_Number, "table1_Courses")

или

=RunningValue(Fields!Max_Number.Value,SUM,"table1_Courses" )

Это не работает, так как он все еще пытается суммировать скрытые значения, хотя они даже не отображаются.

2, Агрегирующие функции

=SUM(Fields!Max_Number.Value)/RowNumber("table1_Courses")

Отображается так же, как Fields! Max_Number.Value, однако, поскольку SSRS05 не поддерживает вложенную агрегацию, вы не можете снова суммировать ее в заголовке.

3, Использование ReportItems

 =Sum(ReportItems("course_max").Value)
 =ReportItems("total_max").Value

Ну, функция агрегирования в ReportItems может использоваться только в верхнем / нижнем колонтитуле. И вы не можете установить ссылку с тела. Кажется, MS заставляет их работать отдельно, так что вы просто не можете ссылаются друг на друга.

Другая проблема заключается в том, что когда отчет не находится на той же странице, он будет возвращать только результат для текущей страницы. Например. у вас есть всего 200, 150 на 1-й странице и 50 на второй, затем на 1-й странице Sum(ReportItems("course_max").Value) показывает 150, но не 200.

4, используя пользовательский код.

Public Dim total_cmax As Integer = 0

Public Function sum_cmax(cmax As Integer) As Integer
   total_cmax = total_cmax + cmax
   Return cmax
End Function

Public Function get_cmax(obj As Object) As Integer
   obj.Value =  total_cmax
End Function

Не могу представить, что мне нужно написать такой простой код для такой простой функции для MS! Ну, это работает, но не идеально.

Функция get_cmax не может использоваться до sum_cmax, в противном случае она будет запускать get_cmax в самом начале, который вернет 0, и все get_cmax на странице (даже после 'sum_cmax') вернутся 0. Опять же, MS не дает вам никакой возможности изменить порядок рендеринга. Таким образом, вы должны поставить get_cmax за столом, И, вне вашего стола.

Пока это единственное решение, которое я смог найти. Интересно, может ли кто-нибудь найти способ отобразить значение в заголовке? Помещение =ReportItems("total_max").Value перед таблицей вернет вам 0. Поэтому я действительно не могу найти способ исправить это.

Надеюсь, это поможет.

...