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
我试过你的示例数据,这是我如何获得结果的
要使用的公式,您可能需要处理空值
=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)
我正在尝试根据报表表达式中同一列中的前一行值来计算行值。我无法从数据库中预先计算这个,因为计算的起点取决于输入参数,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
我试过你的示例数据,这是我如何获得结果的
要使用的公式,您可能需要处理空值
=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)