计算SSRS中2列之间的时差

时间:2019-07-01 14:22:51

标签: reporting-services ssrs-2012 ssrs-tablix reportingservices-2005

我有两个字段,其计算如下:

  

= Format(DateAdd(“ s”,Sum(Fields!TalkTime.Value)/ Sum(Fields!EmployeesWorked.Value),“ 00:00:00”),“ HH:mm:ss”)

  

= PREVIOUS(Format(DateAdd(“ s”,Sum(Fields!TalkTime.Value)/ Sum(Fields!EmployeesWorked.Value),“ 00:00:00”),“ HH:mm:ss”),   “ Quarter1”)

我有一个单独的列来计算两列之间的差异:

  

= ReportItems!Textbox2625.Value-ReportItems!Textbox29.Value

但是,当我运行报表时,我用来计算两个字段之间的差异的列显示为“ #Error”。我假设存在某种格式问题,但不确定如何解决?

1 个答案:

答案 0 :(得分:0)

Format返回一个字符串,因此您不打算减去两个日期,而是要减去两个字符串,这将引发错误。

首先,对Value表达式使用日期计算:

=DateAdd("s", Sum(Fields!TalkTime.Value) / Sum(Fields!EmployeesWorked.Value), "00:00:00")

这将计算文本框范围内的EmployeesWorked时间的Sum的TalkTime的Sum

将格式放入Format属性中:HH:mm:ss

这会将文本框的值(时间)与其表示形式分开。现在您可以进行计算了:

=ReportItems!Textbox2625.Value - ReportItems!Textbox29.Value

同样,将格式放入Format属性:HH:mm:ss中,使其显示为时间。

如果这不起作用,请将计算完整(不包括Format函数,但是请参阅下面的注释,了解为什么您可能无法正确使用Previous函数):

=DateAdd("s", Sum(Fields!TalkTime.Value) / Sum(Fields!EmployeesWorked.Value), "00:00:00") 
- PREVIOUS(DateAdd("s", Sum(Fields!TalkTime.Value) / Sum(Fields!EmployeesWorked.Value), "00:00:00"), "Quarter1")

请注意,在Previous函数中进行聚合并指定范围(在本例中为“ Quarter1”)要求指定的范围(“ Quarter1”)是该ReportItem当前范围的包含范围。

例如,您可能有一个表格,其中包含三个嵌套的分组级别:按年,按月,按日。与组=Previous(Sum(Fields!Sales.Value, "Day"), "Year")关联的行中的表达式Day将返回上一年范围的同一天和同一月的销售额。

如果expression包含指定除默认范围以外的范围的聚合函数,则Previous函数的scope参数必须是该聚合函数调用中指定的范围的包含范围-换句话说,这些文本框必须位于“ Quarter1”范围的子范围。虽然我不知道您正在使用的作用域,但是从您的措辞来看,您似乎正在尝试从具有第一季度值而不是包含组范围的数据集中获取计算结果?如果是这样,则不需要Previous函数,您可以像这样在Sum函数中计算整个数据集“ Quarter1”的聚合:

=DateAdd("s", Sum(Fields!TalkTime.Value, "Quarter1") / Sum(Fields!EmployeesWorked.Value, "Quarter1"), "00:00:00"))