SSRS: Отображение правильного времени выполнения в двухстраничном отчете?

Мне просто интересно, как я могу показать правильное время выполнения в отчете?

До недавнего времени я использовал следующее в нижнем колонтитуле своих отчетов в качестве выражения ярлыка:

="Execution Time: " +
IIf(System.DateTime.Now.Subtract(Globals!ExecutionTime).TotalSeconds < 1, "0 seconds", 
(
IIf(System.DateTime.Now.Subtract(Globals!ExecutionTime).Hours > 0, System.DateTime.Now.Subtract(Globals!ExecutionTime).Hours & " hour(s), ", "") +
IIf(System.DateTime.Now.Subtract(Globals!ExecutionTime).Minutes > 0, System.DateTime.Now.Subtract(Globals!ExecutionTime).Minutes & " minute(s), ", "") +
IIf(System.DateTime.Now.Subtract(Globals!ExecutionTime).Seconds > 0, System.DateTime.Now.Subtract(Globals!ExecutionTime).Seconds & " second(s)", ""))
)

К сожалению (как и ожидалось) всякий раз, когда я просматриваю вторую страницу отчета или экспортирую в PDF, это значение пересчитывается (поэтому, если я визуализирую отчет за 1 секунду, подождите 30 секунд, а затем экспортирую в PDF, время выполнения будет отображаться как 31 секунда) .

Каков наилучший метод отображения времени выполнения отчета без использования вышеуказанной информации?

Редактировать (ответ, поскольку я не могу опубликовать отчет с репутацией <100):

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

Как упоминалось ранее, у меня было следующее:

="Execution Time: " +
IIf(System.DateTime.Now.Subtract(Globals!ExecutionTime).TotalSeconds < 1, "0 seconds", 
(
IIf(System.DateTime.Now.Subtract(Globals!ExecutionTime).Hours > 0, System.DateTime.Now.Subtract(Globals!ExecutionTime).Hours & " hour(s), ", "") +
IIf(System.DateTime.Now.Subtract(Globals!ExecutionTime).Minutes > 0, System.DateTime.Now.Subtract(Globals!ExecutionTime).Minutes & " minute(s), ", "") +
IIf(System.DateTime.Now.Subtract(Globals!ExecutionTime).Seconds > 0, System.DateTime.Now.Subtract(Globals!ExecutionTime).Seconds & " second(s)", ""))
)

Проблема с этим возникает в играть, если у вас есть двухстраничный отчет, или экспортировать отчет в PDF. Если вы должны создать отчет, время выполнения которого составляет 5 секунд, а затем подождать 30 секунд для экспорта в PDF, то время выполнения в нижнем колонтитуле экспортированного отчета отображается как 35 секунд. Точно так же, если вы находитесь на первой странице отчета и ждете 30 секунд, чтобы перейти на вторую страницу. Это связано с тем, что время выполнения рассчитывается для каждого рендеринга (новой страницы или экспорта PDF) с использованием System.DateTime.Now.

Чтобы избежать этого, время создания отчета необходимо сохранить в переменной (изначально я намеревался сохранить всю строку выше, однако время выполнения, похоже, недоступно для выражения переменной отчета, поскольку я предполагая, что они инициализированы до того, как это будет завершено). Для этого сначала перейдите в Свойства отчета и добавьте новую переменную. В этом примере я назвал переменную GroupExecutionTime

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

=System.DateTime.Now

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

="Execution Time: " +
IIf(Variables!GroupExecutionTime.Value.Subtract(Globals!ExecutionTime).TotalSeconds < 1, "0 seconds", 
(
IIf(Variables!GroupExecutionTime.Value.Subtract(Globals!ExecutionTime).Hours > 0, Variables!GroupExecutionTime.Value.Subtract(Globals!ExecutionTime).Hours & " hour(s), ", "") +
IIf(Variables!GroupExecutionTime.Value.Subtract(Globals!ExecutionTime).Minutes > 0, Variables!GroupExecutionTime.Value.Subtract(Globals!ExecutionTime).Minutes & " minute(s), ", "") +
IIf(Variables!GroupExecutionTime.Value.Subtract(Globals!ExecutionTime).Seconds > 0, Variables!GroupExecutionTime.Value.Subtract(Globals!ExecutionTime).Seconds & " second(s)", ""))
)
7
задан Michael A 13 December 2011 в 04:49
поделиться