我们需要能够计算出一组统计数字的中位数,以得到统计回报,尤其是在某个日期范围内每份合同的已回答数字中位数。
数据存储在共享数据集中以在报表生成器中使用,并且此共享数据集使用了许多合同报表,因此无法进行更新。正在使用的共享数据集可确保合同报告之间的一致性,因此必须使用。
已经有对此的答案(例如Find the median of a calculated field in SSRS 2012和Use of 'median' function in calculated field in SSRS),但是这些答案需要隐藏的行/列或使用图形中的计算字段。
我们需要一个答案,使我们能够使用共享数据集/存储过程并在SSRS / Report Builder中计算中位数。
答案 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()
代替经常看到的隐藏行/列方法,可以使报表易于编辑,以便以后进行编辑。