Замена вывода в SSRS другим значением

У меня есть таблица с двумя столбцами: TutorInitials и TargetGrade. Если у пользователя нет оценки, нам необходимо заменить ее оценкой, присвоенной другому пользователю. например:

TutorInitials    TargetGrade
1                A
2                B
3       
4                C

TutorInitial 3 не имеет оценок, поэтому везде, где они появляются в отчете при отображении TargetGrade, нам нужно заменить пустое поле результатом TargetGrade для TutorInitial 2 ('B'), чтобы он выглядел следующим образом:

TutorInitials    TargetGrade
1                A
2                B
3                B
4                C

Приносим извинения, если я не очень хорошо это объяснил, я новичок в SSRS.

Я пробовал использовать выражения IIF и WHERE, но не могу заставить их работать.

Спасибо Роб

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


person Rob    schedule 07.02.2018    source источник
comment
Почему 2, Б? Как мы это решили? Почему не C вместо B? Всегда одна приорская оценка?   -  person Eray Balkanli    schedule 07.02.2018
comment
Попробуйте это - ›IIF (IsNothing (Fields! TargetGrade, Value), Previous (Fields! TargetGrade, Value), Fields! TargetGrade, Value)   -  person Eray Balkanli    schedule 07.02.2018
comment
Что делать, если в предыдущей строке тоже нет оценок?   -  person Mazhar    schedule 07.02.2018
comment
Извините, я должен был быть более ясным. Он не пытается специально присвоить оценку предыдущей строке. Я хочу заполнить его еще одной оценкой конкретного пользователя. Итак, я знаю, что у TutorInitials 3 нет оценок, и я знаю, что у TutorInitials 1,2 и 4 есть оценки. Я мог бы выбрать любой из них, но если бы я специально хотел вставить данные TutorInitials 2. Есть ли способ использовать тот же код, но просто заменить TutorInitials, поэтому, если я хочу поднять оценку TutorInitial 4, когда появится TutorInitial 1, могу ли я это сделать?   -  person Rob    schedule 07.02.2018
comment
На основании вашего редактирования теперь требуется дополнительная информация о ваших наборах данных. Чтобы выполнить то, что вы хотите сделать, вам понадобится какой-то способ связать предыдущего учителя с текущим учителем и связать его. Но, имея только предоставленную информацию, дальше идти невозможно.   -  person C Black    schedule 07.02.2018
comment
Я думаю, что это следует решать при получении набора данных (SQL), а не в SSRS ..   -  person Harry    schedule 08.02.2018


Ответы (2)


Вы можете использовать встроенный SSRS Предыдущая функция. Это сработает, если ваши данные отсортированы так, как вам нужно.

=Previous(Fields!TargetGrade.Value)

Однако что произойдет с репетитором 4 в следующем сценарии (использование предыдущего приведет к тому, что целевая оценка будет пустой):

TutorInitials    TargetGrade
1                A
2                B
3       
4                
5                C 

Вы можете обойти это одним из двух способов.

  1. Изучите возможность поиска.

  2. Я бы предпочел сохранить переменную и вызвать ее при необходимости.

В свой код отчета добавьте переменную (код заметки может не компилироваться, так как он не у меня в голове).

Dim lastGrade As String

public Function ProcessAndReturnGrade(ByVal targetGrade AS String) As String
Begin
    If (targetGrade<>DbNull.Value) Then
       lastGrade = targetGrade
    End If
    return lastGrade       
End Function 

Затем в вашем выражении TargetGrade

=Code.ProcessAndReturnGrade(Fields!TargetGrade.Value)
person Ross Bush    schedule 07.02.2018
comment
Спасибо за это. Однако я не уверен, что какое-либо решение сработает в нашей ситуации. Произошло то, что у нас есть предметы в школе, где учитель сменил на полгода. Новым учителям необходимо, чтобы учащиеся получили целевую оценку, полученную от предыдущего учителя. Таким образом, вместо того, чтобы просто получать оценку из ячейки выше, она должна поступать от конкретного репетитора (первого учителя по предметам). Я не уверен, правильно ли я читаю вторую часть, но если есть способ указать lastGrade на нашу исходную оценку репетитора, тогда это может сработать. - person Rob; 07.02.2018
comment
Вы должны обновить свой вопрос этим лакомым кусочком. Мой ответ не отвечает требованиям вашего комментария выше. - person Ross Bush; 07.02.2018

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

Спасибо всем за то, что изучили это.

person Rob    schedule 09.02.2018