我有一个来自查询的单元格,返回多个读数,如下所示,最多8个
|_____readings_____| |1;2;3;..., 8 |
在我的SSRS报告中,我需要将每个读数放在一个单独的列中,例如
| a | b | c | ...| | 1 | 2 | 3 | ...|
我使用的是ssrs和sql server的2005版本 有人可以帮忙吗?亲切的问候
答案 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所以问题有许多其他选择。
显然,如果您正在处理固定的数据源/数据集,这可能不是一种选择。