计算 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 方法有助于使报告在以后的编辑中保持简单。
我们需要能够计算一组数字的中值以进行统计 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 方法有助于使报告在以后的编辑中保持简单。