【问题标题】:Using SSRS Expressions to see which options a user has selected from a multivalued parameter?使用 SSRS 表达式查看用户从多值参数中选择了哪些选项?
【发布时间】:2013-06-07 18:35:23
【问题描述】:

我正在尝试使用字段表达式针对 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)

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

【问题讨论】:

    标签: if-statement reporting-services parameters multivalue


    【解决方案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 添加到总数中。

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

    选择所有值:

    选择了两个值:

    【讨论】:

    • 这种方法对于简单的情况来说已经足够了,但它的问题是如果有十个字段分别称为value1value10,那么每次选择value10 时,value1 也将是包括在总数中(如果在多个报告中使用这些字段名称,那么键入和维护这些字段名称也很无聊)。
    • @ChrisLätta,您可以通过稍微更新IIf 表达式来处理上述情况:IIf(InStr("," &amp; Join(Parameters!Include.Value, ",") &amp; ",", ",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)
    

    【讨论】:

    • 一个不错的选择。但是,我决定使用快速表达式定义的字段。
    猜你喜欢
    • 2012-02-24
    • 1970-01-01
    • 2018-12-11
    • 2013-08-31
    • 1970-01-01
    • 1970-01-01
    • 2015-09-28
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多