代码之家  ›  专栏  ›  技术社区  ›  Shayki Abramczyk Cece Dong - MSFT

SSRS多值参数不工作

  •  2
  • Shayki Abramczyk Cece Dong - MSFT  · 技术社区  · 6 年前

    我有一份SSRS报告。在主查询上有一个很长的SQL查询,在最后一个 SELECT 我想用 WHERE 表达式中,筛选器应具有多值参数。

    我这样设置参数:

    • 使用查询创建新数据集。

    enter image description here enter image description here

    • 将新参数添加到参数文件夹(名为NewParam)。

    enter image description here enter image description here

    • 选中“允许多个值”复选框。

    • 将参数添加到“Main Query”并使用以下表达式设置值:

    =Join(Parameters!NewParam.Value,",") 
    
    • 在主查询结束时,我过滤结果:
    select * 
    from @FinalStatusTbl 
    where Test_Number in (@NewParam) 
    order by Priority
    

    enter image description here enter image description here

    问题是:

    在报告中,当我从列表中选择一个值时,我得到了预期的结果,但如果我选择多个值,则结果为空(没有得到错误)

    你知道为什么吗?

    where Test_Number in ('Test 1', 'Test 2') 它工作得很好)。

    3 回复  |  直到 5 年前
        1
  •  1
  •   iamdave    6 年前

    使用sql查询创建数据集时,多值参数将使用 in(@ParamName)

    替换您的 =Join(Parameters!NewParam.Value,",") 只是 =Parameters!NewParam.Value 你应该没事的。


    也就是说,你看到人们使用它的原因 join 参加 在数据集中具有字符串拆分函数的表达式,该函数转换结果 Value1,Value2,Value3 表中的字符串值,可通过 inner join .

    如果将多个值作为参数传递给存储过程,这也是一个要求,因为您不能使用 在(@ParamName) 语法。

        2
  •  0
  •   stamina    6 年前

    这将有效地将筛选从SQL转移到SSRS。

        3
  •  0
  •   DimUser    6 年前

    您需要做的是在数据库中拆分字符串。传递给查询的是作为完整字符串的“测试1,测试2”,而不是“测试1”和“测试2”。这就是为什么一个值有效,而多个值无效。

    Here 是一个很好的关于如何分割字符串的链接,为您的场景做准备。我最常使用的函数是CTE示例,它返回一个包含拆分字符串的表。然后我将SQL查询更改为使用 IN

    在你的例子中,你会想写 WHERE Test_Number IN (SELECT Item FROM dbo.ufn_SplitStrings(@NewParam) ,其中ufn_SplitString是从前面提到的链接创建的函数。

        4
  •  0
  •   Bhargav Rao Ankit    5 年前

    这就是我所做的,对我很有效。你也可以试试。

    =sum(if(Fields!Business_Code.Value = "PH" 
    and (Fields!Vendor_Code.Value = "5563"
    and Fields!Vendor_Code.Value = "5564"
    and Fields!Vendor_Code.Value = "5565"
    and Fields!Vendor_Code.Value = "5551")
    , Fields!TDY_Ordered_Value.Value , nothing ))
    

    enter image description here