如何从 ssrs 获取查找值的平均值?
how do I get the average of lookup value from ssrs?
=Lookup(dsc.Value,Dsc.value,Fields!Fmotion.Value,"Stage")
我想获取该查找值的平均值。我如何编写一个表达式来显示该查找值的平均值?
Lookup(x,x,x,x) 仅 return 单个值;它找到的数据集中的第一个匹配项和单个值的平均值显然是该值。如果您想要所有符合查找条件的值的平均值,请使用 LookupSet 函数来 return 多个值。然后,您可以使用代码隐藏功能嵌入 VB 代码和 return 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") )
除了提供的解决方案。
要使用自定义函数,您首先需要将代码添加到报告中。您可以通过以下方式进行:
- 在设计视图中,right-click 报表边框外的设计图面,然后单击报表属性。
- 点击代码。
- 在自定义代码中,键入代码。当报告运行时,代码中的错误会产生警告。
更多详情here。
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"))
=Lookup(dsc.Value,Dsc.value,Fields!Fmotion.Value,"Stage")
我想获取该查找值的平均值。我如何编写一个表达式来显示该查找值的平均值?
Lookup(x,x,x,x) 仅 return 单个值;它找到的数据集中的第一个匹配项和单个值的平均值显然是该值。如果您想要所有符合查找条件的值的平均值,请使用 LookupSet 函数来 return 多个值。然后,您可以使用代码隐藏功能嵌入 VB 代码和 return 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") )
除了提供的解决方案。
要使用自定义函数,您首先需要将代码添加到报告中。您可以通过以下方式进行:
- 在设计视图中,right-click 报表边框外的设计图面,然后单击报表属性。
- 点击代码。
- 在自定义代码中,键入代码。当报告运行时,代码中的错误会产生警告。
更多详情here。
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"))