计算 SSRS 中的中位数

Calculate a Median in SSRS

我们需要能够计算一组数字的中值以进行统计 return - 特别是在某个日期范围内每份合同的中值答复数字。

数据存储在共享数据集中以供在 Report Builder 中使用,并且此共享数据集用于许多合同报告,因此无法更新它。正在使用的共享数据集确保合同报告之间的一致性,因此必须使用。

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

我们需要一个允许我们使用共享 datasets/stored 程序并在 SSRS/Report Builder 中计算中值的答案。

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

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() 而不是经常看到的隐藏 rows/columns 方法有助于使报告在以后的编辑中保持简单。