计算SSRS的中位数

时间:2019-05-07 13:59:01

标签: reporting-services ssrs-2012 median reportbuilder3.0

我们需要能够计算出一组统计数字的中位数,以得到统计回报,尤其是在某个日期范围内每份合同的已回答数字中位数。

数据存储在共享数据集中以在报表生成器中使用,并且此共享数据集使用了许多合同报表,因此无法进行更新。正在使用的共享数据集可确保合同报告之间的一致性,因此必须使用。

已经有对此的答案(例如Find the median of a calculated field in SSRS 2012Use of 'median' function in calculated field in SSRS),但是这些答案需要隐藏的行/列或使用图形中的计算字段。

我们需要一个答案,使我们能够使用共享数据集/存储过程并在SSRS / Report Builder中计算中位数。

1 个答案:

答案 0 :(得分:2)

此自定义代码可以添加到报告中:

Public Shared Function Median(ByVal items As Object()) As Decimal
    If items Is Nothing Then
        Return Nothing
    End If

    Dim counter As Integer = items.Length
    If counter = 0 Then
        Return 0
    End If

    System.Array.Sort(items)

    If counter Mod 2 = 1 Then
        Return items(CInt((counter / 2) - 0.5))
    Else
        Dim FirstIndex As Integer = counter \ 2
        Dim SecondIndex As Integer = FirstIndex - 1

        Dim FirstValue As Integer = items(FirstIndex)
        Dim SecondValue As Integer = items(SecondIndex)

        Return (FirstValue + SecondValue) / 2
    End If
End Function

然后可以使用以下=Code.Median(Lookupset(Fields!Contract.Value, Fields!Contract.Value, Fields!Answered.Value, "DS_CallData_LKP"))

来调用

在此示例中,数据集“ DS_CallData_LKP”为整个报表提供了动力,但再次被引用以获取要为中位数排序的值的列表。使用lookupset()代替经常看到的隐藏行/列方法,可以使报表易于编辑,以便以后进行编辑。