0

我正在尝试将包含设备制造商、型号和序列号的字符串解析为单独的字段,以在报告中它们自己的列中结束。

源值通常类似于3B0645X01543 APCBack-UPS ES 550 FW:840.B2.D USB FW:B2第一组字符是序列号,APC 是品牌,Back-UPS ES 550是型号。我的目标是让我的报告返回一个值“APC”作为品牌,ES 之后的数值作为型号,第一个字符集作为序列号。只要我直接渲染为 HTML,我就可以正常工作。如果我呈现为 PDF、Excel 或其他任何内容,这些列中的每一列都会返回#Error. 这就是我的做法。

源是同一数据集中名为 的字段DeviceID。例如,它包含字符串3B0645X01543 APCBack-UPS ES 550 FW:840.B2.D USB FW:B2

我的数据集中有 3 个计算字段:品牌、型号和序列号。Make 的表达式如下。

=SWITCH(Fields!DeviceID.Value.ToString().Contains("EATON"), "Eaton", Fields!DeviceID.Value.ToString().Contains("APC"), "APC", Fields!DeviceID.Value.ToString().Contains("Tripp"), "TrippLite", Fields!DeviceID.Value.ToString().Contains("American"), "APC")

然后,我使用查找功能将此Make字段拉入报告中的表格中。

同样,如果我渲染为 HTML,所有三个值都像冠军一样工作。任何其他渲染都让我着迷#Error

任何帮助是极大的赞赏!

4

1 回答 1

0

我试图用我可用的版本(SQL 2012)复制它,但我无法重现这个问题。对 Google 的一些研究表明,其他人也出现了同样的问题,并且似乎与在某些情况下使用 Lookup 功能有关,但我没有找到解决方案。

但是我可以建议一个解决方法来尝试:

无需将计算字段添加到您的数据集,而是将一些自定义代码添加到报告中以解析 DeviceID。例如,要获得 Make,您可以使用这样的东西(抱歉,可能有一种更优雅的方法):

 Public Function DeviceIDMake(ByVal DeviceID As String) As String
        If  DeviceID.ToString().Contains("EATON") Then
            Return "Eaton"
        Else
            If DeviceID.ToString().Contains("APC") Then
    Return "APC"
            Else 
    If DeviceID.ToString().Contains("Tripp") Then
        Return "TrippLite"
                Else 
       If DeviceID.ToString().Contains("American") Then
           Return "APC"
                   Else 
          Return ""
                   End If
                End If
            End If
        End If
 End Function

然后在您的报告中,您可以像这样调用代码来获取“Make”:

=Code.DeviceIDMake(Fields!DeviceID.Value)

这可能会避免导致渲染问题的任何原因。

于 2013-09-11T10:50:44.053 回答