BODS中的上一行值

2020-09-01 22:39发布

         点击此处--->   EasySAP.com群内免费提供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)

         点击此处--->   EasySAP.com群内免费提供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)
付费偷看设置
发送
8条回答
ZJXianG
1楼 · 2020-09-01 23:02.采纳回答

好的。 让我们将问题分为两部分。

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子句将是

 Query_previous.MATNR = Query_current.MATNR和
 Query_previous.WERK = Query_current.WERK和
 Query_previous.LBKUM = Query_current.LBKUM和
 Query_previous.ROW_NO <= Query_current.ROW_NO 

更好吗?

PS:它不是使用Row_Gen创建笛卡尔乘积,而是使用自连接,从而为您提供相同的结果 而且效率更高。 抱歉,建议Row_Gen时忘记了该选项。

SAP浪
2楼-- · 2020-09-01 23:05

您好Werner,

感谢u:)

路亽曱_Ryan
3楼-- · 2020-09-01 22:41

previous_row_value()函数的确会记住该函数先前执行的值。 通过在ifthenelse()中调用它,不会为ROW_NO = 1执行该函数,因此在ROW_NO = 2中具有值

我从没考虑过这种情况,因此不确定。 但这提供了无数的可能性。

解决方案很简单:在Query_2(此查询的输入)中,添加带有映射previous_row_value(Quantity)的列PREV_Quantity。 现在,该函数将针对每一行执行。

 ifthenelse(Query_2.ROW_NO = 1,Query_2.Quantity,Query_2.PREV_Quantity-Query_2.MENGE)
zhangjiyang1323
4楼-- · 2020-09-01 22:47

对不起 解释不正确。请找到下图。

派大星 ヾ
5楼-- · 2020-09-01 22:53

它是笛卡尔积。 让我们看一下LBKUM = 5的最后四行。

数量的值可以通过

  1. 5-3 = 2
  2. 来计算。 5-3-1 = 1
  3. 5-3-1-1 = 0
  4. 5-3-1-1-2 = -2

换句话说,计算总和(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。

蓋茨
6楼-- · 2020-09-01 22:51

感谢Werner。能否请您在此说明考虑行生成以​​及行生成中要提供的值。

歪着头看世界
7楼-- · 2020-09-01 22:42
< p> Row_Gen应该从1开始创建行。...ROW_NO列将具有的最高值。

由于数据服务非常快,因此可以使用任何很高的数字。 1000? 10'000?

一周热门 更多>