在SSRS 2012中查找计算字段的中位数

时间:2014-03-14 20:28:37

标签: reporting-services median

我有一个开始日期和结束日期,我正在计算两者之间的工作日:

  1. 我创建了一个名为CountWeekDays的计算字段,它等于: Code.getBusinessDaysCount(字段!date_created.Value,字段!date_closed.Value)

  2. 我可以得到这样的平均值:= Avg(Fields!CountWeekDays.Value)

  3. 但是,我无法以同样的方式获得中位数。我怎样才能得到计算出来的中位数?

    我用来获取工作日计数的代码如下:

    Function getBusinessDaysCount(ByVal tFrom As Date, ByVal tTo As Date) As Integer
        Dim tCount As Integer
        Dim tProcessDate As Date = tFrom
        For x as Integer= 1 To DateDiff(DateInterval.Day, tFrom, tTo) + 1
          If Not (tProcessDate.DayOfWeek = DayOfWeek.Saturday Or tProcessDate.DayOfWeek = DayOfWeek.Sunday) Then
            tCount = tCount + 1
          End If
          tProcessDate = DateAdd(DateInterval.Day, 1, tProcessDate)
        Next
        Return tCount
    End Function
    

1 个答案:

答案 0 :(得分:0)

我找到了中位数“

的代码
'MEDIAN code
'code from http://stackoverflow.com/questions/1943437/mean-median-mode-in-sql-server-reporting-services

Dim values As New System.Collections.Generic.List(Of Integer)
Dim valueCounts As New System.Collections.Generic.Dictionary(Of Integer, Integer)

Function AddValue(newValue As Integer) As Integer
values.Add(newValue)
AddValue = newValue
If Not valueCounts.ContainsKey(newValue) Then
    valueCounts.item(newValue) = 1
Else
    valueCounts.item(newValue) += 1
End If
End Function

Function GetMedian() As Double
Dim count As Integer = values.Count
If count = 0 Then
    Return 0
Else
    values.Sort()
    If count Mod 2 = 1 Then
        Return values(CInt((count / 2) - 0.5))
    Else
        Dim index1 As Integer = count \ 2
        Dim index2 As Integer = index1 - 1

        Dim value1, value2 As Integer
        value1 = values(index1)
        value2 = values(index2)

        Return (value1 + value2) / 2
    End If
End If
End Function