查询列返回多个读数,需要是ssrs中的多个单元格

时间:2013-06-06 12:39:07

标签: sql-server-2005 reporting-services

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

|_____readings_____|
|1;2;3;..., 8      |

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

| a | b | c | ...|
| 1 | 2 | 3 | ...|

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

1 个答案:

答案 0 :(得分:1)

报告级别

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

在表达式中,您可以执行以下操作:

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

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

问题是readings字段中的元素少于8个;您将收到报告错误 - 将表达式包装在IIf中是不够的,因为这不会在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特定的解决方法是在数据库级别处理此问题(如果可能),并且只使用不透明的数据作为报告中Matrix的基础。

Erland Sommarskog在Arrays and Lists下有一系列文章,提供了在SQL Server中拆分字符串的任意数量的方法; this所以问题有许多其他选择。

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