SSRS 2008r2在字段上使用带表达式的聚合字段

时间:2015-03-18 15:29:04

标签: reporting-services sql-server-2008-r2 ssrs-2008-r2

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函数没有按预期工作。

screenshot

我哪里错了?

提前致谢。

2 个答案:

答案 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)))

enter image description here

即使使用正确的数据类型,这也会产生错误,因为您试图将最有可能被解释为字符串的内容求和。

=code.addtotalr(cdec(sum(Fields!ID.Value)))

enter image description here

----------- edit ------------------------

作为测试,看看函数的返回是什么,将你的功能改为

Dim public total as decimal
Public Function AddTotalr(ByVal r AS decimal) AS decimal
        total = total + r
        return total

这应该为您提供已处理项目的总计,并且列表中的最后一个值应与您的总数相匹配。

enter image description here

答案 1 :(得分:0)

我决定在proc中这样做。 现在效果很好。