0

我有一个来自查询的单元格,返回多个读数,如下所示,最多 8 个

|_____读数_____|
|1;2;3;..., 8 |

在我的 SSRS 报告中,我需要将每个读数放在单独的列中,例如

| 一个 | 乙 | c | ...|
| 1 | 2 | 3 | ...|

我正在使用 2005 版的 ssrs 和 sql server 有人可以帮忙吗?亲切的问候

4

1 回答 1

1

报告级

您可以使用该Split函数获取分隔字符串并返回一个数组;基于此,您可以从 0-7 指定您想要的元素来获取您的八列。

在一个表达式中,你会做这样的事情:

=Split(fields!readings.Value, ";")(0)(第一个元素)或

=Split(fields!readings.Value, ";")(7)(第 8 个元素)

问题是当字段中的元素少于 8 个时readings;您将收到一个错误报告 - 将表达式包装在 anIIf中是不够的,因为这不会在 SSRS 中短路,任何问题字符串都会出错。

要处理这些问题,您可以将逻辑移至报告中嵌入的自定义代码:

Function ElementByNumber(fieldValue As String, elementNumber As Integer) As String

  If Split(fieldValue, ";").Length < elementNumber

    ElementByNumber = Nothing

  Else

    ElementByNumber = Split(fieldValue, ";")(elementNumber - 1)

  End If

End Function

然后,您可以在报告中引用它,例如:

=Code.ElementByNumber(fields!readings.Value, 8)

根据需要对您需要的每一列重复此操作。

数据库级别

如果可能的话,另一个非 SSRS 特定的解决方法是在数据库级别处理此问题,并仅使用未透视数据作为报表中矩阵的基础。

Erland Sommarskog 在数组和列表下有一系列文章,介绍了在 SQL Server 中拆分字符串的任意数量的方法;这个SO question 有很多其他的选择。

显然,如果您正在处理固定的数据源/数据集,这可能不是一个选项。

于 2013-06-06T19:55:27.217 回答