当前位置:网站首页>Sequence diagram data modeling and industrial chain analysis

Sequence diagram data modeling and industrial chain analysis

2022-07-04 16:39:00 Ma Chao's blog

Use chart data to analyze time series data of industrial chain
  • Design of data model
  • Function and process function introduction
  • Complete implementation - Build company and product sequence diagram data
  • Query case - analysis ' Consumer goods trading ' industry 2020Q2 Total quarterly revenue
  • Other information

Design of data model

industry 、 product 、 Company related industrial chain data modeling , Include product level maps 、 Industry stratification map 、 Upstream and downstream map of the industrial chain 、 Company and product atlas . The following is mainly the implementation scheme of sequence diagram data modeling of company and product revenue .

Function and process function introduction

  • HTTP request
RETURN olab.http.post('api-address','input')
  • Reset MAP- Remove incoming KEY
RETURN olab.reset.map({map},{keys}) AS value
  • Generate JSON-STRING
RETURN olab.convert.json({object})

Complete implementation - Build company and product sequence diagram data

  • In the following implementation, the timing data related to revenue is used JSON The format data modeling is stored in the attributes of the relationship

The following implementation integrates GraphQL-API、olab-apoc Components 、 Access database and other operations , The constructed graph data finally stores the timing data in a JSON Array .

CALL apoc.periodic.iterate('CALL apoc.load.jdbc(\'jdbc:mysql://contentdb.crkldnwly6ki.rds.cn-north-1.amazonaws.com.cn:3306/database?user=datalab_dev&password=datalabgogo&useUnicode=true&characterEncoding=utf8&serverTimezone=UTC\', 
\'SELECT calc.company_id AS fromCompanyId,pro.`name` AS `to`,CONVERT(DATE_FORMAT(calc.report_date,\\\'%Y%m%d%H%i%S\\\'),UNSIGNED INTEGER) 
AS report_date,income,profit,product_income,product_income_ratio,product_profit,product_profit_ratio,\\\'id\\\' AS uniqueField,calc.id AS uniqueFieldID,\\\'chinascope_supply_chain.fin_secu_sam_product_calc\\\' AS jsDataApi FROM fin_secu_sam_product_calc calc RIGHT JOIN dict_product_rs pro ON calc.product_code=pro.`code` WHERE calc.update_time>=DATE_SUB(NOW(),INTERVAL 1 DAY)\')',
'WITH REPLACE(\'{"query": "{  horgByName(sourceCode: \\\\\\"company-id\\\\\\", sourceFlag: \\\\\\"chinascope\\\\\\") {    name    hcode  }}","variables": null}\',\'company-id\',row.fromCompanyId) AS query,row WITH apoc.convert.fromJsonMap(olab.http.post(\'http://ip/ongdb/graphql\',query)) 
AS result,row WHERE result IS NOT NULL WITH result.data.horgByName[0].hcode AS fromHcode,result.data.horgByName[0].name AS fromName,row WHERE fromHcode IS NOT NULL WITH fromHcode,fromName,row.to AS toName,row 
WITH fromHcode,fromName,\'HPRDCLS\'+apoc.util.md5([toName]) AS toHcode,row MERGE (from:HORGProductCalc {hcode:fromHcode}) SET from.name=fromName,from:HORG WITH from,toHcode,row MATCH (to: industry  {hcode:toHcode}) 
WITH from,to,row WHERE from<>to WITH from,to,olab.reset.map(row,[\'fromCompanyId\',\'to\']) AS row OPTIONAL MATCH (from)-[r]->(to) WITH from,to,row,apoc.coll.union(apoc.convert.fromJsonList(r.detail),[row]) AS detail 
WITH from,to,row,olab.convert.json(detail) AS detail,SIZE(detail) AS detail_size MERGE (from)-[r: product ]->(to) SET r.detail=detail,r.detail_size=detail_size', {parallel:false,batchSize:100}) 
YIELD batches,total,timeTaken,committedOperations,failedOperations,failedBatches,retries,errorMessages,batch,operations RETURN batches,total,timeTaken,committedOperations,failedOperations,failedBatches,retries,errorMessages,batch,operations;

Query case - analysis ’ Consumer goods trading ’ industry 2020Q2 Total quarterly revenue

  • Inquire about ’ Consumer goods trading ’ All relevant products in the sub category of the industry

During data modeling, products are related to industries , Therefore, when used here, you can directly get , Pay attention to all the products of the sub industry of a certain industry .

# Expand PATH The way MATCH (indus: industry ) WHERE indus.name=' Consumer goods trading ' WITH indusCALL apoc.path.expandConfig(indus,{maxLevel:3, relationshipFilter:'NEXT>|<BELONG_TO', labelFilter:'+ industry |/ product ', bfs:false, filterStartNode:true,uniqueness:'NODE_GOLBEL', limit:-1}) YIELD pathWITHpathRETURNpath

#  Expand NODE The way 
MATCH (indus: industry ) WHERE indus.name=' Consumer goods trading ' WITH indus
CALL apoc.path.subgraphNodes(indus,{maxLevel:3, relationshipFilter:'NEXT>|<BELONG_TO', 
labelFilter:'+ industry |/ product ', bfs:false, filterStartNode:true,uniqueness:'NODE_GOLBEL', limit:-1}) 
YIELD node WITH node
RETURN node

Schematic diagram of industry and product association structure

  • ' Consumer goods trading ’ Industry related products 【 Correlation refers to the division of subordination , Here are the industry related products within the three levels of subordinates 】2020Q2 Revenue analysis 【 The case realizes the total revenue 】
MATCH (indus: industry ) WHERE indus.name=' Consumer goods trading ' WITH indus
CALL apoc.path.subgraphNodes(indus,{maxLevel:3, relationshipFilter:'NEXT>|<BELONG_TO', 
labelFilter:'+ industry |/ product ', bfs:false, filterStartNode:true,uniqueness:'NODE_GOLBEL', limit:-1}) YIELD node WITH node
MATCH p=(node)<-[r: product ]-(:HORGProductCalc) WITH apoc.convert.fromJsonList(r.detail) AS detail
UNWIND detail AS map
WITH map WHERE TOINTEGER(map.report_date)>=20200331000000 AND TOINTEGER(map.report_date)<=20200630000000
WITH TOINTEGER(map.income) AS income
RETURN SUM(income)
#  The total revenue is twotrillion 
╒═════════════╕
│"SUM(income)"│
╞═════════════╡
│2215100453627│
└─────────────┘
  • Sample diagram structure of products and companies .

Other information

  • olab-apoc Components
https://github.com/ongdb-contrib/ongdb-lab-apoc
  • apoc Components 【Neo4j Official open source components 】
https://github.com/neo4j-contrib/neo4j-apoc-procedures
原网站

版权声明
本文为[Ma Chao's blog]所创,转载请带上原文链接,感谢
https://yzsam.com/2022/185/202207041452570995.html