【问题标题】:SSRS BIDS 2005 to 2015 Data Tools migration: Filters with IN operator migrating improperlySSRS BIDS 2005 到 2015 数据工具迁移:IN 运算符迁移不正确的过滤器
【发布时间】:2016-09-12 12:33:56
【问题描述】:

我正在将一个 SSRS 2005 BIDS 项目迁移到 Visual Studio 2015 Data Tools,我发现迁移使用 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 时也会出现同样的问题。我通过尝试通过每个版本进行渐进式迁移发现了这一点:(

【问题讨论】:

    标签: ssrs-2008 reportingservices-2005 bids sql-server-data-tools ssrs-2016


    【解决方案1】:

    我发现问题确实与数据工具在设计时如何处理 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)

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

    -1,2,4,9
    

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

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

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

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

    另一个神奇的东西(在本例中为“NULL”),但它让我绕过了工具的限制。

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

    【讨论】:

      猜你喜欢
      • 2018-02-06
      • 1970-01-01
      • 1970-01-01
      • 2016-02-28
      • 2021-05-05
      • 2020-10-02
      • 2013-06-12
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多