Mic*_*l A 7 reporting reportingservices-2005 reporting-services ssrs-2008
我只是想知道如何在报告中显示正确的执行时间?
直到最近,我一直在报告的页脚中使用以下内容作为标签表达:
="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)", ""))
)
Run Code Online (Sandbox Code Playgroud)
不幸的是(正如预期的那样)每当我浏览到报告的第二页或导出为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)", ""))
)
Run Code Online (Sandbox Code Playgroud)
当您有两页报告或将报告导出为PDF时,此问题就会发挥作用.如果要生成具有5秒执行时间然后等待30秒以导出为PDF的报告,则导出报告的页脚中的执行时间将显示为35秒.同样,如果您在报告的第一页上并等待30秒以导航到第二页.这是因为使用System.DateTime.Now在每个渲染(新页面或PDF导出)上计算执行时间.
为了避免这种情况,生成报告的时间需要存储在变量中(我最初打算存储整个字符串,但是执行时间似乎不可用于报表变量表达式,因为我假设它们'在最终确定之前重新初始化).要执行此操作,请首先转到"报告属性"并添加新变量.在本例中,我将变量命名为GroupExecutionTime
将以下表达式添加到变量中,以便使用当前系统时间(将是执行时间)对其进行初始化:
=System.DateTime.Now
Run Code Online (Sandbox Code Playgroud)
完成此操作后,我们需要更新页脚标签以使用变量值而不是当前系统时间(报表变量不会在每个新页面渲染或导出时作为页脚标签表达式重新计算).
="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)", ""))
)
Run Code Online (Sandbox Code Playgroud)
我实际上对此采取了不同的方法,因为直到现在我还没有注意到任何回复.也许现在最好,但我会说一个简单的解决方案,可以实现替代解决方案的技能不可用的地方:
如前所述,我有以下内容:
="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)", ""))
)
Run Code Online (Sandbox Code Playgroud)
当您有两页报告或将报告导出为PDF时,此问题就会发挥作用.如果要生成具有5秒执行时间然后等待30秒以导出为PDF的报告,则导出报告的页脚中的执行时间将显示为35秒.同样,如果您在报告的第一页上并等待30秒以导航到第二页.这是因为使用System.DateTime.Now在每个渲染(新页面或PDF导出)上计算执行时间.
为了避免这种情况,生成报告的时间需要存储在变量中(我最初打算存储整个字符串,但是执行时间似乎不可用于报表变量表达式,因为我假设它们'在最终确定之前重新初始化).要执行此操作,请首先转到"报告属性"并添加新变量.在本例中,我将变量命名为GroupExecutionTime
将以下表达式添加到变量中,以便使用当前系统时间(将是执行时间)对其进行初始化:
=System.DateTime.Now
Run Code Online (Sandbox Code Playgroud)
完成此操作后,我们需要更新页脚标签以使用变量值而不是当前系统时间(报表变量不会在每个新页面渲染或导出时作为页脚标签表达式重新计算).
="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)", ""))
)
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
11848 次 |
最近记录: |