SSRS 2008 运行值乘法

SSRS 2008 RunningValue Multiplication

是否可以使用 RunningValue 函数计算 SSRS 中的滚动吞吐量收益率?如果不行,还有别的办法吗?

目前我正在使用 o运行ge 系列的表达式:

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

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

我需要让它一直显示 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

根据评论中的要求,示例数据集:

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

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

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

转到 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,它将 return 意外值.将初始值设置为您知道不会产生的值。

它应该产生:

如果有帮助请告诉我。