SSRS 2008条件数据驱动的总和

时间:2013-11-15 20:43:08

标签: reporting-services

矩阵的奇数行包含表示整数的字符串。偶数行包含字符串,以mm / dd / yyyy格式表示日期。订单无法保证,如果有人更改了类别名称,则可能是另一种方式。

必须将总行添加到此矩阵中,但以下表达式会引发#Error:

=Sum(Iif(IsDate(Fields!Data.Value), 0, CInt(Fields!Data.Value)))
=Sum(Iif(InStr(Fields!Data.Value, "/"), 0, CInt(Fields!Data.Value)))

将0和字段值转换为其他一些数字数据类型也不起作用。

有趣的是,表达式部分适用于总计列,即它们计算数字的行总数,但是计算日期行的#Error。

保护行总计如下如下:

=Iif(Fields!Results.Value = "# of items", CStr(Sum(CInt(Fields!Data.Value))), "")

实施数据驱动的条件总计的正确方法是什么? 我可以在纯SQL中执行此操作并转储到心跳中的Tablix中,但这必须包含在SSRS中并与现有矩阵一起使用,否则不得更改。

2 个答案:

答案 0 :(得分:3)

您在日期行上获得的#ERROR是由于CInt转换失败所致。

这是因为IIF是一个函数,而不是一个语言构造,所以无论boolean condition参数的值如何,在传递给函数之前,都会对进行真值和误参数的计算。 。这意味着:

=Sum(Iif(IsDate(Fields!Data.Value), 0, CInt(Fields!Data.Value)))
无论IsDate函数的结果如何,

总是会尝试转换为整数。

尝试使用Val代替CIntCInt的问题是当要转换的字符串是不合适的表单时出错; Val没有那个问题 - 它只是抓住它可以的任何数字。所以你可以使用表达式:

=Sum(Iif(IsDate(Fields!Data.Value), 0, Val(Fields!Data.Value)))

然后简单地将其格式化为整数。

请注意,即使字段不是数字,Val函数仍在运行,但此表达式成功,因为Val函数不会引发Cint之类的错误。我们只是进行计算,并在字段为日期时丢弃结果。

答案 1 :(得分:0)

此表达式将两个答案的提示与其他保护相结合,起作用:

=Iif(
    IsNumeric(Fields!Data.Value),
    Sum(Val(Iif(InStr(Fields!Data.Value, "/"), "", Fields!Data.Value))),
    0
)