使用 s-s-rS 表达式查看用户从多值参数中选择了哪些选项?
Posted
技术标签:
【中文标题】使用 s-s-rS 表达式查看用户从多值参数中选择了哪些选项?【英文标题】:Using s-s-rS Expressions to see which options a user has selected from a multivalued parameter? 【发布时间】:2013-06-07 18:35:23 【问题描述】:我正在尝试使用字段表达式针对 s-s-rS 报告中的“总计”列设置过滤器。
我有一个多值参数设置,其中值 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)
要添加的字段中的所有值都是简单的整数。我将不胜感激任何人都可以提供的帮助。谢谢!
【问题讨论】:
【参考方案1】:假设一个参数叫做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 添加到总数中。
这是一个带有表达式的简单报告:
选择所有值:
选择了两个值:
【讨论】:
这种方法对于简单的情况来说已经足够了,但它的问题是如果有十个字段分别称为value1
到value10
,那么每次选择value10
时,value1
也将是包括在总数中(如果在多个报告中使用这些字段名称,那么键入和维护这些字段名称也很无聊)。
@ChrisLätta,您可以通过稍微更新IIf
表达式来处理上述情况:IIf(InStr("," & Join(Parameters!Include.Value, ",") & ",", ",value10,")
。我为此考虑过自定义代码,但对于四列来说,这可能是一个太过分的步骤。同意更多列,它可能会转向自定义代码。使用自定义代码,在参数值和字段名称之间进行紧密耦合会很有帮助;几乎没有不便,但只是另一个考虑因素。一切都取决于当时的情况。
同意 - 对于一个包含几个字段和不重叠字段名称的报告中的简单案例,您的方法肯定快速简单,+1【参考方案2】:
您可以通过简单的方式实现这一点,而无需将一大堆 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)
【讨论】:
一个不错的选择。但是,我决定使用快速表达式定义的字段。以上是关于使用 s-s-rS 表达式查看用户从多值参数中选择了哪些选项?的主要内容,如果未能解决你的问题,请参考以下文章