Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/vb.net/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/reporting-services/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Vb.net SSRS Visual Basic代码仅适用于Reporting services_Vb.net_Reporting Services_Ssrs 2012 - Fatal编程技术网

Vb.net SSRS Visual Basic代码仅适用于Reporting services

Vb.net SSRS Visual Basic代码仅适用于Reporting services,vb.net,reporting-services,ssrs-2012,Vb.net,Reporting Services,Ssrs 2012,我制作了一个解析器,它使用VisualBasic代码在文本中对数字进行舍入。但数字舍入仅在SSR中有效,下载时不起作用(参见xxx的平均值) 这是我的VB代码: Public Function RoundAllNumbers(inputText As String) As String Dim result = inputText Dim patterns = {New PatternType With {.Pattern = "Current Usage (-?\d+\.\

我制作了一个解析器,它使用VisualBasic代码在文本中对数字进行舍入。但数字舍入仅在SSR中有效,下载时不起作用(参见xxx的平均值)

这是我的VB代码:

Public Function RoundAllNumbers(inputText As String) As String
    Dim result = inputText
    Dim patterns = {New PatternType With {.Pattern = "Current Usage (-?\d+\.\d+) is negative", .Template = "Current Usage {0} is negative", .Precision = 2},
                    New PatternType With {.Pattern = "Current Usage, (-?\d+\.\d+) KWH", .Template = "Current Usage, {0} KWH", .Precision = 2},
                    New PatternType With {.Pattern = "Budget of (-?\d+\.\d+) KWH", .Template = "Budget of {0} KWH", .Precision = 2},
                    New PatternType With {.Pattern = "usage of (-?\d+\.\d+)", .Template = "usage of {0}", .Precision = 2},
                    New PatternType With {.Pattern = "average of (-?\d+\.\d+)", .Template = "average of {0}", .Precision = 0},
                    New PatternType With {.Pattern = "Current demand (-?\d+\.\d+)", .Template = "Current demand {0}", .Precision = 0},
                    New PatternType With {.Pattern = "demand of (-?\d+\.\d+)", .Template = "demand of {0}", .Precision = 0},
                    New PatternType With {.Pattern = "usage amount of (-?\d+\.\d+)", .Template = "usage amount of {0}", .Precision = 2}}

    Dim formulaPattern = New PatternType With {.Pattern = "Usage \/ \(Demand \* Service hours\) \* (-?\d+\.?\d*) = (-?\d+\.?\d*) kWh \/ \((-?\d+\.?\d*) kW \* (-?\d+) Hours\)", .Template = "Usage / (Demand * Service hours) * {0} = {1} kWh / ({2} kW * {3} Hours)"}
    Dim stdDeviation = New PatternType With {.Pattern = "standard deviation(\s-?\d\s\*)?\s(-?\d+\.\d+)", .Template = "standard deviation {0}{1}", .Precision = 0}

    For Each pattern As PatternType In patterns
        result = ProcessPattern(result, pattern)
    Next

    result = ProcessFormulaPattern(result, formulaPattern)
    Return ProcessstdDeviationPattern(result, stdDeviation)
End Function

Private Function ProcessstdDeviationPattern(inputText As String, pattern As PatternType) As String
    Dim r = New System.Text.RegularExpressions.Regex(pattern.Pattern)
    Dim match = r.Match(inputText)
    Dim inputToRoundedDict = New System.Collections.Generic.Dictionary(Of String, String)()

    While match.Success
        Dim inputSnippet = match.Groups(0).ToString()
        inputSnippet = System.Text.RegularExpressions.Regex.Replace(inputSnippet, "\*", "\*")

        If Not inputToRoundedDict.ContainsKey(inputSnippet) Then
            Dim parsedDouble = Double.Parse(match.Groups(2).ToString())
            Dim roundedDouble = Math.Round(parsedDouble, pattern.Precision)
            Dim roundedSnippet = String.Format(pattern.Template, {match.Groups(1).ToString(), roundedDouble})
            inputToRoundedDict.Add(inputSnippet, roundedSnippet)
        End If

        match = match.NextMatch()
    End While

    Dim result As String = inputText

    For Each kvp As System.Collections.Generic.KeyValuePair(Of String, String) In inputToRoundedDict
        result = System.Text.RegularExpressions.Regex.Replace(result, kvp.Key, kvp.Value)
    Next

    Return result

End Function

Private Function ProcessFormulaPattern(inputText As String, pattern As PatternType) As String
    Dim r = New System.Text.RegularExpressions.Regex(pattern.Pattern)
    Dim match = r.Match(inputText)
    Dim inputToRoundedDict = New System.Collections.Generic.Dictionary(Of String, String)()

    While match.Success
        Dim inputSnippet = match.Groups(0).ToString()
        inputSnippet = System.Text.RegularExpressions.Regex.Replace(inputSnippet, "\*", "\*")
        inputSnippet = System.Text.RegularExpressions.Regex.Replace(inputSnippet, "\(", "\(")
        inputSnippet = System.Text.RegularExpressions.Regex.Replace(inputSnippet, "\)", "\)")
        inputSnippet = System.Text.RegularExpressions.Regex.Replace(inputSnippet, "\/", "\/")

        If Not inputToRoundedDict.ContainsKey(inputSnippet) Then
            Dim parsedUsage = Double.Parse(match.Groups(2).ToString())
            Dim parsedDemand = Double.Parse(match.Groups(3).ToString())
            Dim roundedUsage = Math.Round(parsedUsage, 2)
            Dim roundedDemand = Math.Round(parsedDemand, 0)
            Dim roundedSnippet = String.Format(pattern.Template, {match.Groups(1).ToString(), roundedUsage, roundedDemand, match.Groups(4).ToString()})

            inputToRoundedDict.Add(inputSnippet, roundedSnippet)
        End If

        match = match.NextMatch()
    End While

    Dim result As String = inputText

    For Each kvp As System.Collections.Generic.KeyValuePair(Of String, String) In inputToRoundedDict
        result = System.Text.RegularExpressions.Regex.Replace(result, kvp.Key, kvp.Value)
    Next

    Return result

End Function

Class PatternType
    Public Pattern As String
    Public Template As String
    Public Precision As Integer
End Class

Private Function ProcessPattern(inputText As String, pattern As PatternType) As String
    Dim r = New System.Text.RegularExpressions.Regex(pattern.Pattern)
    Dim match = r.Match(inputText)
    Dim inputToRoundedDict = New System.Collections.Generic.Dictionary(Of String, String)()

    While match.Success
        Dim inputSnippet = match.Groups(0).ToString()

        If Not inputToRoundedDict.ContainsKey(inputSnippet) Then
            Dim parsedDouble = Double.Parse(match.Groups(1).ToString())
            Dim roundedDouble = Math.Round(parsedDouble, pattern.Precision)
            Dim roundedSnippet = String.Format(pattern.Template, roundedDouble)
            inputToRoundedDict.Add(inputSnippet, roundedSnippet)
        End If

        match = match.NextMatch()
    End While

    Dim result As String = inputText

    For Each kvp As System.Collections.Generic.KeyValuePair(Of String, String) In inputToRoundedDict
        result = System.Text.RegularExpressions.Regex.Replace(result, kvp.Key, kvp.Value)
    Next

    Return result

End Function
可能问题是因为我在代码中使用了类。虽然我还没有在互联网上的SSRS中发现VB的任何限制


只有在SSR上查看报告时,代码才起作用的原因是什么?我以前在这份报告中有舍入代码,它起作用了。但是在我的更新之后,它只在一个地方起作用。

您的VB代码很可能使用了服务器上未启用的权限。要实现这一点,您必须深入了解服务器设置,并准确确定涉及哪些权限。根据我的经验,这很难实施和维护


另一种方法是将此代码转换为数据库中的存储过程。这样,当您部署报表时,它将继续工作

原因如配置中所示。ssrs服务器url在web.config中配置,当我的代码版本部署到QAenv时,web.config中的ssrs服务器链接被设置到Stagingenv,其中报告代码未更新

为什么在基础报告查询中将数字四舍五入为文本而不是四舍五入?