供应链管理
简介
全球化和外包是导致供应链复杂性增加的主要驱动力。同时,自然灾害以及经济、社会和伦理方面也推动了对整个供应链有良好概述和理解的重要性,而不仅仅关注您的直接供应商和分销商。
为了更好地建模和理解供应链,越来越多的资源将现代供应链称为供应网络。因此,这似乎是一个完美的环境,可以找出 Neo4j 如何帮助我们应对供应链网络挑战。
初始数据模型
为简单起见,每个节点都具有以下相同的属性,lat
= 纬度,lon
= 经度。
我们将供应商分为RawSupplierA
和 SupplierA
用于新鲜产品,以及RawSupplierB
和 SupplierB
用于耐用品。其余部分很简单。分销通过批发商和零售商进行。
供应链本质上是复杂的,可以通过多种不同的方式进行建模和聚类。为了便于理解,我们将保持简单,并忽略许多在现实世界应用中必不可少的事项。
案例:查找最佳批发商
让我们从一个传统的运输问题开始:查找累积到每个零售商的距离最短的批发商。感谢 Cypher,这可以非常轻松地完成。
MATCH (p:Product)-[r1]->(w)-[r2]->(re:Retailer)
WITH distinct(substring(w.name, 10)) AS Num,
toInteger(avg(r1.km + r2.km)) AS Average_Distance,
toInteger(sum(r1.km + r2.km)) AS Total_Distance
RETURN "Wholesaler" + Num AS Wholesaler, Total_Distance, Average_Distance
ORDER BY Total_Distance
案例:我们想要新鲜的
假设我们要保证饮料中所有新鲜成分的保质期不超过七天。
MATCH chain=(rs:RawSupplierA)-[*]->(re:Retailer)
WITH reduce(wait = 0, s IN nodes(chain)| wait + s.time) AS waitTime, chain
WHERE waitTime < 8
WITH [n IN nodes(chain)| n.name] AS SupplyChain, waitTime
ORDER BY SupplyChain[1]
RETURN SupplyChain, waitTime
LIMIT 10
提示:几乎所有值都基于随机值生成。如果表为空,只需重新加载图即可。
案例:是时候把它们放在一起了
假设:我们不仅想要新鲜的产品。此外,我们希望它是本地的。因此,我们要确保我们的产品需要不到 8 天的时间,并且从农民到杂货店的货架的运输距离不到 23000 公里。
MATCH chain=(rs:RawSupplierA)-[*]->(re:Retailer)
WITH reduce(wait = 0, s IN nodes(chain)| wait + s.time) AS waitTime, chain
WHERE waitTime < 8
WITH reduce(dist = 0, s IN relationships(chain)| dist + s.km) AS distance, waitTime, chain
WHERE distance < 23000
WITH [n IN nodes(chain)| n.name] AS SupplyChain
RETURN collect(distinct(SupplyChain[1])) AS Supplier, collect(distinct(SupplyChain[0])) AS RawSupplier
LIMIT 10
在这里,我们想知道哪些 RawSupplier 和 Supplier 可以保证这一承诺。当然,为了履行本地化的承诺,我们将不得不指定网络中的精确路径。
案例:在供应链网络中查找顶级“样本”供应链
我们将“样本”供应链定义为在供应链中每个处理步骤都有一个参与者。“顶级”简单地意味着找到评分最高的链。请记住,我们隔离并对每个“样本”供应链进行评分,并且不会一次评估整个供应链。我们根据成本、时间和浪费比较每条可能的供应链。比较基于加权分数。
总分 = (成本 60%) + (浪费 20%) + (时间 20%)
总分可用作 KPI,并简化复杂决策和不同性质值的快速比较。此外,这对于检查供应链的其他成员并将其测量结果作为改进这些成员或监控整个供应链的切实目标非常有用。如果我们想要减少我们的(原始)供应商数量并只保留表现最佳的供应商,总分也会派上用场。
MATCH supplier_chainA=(p:Product)<--(:SupplierA)<--(rsA:RawSupplierA)
MATCH supplier_chainB=(rsB:RawSupplierB)-->(:SupplierB)-->(p)
MATCH retailer_chain=(p)-->(:Wholesaler)-->(re:Retailer)
RETURN
round(reduce(wait = 0, s IN nodes(supplier_chainA)| wait + 2*s.timeR/10 + 6*s.costR/10 + 2*s.wasteR/10) +
reduce(wait = 0, s IN nodes(supplier_chainB)| wait + 2*s.timeR/10 + 6*s.costR/10 + 2*s.wasteR/10) +
reduce(wait = 0, s IN nodes(retailer_chain)| wait + 2*s.timeR/10 + 6*s.costR/10 + 2*s.wasteR/10)) as totalScore,
[n IN nodes(supplier_chainA)| n.name] + [n IN nodes(supplier_chainB)| n.name] + [n IN nodes(retailer_chain)| n.name] AS SupplyChain
ORDER BY totalScore ASC
LIMIT 1
结论
-
由于供应链的本质,它本身就是一个图或网络结构,因此图数据库更适合监控、维护和建模供应链问题,例如风险管理、牛鞭效应、运输优化、质量保证……
-
结合 RFID 芯片和云计算,图数据库技术为实时监控和流程改进提供了广泛的应用。
如有想法、批评或疑问,请随时通过 LinkedIn 与我联系:linkedin.com/in/marcuswachsmuth
此页面是否有帮助?