SSRS Количество или сумма выражения

Я не могу понять, почему эти выражения Total не работают...

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

Все, что я получаю, это #Error,

Вот выражения, которые я пробовал:

=SUM(IIf(Fields!Jetter_Trng.Value >Today OR 
Fields!Jetter_Trng.Value = "Not Reqd",1,0)))/(Count(Fields!Jetter_Trng.Value)

а также

=Count(IIf(Fields!Jetter_Trng.Value >Today OR 
Fields!Jetter_Trng.Value = "Not Reqd",1,Nothing)))/(Count(Fields!Jetter_Trng.Value)

Строка "Не требуется" произошла из выражения, которое изменяет дату (01.01.1950) на "Не требуется". Может быть, это все портит

=iif(Fields!Jetter_Trng.Value = "01/01/1950", "Not Reqd", Fields!Jetter_Trng.Value)

Текущее рабочее выражение (не ищет "Не требуется"):

=COUNT(IIF(Fields!Jetter_Trng.Value>Today,1,Nothing)))/(Count(Fields!Name.Value))

Я немного растерялся...

1 ответ

Решение

Несколько замечаний о вашем выражении в нынешнем виде

  • Jetter_Trng представляется строкой, представляющей либо дату, либо "Не требуется". Вы не можете сравнивать строки с датами, не приведя их сначала к типу даты с помощью CDATE()

  • Количество брекетов (( а также )) не совпадают

Корень вашей проблемы заключается в том, что вы используете Jetter_Trng для возврата либо даты, либо значения "не требуется".

Когда SSRS пытается оценить выражение, оно делает все это одновременно. Он не следует пути, чтобы найти ответ, и игнорирует другие пути. Поэтому, когда вы пытаетесь сравнить

Fields!Jetter_Trng.Value >Today

Это сравнивает строку с датой и выдает ошибку, поскольку это ничего не значит

"Not Reqd" > Today

Вы не сможете делать все, что хотите, используя только одно поле типа string.

Ваши варианты

  • Используйте два поля - дата и флаг, указывающий не обязательно, или
  • Используйте одно поле - но имейте "недопустимую дату" (возможно, 01.01.2100), которую вы затем можете рассматривать как значение "Не требуется", и проверьте, меньше ли текущая дата (чем она всегда будет)

Используя здесь второй вариант, вы можете использовать следующее выражение для создания желаемого расчета.

=sum(iif(CDate(Fields!Jetter_Trng.Value) > Today, 1, 0)) / 
 Count(Fields!Jetter_Trng.Value)

Который будет оценивать этот набор данных следующим образом

Другие вопросы по тегам