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