使用IN运算符过滤报告服务

时间:2013-11-07 16:08:01

标签: sql-server-2008 reporting-services ssrs-2008

任何人都可以建议在表过滤器中使用IN运算符时的语法。 我尝试过以下但是snytax错了:

enter image description here

17 个答案:

答案 0 :(得分:37)

我也遇到过这个问题。微软own documentation表示值框中的一个简单的逗号分隔值列表应该有效。这很令人困惑,因为它没有做到。至少它对我来说没有,我正在使用SSRS 2012和Visual Studio 2010。

事实证明,当您使用IN运算符时,SSRS期望一组值。有许多方法可以使这个过滤器工作。以下示例旨在在表达式编辑器中输入。

第一种方式(也就是下面链接的博客中解释的方式)是在字符串值中键入逗号分隔列表,然后在其上使用split函数。

=split("2B,2C",",")

或者您可以从多值参数派生列表。多值参数已经是一个数组,所以你要做的就是通过参数表达式引用它,如下所示。

=Parameters!MultiValueParam.Value

我通过以下博客发现了这些信息。 http://sqlblogcasts.com/blogs/simons/archive/2007/11/20/RS-Howto--Use-the-IN-operator-in-a-filter-expression.aspx

答案 1 :(得分:14)

如果您只是更改属性,只需添加一个逗号分隔的值列表,该列表应该有效:

enter image description here

无论如何,这对我来说是一个快速测试。

联机丛书似乎对示例非常清楚,但我找到了一个参考文献;请参阅Commmonly Used Filters中的In示例。如果更好地解释这将是很好的。

答案 2 :(得分:13)

这实际上有效:

=CStr("Value1,Value2,Value3,Value4,etc").Split(",")

这是在SSRS 2012中测试的。

答案 3 :(得分:4)

如果推荐的解决方案不适合您,请尝试使用semicon作为分隔符。

示例:标准一;标准二

它对我有用。

答案 4 :(得分:2)

这在SSRS 2012中对我有用。

“标准一”,“标准二”

答案 5 :(得分:2)

从表达式中删除前导=,即

"criteria one" , "criteria two"

答案 6 :(得分:2)

对于整数值,您可以使用:

类型:文字

接线员:

值:=新整数(){8800,8820}

应该适用于2008 R2和更新版本

答案 7 :(得分:1)

经过多次尝试后,我的问题终于解决了,只使用了这种方法。

<强>表达式:

= InStrRev(包含分隔符的完整字符串要搜索的值

输入:整数

运营商:&lt;&gt;

值: 0

答案 8 :(得分:1)

"value1" "value2"

只有一个空格,没有逗号对我有用。有趣的是,回到测试后,它显示为

value1, value2

,带逗号,不带引号。如果我将其剪切,然后将其直接粘贴回相同的字段,则无法使用。这是一些越野车。

底层数据类型为nvarchar(10),不为null

经过VS 2017和SSRS 2016的测试

答案 9 :(得分:0)

我的值包括正斜杠。我可以获得SSRS的运算符中正确处理它们的唯一方法是使用表达式- name: Print car make debug: msg="{{item.1}}" with_subelements: - brands - makes =

答案 10 :(得分:0)

将此查询输入表达式:

=Join(Parameters!MultiValueParam.Value)

答案 11 :(得分:0)

可能我正在使用SSRS的最新版本。值类型为文本。对我来说,

"criteria 1";"criteria 2";...;"criteria N"

双引号是必需的。

答案 12 :(得分:0)

OMG这么多答案...
我知道这可行:

1) MY SP returns VARCHAR(n) for the field I will filter in the tablix. Returning INT DOES NOT WORK in my solution. I don't know why (yet).       
2) report.param.allow multiple values = true  
3) tablix.filter.expression.datatype = text  
4) tablix.filter.operator = IN  
5) tablix.filter.value = =SPLIT(JOIN(Parameters!id.Value,","),",") 

使用此方法,我能够调用一次SP,在参数中使用它来获取可用值,运行报告,然后tablix表从上面的步骤5中读取所选数据,并显示正确的行数

答案 13 :(得分:0)

通用解决方案:

表达式:[ columnName ]

操作员:在

值:[@ parameterName ]

答案 14 :(得分:0)

在 Visual Studio 2013 Premium 中,IN 运算符可以很好地处理多值参数:

=Parameters!MultiValueParam.Value

但是,当我想在我的集合中使用常量值时,我无法让 IN 操作符通过 UI 输入文本或表达式。

最终使用一组常量值的方法是进入代码视图并手动编辑我的过滤器。一组常量字符串“E”、“G”和“H”所需的 XML 是这样的:

<Filters>                                                                                            
  <Filter>                                                                                              
    <FilterExpression>=Fields!det.Value</FilterExpression>                                                                                              
    <Operator>In</Operator>                                                                                              
    <FilterValues>                                                                                                
      <FilterValue>E</FilterValue>                                                                                                
      <FilterValue>G</FilterValue>
      <FilterValue>H</FilterValue>                                                                                              
    </FilterValues>                                                                                            
  </Filter>                                                                                          
</Filters>

答案 15 :(得分:0)

对于整数值,这对我有用:

  • 表达式:MyNumber
  • 操作员:在
  • 值:10; 12; 124

查看图片链接:

enter image description here

答案 16 :(得分:-2)

enter image description here

每个数值之间需要一个空格。工作正常