如何从ssrs获得平均查找值?

时间:2015-10-22 23:02:42

标签: reporting-services ssrs-expression

=Lookup(dsc.Value,Dsc.value,Fields!Fmotion.Value,"Stage")

我想获得该查找值的平均值。如何编写一个显示该查找值平均值的表达式?

3 个答案:

答案 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)

除了提供的解决方案。

要使用自定义功能,首先需要将代码添加到报告中。您可以通过以下方式执行此操作:

  1. 在“设计”视图中,右键单击报表边框外的设计图面,然后单击“报表属性”。
  2. 点击代码。
  3. 在自定义代码中,键入代码。报表运行时,代码中的错误会产生警告。
  4. 更多详情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"))