0

我正在将 SSRS 2005 BIDS 项目迁移到 Visual Studio 2015 数据工具,并且我看到迁移使用 IN 运算符的 DataSet 过滤器时出现问题。报告似乎工作正常,但是当我在设计器中查看过滤器表达式时,只出现列表中的第一个操作数,其余的都丢失了。但是,如果我查看代码(.rdl 源代码),我会看到所有操作数。更糟糕的是,如果我使用 OK 按钮关闭 Filters 窗口,则只保留第一个操作数,其余操作数将从 .rdl 文件中删除。

这是 .rdl 代码中的示例过滤器:

<Filter>
  <FilterExpression>=Fields!DecodeType.Value</FilterExpression>
  <Operator>In</Operator>
  <FilterValues>
    <FilterValue>="Team"</FilterValue>
    <FilterValue>="ALL"</FilterValue>
  </FilterValues>
</Filter>

过滤器运算符和过滤器值的 .rdl 代码在 2005 和 2015 工具中是相同的。问题似乎与 2015 年(或 2008 年)设计师有关。

问题:

我做错了什么,还是这是一个已知问题?

我应该改用什么语法。Split("Team,ALL",",") 有效,但我的一些过滤器在可能值列表中检查 Nothing(请参阅下面的 .rdl 过滤器值)

<Filter>
  <FilterExpression>=Fields!DecodeType.Value</FilterExpression>
  <Operator>In</Operator>
  <FilterValues>
    <FilterValue>=2</FilterValue>
    <FilterValue>=Nothing</FilterValue>
  </FilterValues>
</Filter>

注意:从 2005 BIDS 迁移到 2008 BIDS 时也会出现同样的问题。我通过尝试通过每个版本进行渐进式迁移发现了这一点:(

4

1 回答 1

0

我发现这个问题确实与数据工具在设计时如何处理 IN 过滤器有关。我的解决方案是使用我不太喜欢的 =split() 解决方法,但它有效:

="Team,ALL".split(",")

文档说我应该可以简单地在我的 IN 子句中使用以下内容而无需任何等号:

"Team","ALL"

但是,下次我打开过滤器时,它看起来像这样,没有引号:

Team, ALL

然后,如果我再次单击“数据集属性”页面上的“确定”并重新打开过滤器,则值将如下所示:

"""Team""","""ALL"""

这不是一个真正的选择,因此是使用 =split() 的原因。

仅供参考,当您的字段是整数时,您可以在表达式中列出不带等号 (=) 的参数,如下所示:

2,4,9

希望这可以帮助下一个人。

*更新* 在没有任何(null)可能的情况下,我尝试了这个并且它似乎有效:

编辑过滤器并在表达式中(您通常会从数据集中选择一个字段)将其添加为表达式:

=iif(IsNothing(Fields!myField.Value), -1, Fields!myField.Value)

在我的情况下,这会产生一个整数,所以我将表达式的数据类型设置为整数。可悲的是,我在这里使用了一个神奇的数字(在这种情况下为-1)

现在您可以在过滤器的 Value 字段中这样说:

-1,2,4,9

或者,如果您的测试字符串和“Nothing”是选项之一,请改用此表达式:

=iif(IsNothing(Fields!myField.Value), "NULL", Fields!myField.Value)

然后过滤器的 Value 字段中的测试如下所示:

=="Team,ALL,NULL".split(",")

另一个神奇的东西(在这种情况下是“NULL”),但它让我绕过了工具的限制。

再次,我希望这对其他人有所帮助。

于 2016-09-15T20:47:35.810 回答