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 意外值.将初始值设置为您知道不会产生的值。
它应该产生:
如果有帮助请告诉我。
是否可以使用 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 意外值.将初始值设置为您知道不会产生的值。
它应该产生:
如果有帮助请告诉我。