Каковы лучшие стратегии отладки SSRS? - PullRequest
3 голосов
/ 04 августа 2009

Я ищу способы отследить, где происходит ошибка SSRS.

У меня есть отчет размером около 90 столбцов с несколькими формулами. Проблема, с которой я столкнулся, заключается в том, что в одной из формул есть ошибка деления на ноль. Я реализовал ответ от Роберта Харви в этом вопросе , но я все еще получаю ошибку. Я знаю, что ответ работает, так как я проверил его в небольшом отчете.

Итак, вопрос таков: как вы можете определить, где происходит ошибка в SSRS, когда SSRS сообщает только о том, что произошла ошибка?

РЕДАКТИРОВАТЬ Отображаемая ошибка:

Произошла ошибка во время локальной обработки отчета
Произошла ошибка во время обработки отчета
Невозможно прочитать следующую строку данных для набора данных MainReport
Введена ошибка «Делить по нулю»

Ответы [ 2 ]

6 голосов
/ 04 августа 2009

EDIT
Вместо того чтобы использовать операторы IIF и другие, я бы порекомендовал сделать следующее ... Добавить пользовательскую функцию в свой отчет, перейти к свойствам отчета и вкладке кода. Создайте следующее. Чтобы конкретно определить поле, которое выдает ошибку, вы можете изменить это, чтобы оно возвращало строку и, возможно, "#OOOOOOPS", чтобы оно торчало в отчете.

Public Function SafeDivision(ByVal top As Decimal, ByVal bottom As Decimal) As Decimal
   If bottom = 0 Then
      Return 0
      Else : Return top / bottom
   End If
End Function

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

=Code.SafeDivivision(CDbl(1.24), CDbl(0))

ORIGINAL
Если вы запускаете отчет в Visual Studio, говорит ли он, в каком конкретном текстовом поле / метке / поле не удалось выполнить вычисление? Это должно помочь точно определить, откуда возникла проблема, но вы также можете убедиться, что никогда не выполняете деление с 0 в знаменателе, посмотрев на код ниже ...

//myBottom would be the value of the denominator 
//myTop would be the value of the numerator 

= IIF(myBottom <> 0, myTop / myBottom, "")
1 голос
/ 05 августа 2009

Follow Up
Проблема оказалась в SQL-запросе. Как часть SQL-запроса, у меня было предложение In, подобное следующему.

Select ID, Name, price/kg as unitpice from products where ID In (@ProductIds)

SSRS использует exec sp_executesql и string.replace для ввода идентификаторов в предложение IN.

Проблема, с которой я столкнулся, заключалась в том, что я запускал запрос в SQL Studio Manager. со всеми введенными переменными, и это будет работать, как ожидалось. но при SSRS это не сработало с ошибкой деления на ноль, и не было четкого указания, где произошла ошибка.

После того, как я сделал копию отчета и удалял элементы один за другим, пока в отчете не осталось буквально ничего, чтобы отрисовать, и это все еще приводило к ошибке, я переключил свое внимание на SQL-запрос.

Именно там и произошла ошибка. Я нашел его только после использования SQL Profiler, чтобы узнать, что на самом деле работает SSRS.

После этого это было относительно легко исправить, удалив поврежденную строку и вернув отдельные части раздела и пропустив ее через функцию, предложенную Р.С.Ольбергом.

...