是否可以使用RunningValue函数计算SSRS中的滚动吞吐量产量?如果没有,还有另一种方法吗?
目前我正在使用橙色系列的表达式:
=(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))
答案 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,它将返回意外值。将初始值设置为您知道不会生成的值。
它应该产生:
如果有帮助,请告诉我。