使用层次函数进行递归计算

2020-08-17 15:55发布

         点击此处--->   EasySAP.com群内免费提供SAP练习系统(在群公告中)

加入QQ群:457200227(SAP S4 HANA技术交流) 群内免费提供SAP练习系统(在群公告中)


我正在处理BOM表,我需要计算应用层次结构功能的一棵树结果的任何单个节点的开始日期和到期日期。

我知道根代码的到期日,然后应用节点的特定提前期,计算出开始日期。

对于树的每个后续节点,截止日期将恰好是父节点的开始日期,而开始日期将是截止日期减去该节点的特定引线....依此类推,直到 树的尽头。

是否只有一种调用Hierarchy函数的方法,而没有对结果进行任何其他评估的简单方法?

谢谢

安东尼奥

         点击此处--->   EasySAP.com群内免费提供SAP练习系统(在群公告中)

加入QQ群:457200227(SAP S4 HANA技术交流) 群内免费提供SAP练习系统(在群公告中)


我正在处理BOM表,我需要计算应用层次结构功能的一棵树结果的任何单个节点的开始日期和到期日期。

我知道根代码的到期日,然后应用节点的特定提前期,计算出开始日期。

对于树的每个后续节点,截止日期将恰好是父节点的开始日期,而开始日期将是截止日期减去该节点的特定引线....依此类推,直到 树的尽头。

是否只有一种调用Hierarchy函数的方法,而没有对结果进行任何其他评估的简单方法?

谢谢

安东尼奥

付费偷看设置
发送
2条回答
小c菟菟
1楼-- · 2020-08-17 16:31

以下是示例:

创建列表BOM_TESTH-BOM表头
(FATHER nvarchar(50)
,STARTD DATE-开始日期
,DUED DATE-结束日期
,LT smallint-交货时间
,数量十进制(19,6)-参考数量
);

创建列表BOM_TESTR-BOM行
(FATHER nvarchar(50)
,SON nvarchar(50)
,STARTD DATE
,DUED DATE
,LT smallint
,QTY十进制(19,6)
);

在BOM_TESTH中插入
(FATHER,STARTD,DUED,LT,QTY)
从DUMMY中选择'FATHER01','20200711','20200731',20,1.0;

插入BOM_TESTR中
(FATHER,SON,STARTD,DUED,LT,QTY)
从DUMMY中选择'FATHER01','SON01',null,null,10,1.0;

插入BOM_TESTR中
(FATHER,SON,STARTD,DUED,LT,QTY)
从DUMMY中选择'FATHER01','SON02',null,null,3,1.0;

插入BOM_TESTR中
(父亲,儿子,STARTD,DUED,LT,QTY)
从DUMMY中选择'SON02','SON03',null,null,7、1.0;

插入BOM_TESTR中
(父亲,儿子,STARTD,DUED,LT,QTY)
从DUMMY中选择'SON02','SON04',null,null,3、1.0;

插入BOM_TESTR中
(父亲,儿子,已开始,待办,LT,数量)
从DUMMY中选择" SON04"," SON05",null,null,5、1.0;

我在EXCEL中模拟了BoM结构和日期计算:

足以知道父亲的到期日(7月31日)以获取必须在最后一级儿子上进行的手术(6月30日)的时间。 在Excel中,无论日历工作日如何,我都已在到期日对交货期进行了简单的减去...

应用的HIERARCHY函数是这样的:

选择
-系统信息
archive_rank AS等级
,hierarchy_tree_size AS tree_size
,hierarchy_parent_rank AS parent_rank
,hierarchy_level AS Lvl
,hierarchy_is_cycle AS is_cycle
,hierarchy_is_orphan AS is_orphan
--用户信息
,CAST(parent_id AS varchar(50))AS"父亲"
,CAST(node_id AS varchar(50))AS" Son"
,CAST(StartDate AS日期)AS" StartDate"
,CAST(到期日期AS日期)AS" DueDate"
,CAST(lt AS smallint)AS" LT"
,CAST(数量AS十进制(19,6)) AS"数量"
从层次结构(源(
SELECT CAST(父亲AS varchar(50))AS node_id
,CAST(null AS varchar(50))AS parent_id
,CAST(null AS Date)AS StartDate
,CAST('20200731'AS Date)AS DueDate
,CAST(LT AS smallint)AS lt
,CAST(QTY AS decimal(19,6))AS Qty
从BOM_TESTH

UNION ALL

选择SON作为node_id
,以FATHER AS父ID
,空AS开始日期
,空AS DueDate
,LT AS lt
,QTY AS数量
FROM BOM_TESTR

CACHE FORCE

结果是这样的:

请记住,规则是:

一层的到期日期恰好是上层的开始日期减去交货时间

这是一个相当复杂但有趣的要求。

为什么不提供表定义(CREATE TABLE)和一些测试数据 (INSERT命令),预期结果以及您的计算规则的形式如何?

这样,您可能会找人研究如何做。

一周热门 更多>