SQL 服务器报告:如何根据同一列中先前计算的值计算值?

SQL Server Reporting: How calculate value based on the previous calculated value int the same column?

我正在尝试根据报表表达式中同一列中的前一行值来计算行值。我无法从数据库中预先计算这个,因为计算的起点取决于输入参数,table 中的值应该在报告本身内动态重新计算。

在Excel类比数据和公式如下所示(起点始终为100):

   B      C             D            E
   Price  PreviousPrice CalcValue    Formula
1  NULL   NULL          100 
2  2.6    2.5           104          B2/C2*D1
3  2.55   2.6           102          B3/C3*D2
4  2.6    2.55          104          B4/C4*D3
5  2.625  2.6           105          B5/C5*D4
6  2.65   2.625         106          B6/C6*D5
7  2.675  2.65          107          B7/C7*D6

我尝试计算预期值("CalcValue" 是设置表达式的列的名称),如下所示:

=Fields!Price.Value/ PreviousPrice.Value * Previous(reportitems("CalcValue").Value))

但是出现错误"Aggregate functions can be used only on report items contained in page headers and footers"

能否请您告知我的情况是否可以达到预期结果并提出解决方案?

提前致谢!

遗憾的是我仍然面临问题:计算列不考虑以前的计算值。例如,我添加了默认值为 100 的 CalcVal 字段,并尝试使用上述方法进行计算,例如:=previous(runningValue(Fields!CalcVal.Value, sum, "DataSet1") ) * Fields!Price.Value/Fields!PreviousPrice.Value.

但在这种情况下,它总是将 Fields!Price.Value/Fields!PreviousPrice.Value 乘以 100.. 例如 CalcVal on Fly 总是显示 200 =previous(runningValue(Fields!CalcVal.Value, sum, "DataSet1")) * 2

https://imgur.com/Wtg3Wsg

我试过你的示例数据,这是我如何获得结果的

要使用的公式,您可能需要处理空值

  =Fields!Price.Value/(Fields!PreviousPrice.Value*Previous(Fields!CalcValue.Value))

编辑:在 Op 发表评论后更新回答

CalcValue 使用以下公式计算,即即时计算

=RunningValue(CountDistinct("Tablix6"),Count,"Tablix6"*100

然后最终值如下

=Fields!Price.Value/(Fields!PreviousPrice.Value*
Previous(RunningValue(CountDistinct("Tablix6"),Count,"Tablix6"))*100)