SSRS 表达式 - #Error in an an obviously correct expression
SSRS Expression - #Error in an obviously correct expression
我有一个 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
。如果该字段不包含 ,
,请给我整个字段。
问题:
我在所有没有逗号的页面中得到一个 #Error
。如果有一个逗号,它会按预期工作。其中一个字段,值为4
。在不同的场景中,该值为 17/64" Corrugated
。这两个我都收到错误消息。
我试过的:
我尝试了几种不同的方法:
使用 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
)
)
我在 dataset
中添加了一个新字段,用 XXXX
替换了 ,
。我想,也许 SSRS 无法理解我说的 ,
作为字符串的一部分。然后更改查询以查看其中是否有 XXXX
。还是一样#Error
删除.data
文件,清理项目,重建项目。因为,这显然是不正确的。所以我想也许不是在看最新版本的报告。
好像什么都做不了!我真的差点做坏事了!这件事快把我逼疯了。
问题:
- 有人看出我的任何一个表达有什么问题吗?
- 有没有更好的方法来完成我想要完成的事情?如果有
,
,请给我 ,
之前的所有内容。没有的话全部给我
编辑 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:
。如果没有,
,就显示一个空的space""
。这工作得很好。在有 ,
而没有 ,
的情况下。所以我得出结论,微软正在使用 SSRS 让我发疯。
您可以使用 SWITCH 执行此操作并首先测试是否没有逗号,但有一种更简单的方法假设您只想获取字符串的第一部分直到逗号点。
这只是使用拆分函数并获取第一个元素。
=(Split(Fields!CUT.Value, ",")).GetValue(0)
简洁明了 :)
我有一个 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
。如果该字段不包含 ,
,请给我整个字段。
问题:
我在所有没有逗号的页面中得到一个 #Error
。如果有一个逗号,它会按预期工作。其中一个字段,值为4
。在不同的场景中,该值为 17/64" Corrugated
。这两个我都收到错误消息。
我试过的:
我尝试了几种不同的方法:
使用
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 ) )
我在
dataset
中添加了一个新字段,用XXXX
替换了,
。我想,也许 SSRS 无法理解我说的,
作为字符串的一部分。然后更改查询以查看其中是否有XXXX
。还是一样#Error
删除
.data
文件,清理项目,重建项目。因为,这显然是不正确的。所以我想也许不是在看最新版本的报告。
好像什么都做不了!我真的差点做坏事了!这件事快把我逼疯了。
问题:
- 有人看出我的任何一个表达有什么问题吗?
- 有没有更好的方法来完成我想要完成的事情?如果有
,
,请给我,
之前的所有内容。没有的话全部给我
编辑 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:
。如果没有,
,就显示一个空的space""
。这工作得很好。在有 ,
而没有 ,
的情况下。所以我得出结论,微软正在使用 SSRS 让我发疯。
您可以使用 SWITCH 执行此操作并首先测试是否没有逗号,但有一种更简单的方法假设您只想获取字符串的第一部分直到逗号点。
这只是使用拆分函数并获取第一个元素。
=(Split(Fields!CUT.Value, ",")).GetValue(0)
简洁明了 :)