用 SQL 解决
如果这是我的项目,我宁愿在生成数据的 SQL 查询中解决这个问题。由于我看不到您的 SQL 查询,并且在某些情况下您可能无法更改查询,因此我提供了我的 hacky post-SQL 解决方案。
黑客解决方案
为简单起见,我将使用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 函数将产生最终字符串“name 1 // name 2”。为了连续处理多个空白,您必须嵌套更多 REPLACE 函数。
类似这样的:
=REPLACE(REPLACE(REPLACE(DATA_SET_STRING," / "), " ", " "), "/ /", "/"), "/ /", "/").Remove(1,1)))
虽然您可以使用这种REPLACE 方法解决特定场景,但它总是容易受到比您预期更多的空白。
警告
同样,我宁愿通过提供一个过滤掉空白和空字符串名称的查询来解决这个问题。但是,如果您打算使用 hacky 方法(我知道 hacky 代码可以让您摆脱困境),以下是所提供解决方案的弱点:
- 难以阅读
- 难以维护
- 容易受到数据变化的影响(一行中的空字符串太多)
记住负责任地编写代码。