SSRS 2008 RunningValue乘法

时间:2016-10-05 22:09:42

标签: reporting-services ssrs-2008 aggregate-functions multiplication

是否可以使用RunningValue函数计算SSRS中的滚动吞吐量产量?如果没有,还有另一种方法吗?

目前我正在使用橙色系列的表达式:

=(RunningValue(((Sum(Fields!StartQty.Value) - Sum(Fields!LossQty.Value)) / Sum(Fields!StartQty.Value)), SUM, "DataSet1"))

由于RunningValue中的SUM聚合而获得此预期结果: SSRS Chart Example

我需要让它显示0.88,0.62,0.62一直到每一步结束,除非它在一个步骤中遇到另一个低的第一次通过率。

因此计算应为0.88 * 0.71 = 0.62

如果它在一个步骤上达到另一个不好的收益率,到最后0.62 * 0.92 = 0.57。

我能找到的最接近的问题是Stack Overflow上类似的另一个问题,但在我的案例中找不到实现它的方法:Function equivalent to SUM() for multiplication in SQL Reporting

修改1

我忘了你不能在SSRS 2008中嵌套聚合,所以我很想知道SSRS 2008和2012 +是否有解决方案

修改2

根据评论中的要求,提供样本数据集:

Sample Data

计算蓝条的简单表达式如下:

=((Sum(Fields!QtyStart.Value) - Sum(Fields!ScrappedQty.Value)) / Sum(Fields!QtyStart.Value))

1 个答案:

答案 0 :(得分:0)

我用一些更简单的数据重新创建了你的场景。对于此requeriment,您可以使用自定义代码逐步获取每个值。

转到Report菜单/ Report properties... / Code标签。在框中使用此VB代码:

Dim prev As Double = - 1.0

Public Function GetYield(ByVal current As Double) As Double

    if prev = -1.0 then
        prev=current
        return prev
    End if      
    if (current*prev) <= prev then
        prev = current*prev
    End if
    return prev

End Function

现在为图表值添加一个额外的表达式。

=Code.GetYield(
  (Sum(Fields!QtyStart.Value) - Sum(Fields!ScrappedQty.Value)) / Sum(Fields!QtyStart.Value)
)

为了实现这一点,您只能在每个报告中调用GetYield函数一次,因为它会在每次调用时更改变量prev,并在运行时在报表中共享其值。

另请注意prev变量用-1初始化以确定第一次调用函数,因此如果最终传递给函数的表达式产生-1,它将返回意外值。将初始值设置为您知道不会生成的值。

它应该产生:

enter image description here

如果有帮助,请告诉我。