SSRS表达式 - #Error在一个明显正确的表达式中

时间:2017-12-22 15:36:29

标签: reporting-services ssrs-2008

我有一个SSRS表达式:

=IIF(
    Fields!CUT.Value.ToString().Length > 1
    ,IIF(
        Fields!CUT.Value.ToString().Contains(","), 
        Fields!CUT.Value.ToString().Substring(0, Fields!CUT.Value.ToString().IndexOf(",")),
        Fields!CUT.Value.ToString()
    )
    ,""
)

翻译
如果该字段包含,,请将该字段的substring从第一个位置转到,所在的位置。如果该字段不包含,,请告诉我整个字段。

万阿英,蒋达清:
我在没有COMMA的所有页面中得到#Error。如果有COMMA,它会按预期工作。其中一个字段,值为4。在不同的方案中,值为17/64" Corrugated。我得到了这两个错误。

我尝试了什么:
我尝试过几种不同的方法:

  1. 使用LIKE代替Contains

    =IIF(
        IsNothing(Fields!CUT.Value)
        ,""
        ,IIF(
            Fields!CUT.Value LIKE "*,*", 
            Mid(Fields!CUT.Value, InStr(Fields!CUT.Value, ",") + 1,  (LEN(Fields!CUT.Value) - InStr(Fields!CUT.Value, ",") - 1))
            Fields!CUT.Value
        )
    )
    
  2. 我在dataset添加了一个新字段,用,替换XXXX。我想,也许SSRS无法理解我在谈论,作为字符串的一部分。然后更改查询以查看其中是否有XXXX。仍然有相同的#Error

  3. 删除.data文件,清理项目并重建项目。因为,这显然不是不正确的。所以我想也许不是在看报告的最新版本。

  4. 似乎什么都没做!我真的很接近做坏事!这件事让我疯了。

    问题:

    1. 任何人看到我的任何一个表达都有问题吗?
    2. 有没有更好的方法来实现我想要实现的目标?如果有,,请在,之前提供所有内容。如果没有,请给我一切。
    3. 编辑1:
      值得注意的是,在另一个领域,我正在做一些非常类似的事情:

      IIF(
          IsNothing(Fields!CUT.Value)
          ,""
          ,IIF(
              Fields!CUT.Value LIKE "*,*"
              ," | Length: " & Mid(Fields!CUT.Value, InStr(Fields!CUT.Value, ",") + 1,  (LEN(Fields!CUT.Value) - InStr(Fields!CUT.Value, ",") - 1))
              ,""
          )
      )
      

      这样做是,如果同一字段中有,,请在,之后获取所有内容并将其附加到| Length:。如果没有,,则只显示空格""。这完全没问题。在存在,并且没有,的情况下。所以我得出结论,微软正在使用SSRS让我发疯。

1 个答案:

答案 0 :(得分:1)

您可以使用SWITCH执行此操作并首先测试没有逗号,但是假设您只想让字符串的第一部分达到逗号的位置,则有一种更简单的方法。

这只使用split函数并获取第一个元素。

=(Split(Fields!CUT.Value, ",")).GetValue(0)

美好而简单:)