我正在尝试使用该字段的表达式针对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)
要添加的字段中的所有值都是简单整数。我很感激任何人都可以提供帮助。谢谢!
答案 0 :(得分: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添加到总数中。
这是一个带有表达式的简单报告:
选择所有值:
选择了两个值:
答案 1 :(得分: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
这将获取参数 object (非值)并迭代选定的值以使用Fields
集合中的字段执行计算。
现在您的表达方式,只需使用:
=Code.CalcTotal(Parameters!Include, Fields)