SSRS 2008r2
我试图对包含表达式的GROUPing中的字段执行聚合(Sum)。
我想要显示SUM的字段位于不同的GROUPing中。
我在报告属性
中创建了以下功能Dim public tot_OT_Hrs As Decimal
Public Function Add_OT_Hrs(ByVal OT_Hrs As Decimal) AS Decimal
tot_OT_Hrs = tot_OT_Hrs + OT_Hrs
return OT_Hrs
End Function
Public Function GetTotal()
return tot_OT_Hrs
End Function
我已经添加了对" Add_OT_Hrs"在表达式所在的字段中运行,这样可以正常工作。
=Code.Add_OT_Hrs(
IIF(Sum(Fields!HrsWorked.Value) > Parameters!StdWorkingHrs.Value,
Sum(Fields!HrsWorked.Value) - Parameters!StdWorkingHrs.Value + Sum(Fields!Rate1Hrs.Value)
, Sum(Fields!Rate1Hrs.Value )
)
)
字段!Rate1Hrs.Value是表达式所在的字段,而Fields!HrsWorked.Value是一个相邻的字段
但是,我要总计出现的字段我添加了以下内容
=Code.GetTotal()
这里返回的所有内容在GROUPing的每一行都是0(零)。如果我将Dim public tot_OT_Hrs As Decimal变量初始化为1.2,则在GROUPing的每一行返回1.2。 Add_OT_Hrs函数没有按预期工作。
我哪里错了?
提前致谢。
答案 0 :(得分:0)
在我看来,您正在以错误的顺序转换,也转换为错误的数据类型。在您使用的代码示例中,您将sum转换为不是正确数据类型的double。使用自定义函数时,double和decimal之间存在显着差异。
我使用非常小的数据集对此进行了测试,如下所示
select '1.2'
union all
select '1.8'
然后应用以下自定义代码
Dim public total as decimal
Public Function AddTotalr(ByVal r AS decimal) AS decimal
total = total + r
return r
End Function
Public Function GetTotalr()
return total
End Function
显式转换的顺序至关重要。您必须在总计总和之前转换该值,以便使用一致的数据类型。
=code.addtotalr(sum(cdec(Fields!ID.Value)))
即使使用正确的数据类型,这也会产生错误,因为您试图将最有可能被解释为字符串的内容求和。
=code.addtotalr(cdec(sum(Fields!ID.Value)))
----------- edit ------------------------
作为测试,看看函数的返回是什么,将你的功能改为
Dim public total as decimal
Public Function AddTotalr(ByVal r AS decimal) AS decimal
total = total + r
return total
这应该为您提供已处理项目的总计,并且列表中的最后一个值应与您的总数相匹配。
答案 1 :(得分:0)
我决定在proc中这样做。 现在效果很好。