点击此处---> 群内免费提供SAP练习系统(在群公告中)
加入QQ群:457200227(SAP S4 HANA技术交流) 群内免费提供SAP练习系统(在群公告中)
您好,
我正面临一个场景,其中当行号不等于1时,我需要在"数量"列中覆盖该值。
公式将为:如果行号不等于1,则数量-数量。数量将为前一行的值。我使用了前一行的值函数,但没有运气。请帮助我。
ifthenelse(Query_2.ROW_NO = 1,Query_2.Quantity,previous_row_value(Query_2.Quantity)-Query_2.MENGE)
预期的回答是147-10,即137。
(12.1 kB)
好的。 让我们将问题分为两部分。
1)您是否同意,如果工作表中还有另一列称为cumulative_sum的列,即所有先前MENGE值加上当前值的总和,那么问题会很简单吗? p>
注意:
G2 = E2
G3 = E2 + E3
G4 = E4
G5 = E4 + E5
G6 = E6
G7 = E6 + E7
G8 = E6 + E7 + E8
G9 = E6 + E7 + E8 + E9
然后,QUANTITY就是LBKUM-CUMULATIVE_SUM(MENGE)。 由于ROW_NO = 1的CUMULATIVE_SUM(MENGE)是MENGE本身,因此不再需要ifthenelse,因此将其隐式应用。
2)如何创建cumulative_sum?
这 我已经在这里(和子页面)记录了一些时间。 您可以从中间开始阅读,因为前半部分只是推理以及如何创建ROW_NO列。
https://wiki.scn.sap.com/wiki/display/EIM/Cumulative+Sum
您的Query_cartesian_product中的where子句将是 p>
更好吗?
PS:它不是使用Row_Gen创建笛卡尔乘积,而是使用自连接,从而为您提供相同的结果 而且效率更高。 抱歉,建议Row_Gen时忘记了该选项。
您好Werner,
感谢u:)
previous_row_value()函数的确会记住该函数先前执行的值。 通过在ifthenelse()中调用它,不会为ROW_NO = 1执行该函数,因此在ROW_NO = 2中具有值。
我从没考虑过这种情况,因此不确定。 但这提供了无数的可能性。
解决方案很简单:在Query_2(此查询的输入)中,添加带有映射previous_row_value(Quantity)的列PREV_Quantity。 现在,该函数将针对每一行执行。
对不起 解释不正确。请找到下图。
它是笛卡尔积。 让我们看一下LBKUM = 5的最后四行。
数量的值可以通过
换句话说,计算总和(MENGE),其中ROW_NUM <= current_ROW_NUM。 所需的结果是LBKUM-SUM(MENGE)。
我将Query2的输出与另一个Query3连接。 该Query3使用ROW_GENERATION转换和联接条件Query3.ROW_NO> = Row_Gen.Generated_Key进行第二次输入。 这将创建其他行。 例如,对于ROW_NO = 3的输入行,它将另外输出ROW_NO = 1和2的行。
此查询的输出进入另一个查询(Query_Agg),您在其中计算每个MATNR,WERKS,LBKUM列名称为SUM_MENGE的sum(MENGE)。
现在将Query_Agg与 基于相同的三个键的Query2,您具有LBKUM和sum(MENGE)。 因此,QUANTITY = Query2.LBKUM-Query_Agg.SUM_MENGE。
感谢Werner。能否请您在此说明考虑行生成以及行生成中要提供的值。
由于数据服务非常快,因此可以使用任何很高的数字。 1000? 10'000?
一周热门 更多>