If statement 使用SSRS表达式查看用户从多值参数中选择了哪些选项?

If statement 使用SSRS表达式查看用户从多值参数中选择了哪些选项?,if-statement,reporting-services,parameters,multivalue,If Statement,Reporting Services,Parameters,Multivalue,我正在尝试使用字段表达式针对SSRS报告中的“总计”列设置筛选器 我有一个多值参数设置,值为value1、value2、value3和value4作为选项 在筛选之前,totals列只是简单地将不同列中的整数值相加。我想在其中添加功能,您可以检查用户选择的值 与下面类似(伪代码,因为我无法理解语法): =IIF(参数!.Label=“value1”,字段!value1.Value,0) +IIF(参数!.Label=“value2”,字段!value2.Value,0) +IIF(参数!.Lab

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

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

在筛选之前,totals列只是简单地将不同列中的整数值相加。我想在其中添加功能,您可以检查用户选择的值

与下面类似(伪代码,因为我无法理解语法):

=IIF(参数!.Label=“value1”,字段!value1.Value,0)
+IIF(参数!.Label=“value2”,字段!value2.Value,0)
+IIF(参数!.Label=“value3”,字段!value3.Value,0)
+IIF(参数!.Label=“value4”,字段!value4.Value,0)


要添加的字段中的所有值都是简单整数。我很感激任何人能提供的帮助。谢谢

假设一个名为
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添加到总数中

下面是一个带有以下表达式的简单报告:

选择的所有值:

选择两个值:


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

使用自定义代码,我们可以有一个简单而健壮的方法来执行此计算。右键单击报表的非设计图面,单击
报表属性…
,然后单击
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
这将获取参数对象(不是值),并使用
字段
集合中的字段迭代选定的值以执行计算

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

=Code.CalcTotal(Parameters!Include, Fields)

这种方法对于简单的情况来说已经足够好了,但是它有一个问题,即如果有十个字段被称为
value1
value10
,那么每次选择
value10
,那么
value1
也将被包括在总数中(如果在多个报告中使用,那么键入和维护这些字段名称会很无聊)@ChrisLätta,您可以通过稍微更新
IIf
表达式来处理上述情况:
IIf(InStr(“,”&Join(Parameters!Include.Value,”,“,”,“,value10,”)
。我为此考虑了自定义代码,但对于四列来说,这可能是一个太远的步骤。同意对于更多列,它可能会转向自定义代码。对于自定义代码,参数值和字段名之间的紧密耦合很有帮助;这很不麻烦,但只是另一个考虑因素。这取决于当前的情况he time.同意-对于一个报告中包含几个字段和非重叠字段名的简单案例,您的方法肯定是快速简单的,+1非常好的选择。但是,我决定使用快速表达式定义的字段。