供应链管理
引言
全球化和外包是供应链日益复杂的主要驱动因素。同时,自然灾害以及经济、社会和道德方面也促使人们更加重视对整个供应链的全面概览和理解,而不仅仅局限于直接供应商和分销商。
为了更好地建模和理解供应链,越来越多的资料将现代供应链称为供应网络。因此,这看起来是一个绝佳的环境,可以探讨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
此页面有帮助吗?