=Lookup(dsc.Value,Dsc.value,Fields!Fmotion.Value,"Stage")
我想获得该查找值的平均值。如何编写一个显示该查找值平均值的表达式?
答案 0 :(得分:2)
查找(x,x,x,x)仅返回单个值;它找到的数据集中的第一个匹配项,单个值的平均值显然是该值。如果要获得与查找条件匹配的所有值的平均值,请使用LookupSet函数返回多个值。然后你可以使用代码隐藏功能嵌入VB代码并返回LookupSet的平均值:
Function AvgLookup(ByVal items As Object()) As Decimal
If items Is Nothing Then
Return Nothing
End If
Dim suma As Decimal = 0
Dim avga As Decimal = 0
Dim counta As Integer = 0
For Each item As Object In items
If Not item Is Nothing Then
counta += 1
suma += Convert.ToDecimal(item)
End If
Next
If counta > 0 Then
avga = suma / counta
Else
avga = 0
End If
Return avga
End Function
您在报告中的表达式中调用,如:
=Code.AvgLookup( Lookupset(dsc.Value,Dsc.value,Fields!Fmotion.Value,"Stage") )
答案 1 :(得分:0)
除了提供的解决方案。
要使用自定义功能,首先需要将代码添加到报告中。您可以通过以下方式执行此操作:
更多详情here。
答案 2 :(得分:0)
Daniel的回答完全解决了这个问题,对我也非常有帮助。我想补充AvgLookup之外的两个其他功能,它们通常是相关的,将来可能会对其他人有所帮助。
其中之一是SumLookup,由another question中的其他人提供。另一个是StDevLookup,即LookupSet的标准偏差。我在Stack Overflow或其他任何地方都找不到它,所以我写了我自己的函数,该函数使用Daniel的回答中的AvgLookup:
Function StDevLookup(ByVal items As Object()) As Decimal
If items Is Nothing Then Return Nothing
Dim stdeva As Decimal = New Decimal()
Dim avga As Decimal = New Decimal()
Dim suma As Decimal = New Decimal()
Dim ct As Integer = New Integer()
Dim variancea As Decimal = New Decimal()
avga = 0
suma = 0
ct = 0
variancea = 0
avga = AvgLookup(items)
For Each item As Object In items
suma += (item - avga)^2
ct += 1
Next
variancea = suma / ct
stdeva = Sqrt(variancea)
Return stdeva
End Function
您也这样称呼:
=Code.StDevLookup(LookupSet("RouteExample", Fields!Route.Value, Fields!SomeValueToBeCalculated.Value, "MyDataset"))