【问题标题】:SSRS - Lookup set to ignore the " " valuesSSRS - 查找设置为忽略“”值
【发布时间】:2016-12-16 02:20:49
【问题描述】:

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

=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")," / " ).删除(1,1)))

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

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

【问题讨论】:

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


    【解决方案1】:

    用 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 代码可以让您摆脱困境),以下是所提供解决方案的弱点:

    • 难以阅读
    • 难以维护
    • 容易受到数据变化的影响(一行中的空字符串太多)

    记住负责任地编写代码。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-07-10
      • 2019-09-02
      • 2021-01-26
      • 1970-01-01
      • 2023-04-05
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多