我正在尝试将包含设备的品牌,型号和序列号的字符串解析为单独的字段,最终在报告中的各自列中。
源值通常类似于3B0645X01543 APCBack-UPS ES 550 FW:840.B2.D USB FW:B2
,其中第一组字符是序列号,APC是make,Back-UPS ES 550
是模型。我的目标是让我的报告返回值为“APC”for make,值为ES后的模型值,以及序列号的第一个字符集。只要我直接渲染到HTML,我就可以使用它。如果我渲染为PDF,Excel或其他任何列,则返回#Error
。我正是这样做的。
源是名为DeviceID
的同一数据集中的字段。例如,它包含字符串3B0645X01543 APCBack-UPS ES 550 FW:840.B2.D USB FW:B2
。
我的数据集中有3个计算字段,Make,Model和Serial。 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
。
非常感谢任何帮助!
答案 0 :(得分:0)
我试图用我可用的版本(SQL 2012)复制它,但我无法重现这个问题。对谷歌的一些研究表明,其他人也遇到了同样的问题,似乎与在某些情况下使用查找功能有关,但我没有找到解决方案。
但是我可以建议尝试一种解决方法:
不是将计算字段添加到数据集,而是向报表添加一些自定义代码以解析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)
这可能会避免导致渲染问题的任何原因。