【问题标题】:Use Split in SSRS Expression在 SSRS 表达式中使用拆分
【发布时间】:2015-12-14 09:51:46
【问题描述】:

在 SSRS 报告的下拉列表中,我的值类似于 100 - XYZ

我只想在其中一个文本框中显示XYZ

我已经使用了如下的拆分功能,

=IIF(Parameters!Name.Value <> "",
 "For Name" + Replace(Split(Parameters!Name.Value, "-").GetValue(1)," ", ""),
 "For All Names")

上面的例子工作正常,但是当它转到 else case 时它总是抛出错误。

你能告诉我这个表达有什么问题吗?还是我的表达有问题?特别是它在(1) 下方显示红线,但正如我之前所说,它工作正常。

注意: 我最近也尝试过.GetValue(1),但没有成功。

【问题讨论】:

  • 这可以是多选吗?如果是,您要在文本框中显示多选的哪个值?全部?

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


【解决方案1】:

正如 Jonnus 在评论中提到的,

它可能会显示错误,因为expression 的其他地方存在问题,而不仅仅是False 部分。 SSRS 评估整个 执行之前的表达式,所以如果在任何地方出现问题 会抛出#Error

我找到了实现预期结果的替代解决方案。

=IIF(Parameters!Name.Label = "All",
"For All Names",
"For Name " + Replace(Right(Parameters!Name.Label,
Len(Parameters!Name.Label) - InStr(Parameters!Name.Label, "-"))," ",""))

我用Split 尝试了很多次,但总是失败。如果有人想用Split 解决这个问题,那就太好了。请分享你的看法。感谢 Jonnus 的快速回复。

【讨论】:

  • 使用Right函数,你应该像这样使用InStrRev =Right(Parameters!Name.Label, InStrRev(Parameters!Name.Label, "-"))
【解决方案2】:

您似乎试图检索原始字符串中- 之后的所有字符。如果您按如下方式使用 RIGHT,而不是进行 SPLIT,它会更容易理解和维护

=iif(Parameters!Name.Value <> "",
 "For Name " & Right(Parameters!Name.Value, 
                     Instr(Parameters!Name.Value, " - ") -1),
 "For All Names")

【讨论】:

  • 我也试过上面的代码,但在 else 条件下它仍然抛出错误。所以不是显示For All Names,而是显示#Error - BTW 100 - XYZ 是我的标签值。所以我需要使用.Label 而不是.Value。我们也不能通过拆分来实现吗?
  • 它可能会显示错误,因为表达式中的其他地方存在问题,而不仅仅是错误的部分。 SSRS 在执行之前评估整个表达式,因此如果任何地方出现问题,它将抛出#Error。您是否尝试过将您的表达分解到问题发生的确切位置(即只是真实的部分,只是Right,只是instr)?
  • 是的,我已经打破了我的表达。如果我删除 Replace(Split(Parameters!Name.Value, "-").GetValue(1)," ", "") 它会起作用,但我不明白为什么它会导致问题?另外,我阅读了您的上述评论,所以现在我知道我必须检查整个表达式。 - 如果我们无法使用拆分解决,我发现很快就会发布另一种解决方案。 :( - 如果您对拆分有任何想法,请分享...否则我将使用 Right LenInStr 来修复。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-09-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-10-07
  • 2017-10-03
  • 1970-01-01
相关资源
最近更新 更多