Мне просто интересно, как я могу показать правильное время выполнения в отчете?
До недавнего времени в нижнем колонтитуле моих отчетов использовалось следующее в качестве выражения метки:
="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, время выполнения будет отображаться как 31s).
Каков наилучший метод для отображения времени выполнения отчета без использования вышеуказанной информации?
Изменить (ответьте, поскольку я не могу опубликовать сообщение с репутацией <100): </strong>
Я действительно использовал другой подход к этому, поскольку я не заметил здесь никаких ответов до сих пор. Возможно, не так хорошо, как приведенные выше ответы, но я бы сказал, что простое решение, которое может быть реализовано, когда умение делать альтернативные решения недоступно:
Как упоминалось ранее, у меня было следующее:
="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)", ""))
)