【发布时间】:2011-12-13 01:46:58
【问题描述】:
我只是想知道如何在报告中显示正确的执行时间?
直到最近,我一直在报告的页脚中使用以下内容作为标签表达式:
="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)。
不使用上述信息显示报表执行时间的最佳方法是什么?
编辑(回答,因为我无法发布具有
我实际上对此采取了不同的方法,因为直到现在我才注意到这里有任何回复。也许不如上述答案好,但我会说一个简单的解决方案,可以在没有执行替代解决方案的技能的情况下实施:
如前所述,我有以下几点:
="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 秒导航到第二页。这是因为执行时间是使用 System.DateTime.Now 在每次渲染(新页面或 PDF 导出)上计算的。
为避免这种情况,需要将生成报告的时间存储在变量中(我最初打算将整个字符串存储在上面,但是执行时间似乎不适用于报告变量表达式,因为我是假设它们在完成之前被初始化)。为此,首先转到报告属性并添加一个新变量。对于这个例子,我将变量命名为 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)", ""))
)
【问题讨论】:
标签: reporting ssrs-2008 reportingservices-2005 reporting-services