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

Reporting services SSRS 2008r2使用带表达式的字段上的聚合,reporting-services,sql-server-2008-r2,ssrs-2008-r2,Reporting Services,Sql Server 2008 R2,Ssrs 2008 R2,SSRS 2008r2 我试图对包含表达式的分组中的字段执行聚合(求和) 我要求和的字段位于不同的分组中 我在报表属性中创建了以下函数 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 F

SSRS 2008r2

我试图对包含表达式的分组中的字段执行聚合(求和)

我要求和的字段位于不同的分组中

我在报表属性中创建了以下函数

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是表达式所在的字段和字段!HrsWorked。值是相邻字段

但是,我想显示总计的字段添加了以下内容

=Code.GetTotal()
在这里,分组中的每一行都返回0(零)。如果我将Dim public tot_OT__Hrs初始化为十进制变量,即1.2,则分组中的每一行都返回1.2。“添加时间”功能未按预期工作

我哪里做错了


提前感谢。

在我看来,您转换的顺序和数据类型都不正确。在您使用的代码示例中,您将总和转换为不正确的数据类型的双精度。在使用自定义函数时,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)))

-----------编辑------------------------

作为一项测试,查看函数的回报是什么,将函数更改为

Dim public total as decimal
Public Function AddTotalr(ByVal r AS decimal) AS decimal
        total = total + r
        return total
这将为您提供已处理项目的运行总数,并且列表中的最后一个值应与您的总数相匹配


我决定在过程中这样做。
它现在运行得很好。

你能发布你在Add\u OT\u Hrs字段中使用的表达式吗?我已经用@SFrejofsky这个表达式更新了这个问题。领域!Rate1Hrs.Value是表达式所在的字段和字段!Value是一个相邻的fieldTry,它隐式地将总和和值转换为十进制。这里可能有一个错误,因为SSRS不总是正确处理转换,特别是当您的文本框设置为“常规”而不是特定的数据类型时。你也可以删除iif语句,只处理一个sum,看看你返回的值是什么。我已经将文本框属性改为Number,它被设置为General。我已经删除了IIF语句,并将总和保留在原来的位置
=code.Add_OT_Hrs(格式(CDbl(Fields!Rate1Hrs.Value)),“00.00”)
但我仍然得到了零。如果我像这样初始化tot_OT_Hrs变量
public tot____Hrs为Decimal=1.2
,那么
GetTotal()
函数的返回值是1.2。似乎
Add\u OT\u Hrs
功能工作正常。有什么想法吗?我对表达式
=code.Add_OT_Hrs(IIF(Sum(Fields!HrsWorked.Value))>cdec(Parameters!StdWorkingHrs.Value),Sum(cdec(Fields!HrsWorked.Value))-cdec(Parameters!StdWorkingHrs.Value)+Sum(cdec(Fields!Rate1Hrs.Value)),Sum(cdec(Fields!Rate1Hrs.Value)))
返回的值仍然是0.00。您是否确认,如果删除代码,此IIF语句将返回每个字段的正确值。添加\u ot\u hrs()是。无论有无代码。add_ot_hrs()IIF语句返回正确的值。是不是因为字段位于不同的组中而导致了问题?不应该是因为您使用自定义函数绕过了分组。您是否碰巧使用了多个自定义函数?不,这些是报表中唯一的自定义函数。