3

我正在尝试使用该字段的表达式针对 SSRS 报告中的“总计”列设置过滤器。

我有一个多值参数设置,其中值 value1、value2、value3 和 value4 作为选项。

在过滤器之前,这个总计列只是简单地添加了来自不同列的整数值。我想添加功能,您可以在其中检查用户选择了哪些值。

类似于下面(伪代码,因为我无法弄清楚语法):

=IIF(Parameters!<Parameter>.Label="value1",Fields!value1.Value,0) +IIF(Parameters!<Parameter>.Label="value2",Fields!value2.Value,0) +IIF(Parameters!<Parameter>.Label="value3",Fields!value3.Value,0) +IIF(Parameters!<Parameter>.Label="value4",Fields!value4.Value,0)

添加的字段中的所有值都是简单的整数。任何人都可以提供任何帮助,我将不胜感激。谢谢!

4

2 回答 2

3

您可以通过简单的方式实现这一点,而无需将一大堆IIF函数串在一起并指定要使用的每个字段。如果要更改字段名称或添加字段怎么办?

使用自定义代码,我们可以有一种简单而可靠的方式来执行此计算。右键单击报表的非设计表面,单击Report Properties...然后单击Code选项卡。插入以下代码:

Function CalcTotal (ByVal param As Parameter, flds AS Fields) AS Integer
  Dim Result As Integer
  Result = 0
  If param.IsMultiValue then
    For i as integer = 0 to param.Count-1 
        Result = Result + flds(param.Value(i)).Value 
    Next 
  End If 

  Return Result
End Function

这需要参数对象(不是值)并遍历选择的值以使用Fields集合中的字段执行计算。

现在对于您的表达,只需使用:

=Code.CalcTotal(Parameters!Include, Fields)
于 2013-06-12T02:42:21.247 回答
3

假设一个名为 的参数Include,您可以使用如下表达式:

=IIf(InStr(Join(Parameters!Include.Value, ","), "value1") > 0, Fields!value1.Value, 0)
    + IIf(InStr(Join(Parameters!Include.Value, ","), "value2") > 0, Fields!value2.Value, 0)
    + IIf(InStr(Join(Parameters!Include.Value, ","), "value3") > 0, Fields!value3.Value, 0)
    + IIf(InStr(Join(Parameters!Include.Value, ","), "value4") > 0, Fields!value4.Value, 0)

这使用该Join函数创建所选参数的逗号分隔字符串,检查是否选择了特定的参数值,然后将相应的值或 0 添加到总数中。

这是一个带有表达式的简单报告:

在此处输入图像描述

选择的所有值:

在此处输入图像描述

选择了两个值:

在此处输入图像描述

于 2013-06-11T21:27:20.597 回答