SSRS - 查找设置为忽略“”值

时间:2016-12-16 02:20:49

标签: reporting-services ssrs-2008-r2 ssrs-tablix reportbuilder3.0

我在下面创建了一个查找集:

= RTRIM(LTRIM(加入(LookupSet(Fields!Fund_Family.Value& Fields!Portfolio_Company_Name.Value,Fields!Fund_Family.Value& Fields!Portfolio_Company_Name.Value,Fields!Security_Type.Value,“DataSet1”),“ /“)。删除(1,1)))

这似乎有效。但是,在某些特定情况下,我有两行,一行的值为另一行而没有值(“”)或安全列。但是,通过执行此连接,结果看起来像/ Security1。但是,它应该是Security1.There场合它还会选择Security 1 / / Security 2.它应该忽略“”值。

如何添加此表达式。我知道ISNothing有一个表达式,但是可以在这里添加吗?

1 个答案:

答案 0 :(得分:1)

在SQL中解决

如果这是我的项目,我宁愿在产生数据的SQL查询中解决这个问题。由于我无法看到您的SQL查询,并且在某些情况下您无法更改查询,因此我提供了我的hacky post-SQL解决方案。

Hacky Solution

为简单起见,我将使用DATA_SET_STRING代表您的代码:RTRIM(LTRIM(Join(LookupSet(Fields!Fund_Family.Value & Fields!Portfolio_Company_Name.Value,Fields!Fund_Family.Value & Fields!Portfolio_Company_Name.Value,Fields!Security_Type.Value, "DataSet1")

这样的内容将从列表中删除空字符串名称:=REPLACE(DATA_SET_STRING," / "), "/ /", "/").Remove(1,1)))

空字符串&空白

如果你想删除空格名称("")以及空字符串("")那么我会先将空白区域名称转换为空字符串,然后删除空字符串。嵌套REPLACE语句可以实现此目的:

=REPLACE(REPLACE(DATA_SET_STRING," / "), "   ", "  "), "/ /", "/").Remove(1,1)))

连续多个空白

对此的最大限制(除了难以阅读和维护之外)是它只会连续删除有限数量的空白名称。例如,如果一行中有三个空白名称,则原始函数DATA_SET_STRING将返回"名称1 / / / /名称2"。我的其他REPLACE函数将生成一个"名称1 / /名称2"的最终字符串。为了连续处理多个空格,您必须嵌套更多REPLACE个函数。

这样的事情:

=REPLACE(REPLACE(REPLACE(DATA_SET_STRING," / "), "   ", "  "), "/ /", "/"), "/ /", "/").Remove(1,1)))

尽管您可以使用此REPLACE方法解决特定方案,但它总是容易受到比预期更多空白的影响。

<强>警告

同样,我宁愿通过提供过滤掉空白和空字符串名称的查询来解决此问题。但是,如果你打算使用hacky方法(我知道hacky代码可以让你摆脱困境),这里提供的解决方案的弱点是:

  • 难以阅读
  • 难以维护
  • 易受数据更改(连续的空字符串过多)

请记住负责任地编码。