SSRS SPLIT 函数破坏 IIF 语句

问题描述 投票:0回答:1

在我的数据集中,我有两个包含字符串的字段 X 和 Y,但有时 Y 为空。字符串的结构如下“(可变长度代码)代码描述”eks:

(ab1234) some event

我希望大部分时间都使用 Y,但是当 Y 为空时我需要使用 X,并且我一直在尝试使用此代码。

=IIF(isNothing(Fields!Y.Value), 
    Split(Fields!X.Value,")").GetValue(1), 
    Split(Fields!Y.Value,")").GetValue(1)
)

当 Y 不为空时,这工作得很好,但在这种情况下,它是提交的回报

#ERROR
我已经尝试了很多东西来规避这个问题,但只要
Split(Fields!Y.Value,")").GetValue(1)
行存在,它就会中断。谁能告诉我这是为什么,以及解决这个问题的有效方法。

这将按预期返回

=IIF(isNothing(Fields!Y.Value), 
    1, 
    0
)

这将按预期返回

=IIF(isNothing(Fields!Y.Value), 
    Split(Fields!X.Value,")").GetValue(1), 
    0
)

这将返回 #ERROR 而不是 1

=IIF(isNothing(Fields!Y.Value), 
    1, 
    Split(Fields!Y.Value,")").GetValue(1)
)

同上

=IIF(NOT isNothing(Fields!Y.Value),  
    Split(Fields!Y.Value,")").GetValue(1),
        1
)

MID 字符串命令可以工作,但由于可变长度代码,结果很混乱

reporting-services
1个回答
0
投票

您的表达式的问题是 IIF 的两个部分都被评估,即使它们没有返回。因此,当 Y 为 NULL 时,SSRS 仍然尝试评估 SPLIT() ,它将返回空数组,然后 GetValue(1) 尝试返回第二个元素,该元素不存在。

解决此问题的最简单方法是在评估字符串时在字符串末尾添加“)”。结果永远不会返回,所以没关系。

所以..

=IIF(
    IsNothing(Fields!Y.Value)
    , Split(Fields!X.Value & ")", ")").GetValue(1)
    , Split(Fields!Y.Value & ")", ")").GetValue(1)
)

将解决该问题。

当评估 SPLIT 时,将 Y 指定为“(ab1234) some event”将会拆分字符串

"(ab1234) some event)"
,但仍返回第一个元素
" some event"
。当 NULL 值被求值时,它将尝试分割字符串
")"
而不是 NULL 并返回一个空字符串,我们实际上从未返回这个值,但该函数可以返回一个有效值,这就是我们所需要的。

基于我在示例中使用的以下数据集..

DECLARE @t TABLE(X varchar(100), Y varchar(100))
INSERT INTO @t VALUES 
('(ab1234) some event R1X', '(ab1234) some event R1Y'),
(NULL, '(xy9876) some other event R2Y'),
('(zz999) final event R3X', NULL)

SELECT * FROM @t

这些是结果。

© www.soinside.com 2019 - 2024. All rights reserved.