SAP ERP 영업 분석 — 원시 SD/MM 통합부터 다차원 집계, 온톨로지까지
SAP ERP 의 SD(판매 유통) · MM(자재 관리) 원시 테이블 5종을 통합·변환해 시계열·고객·자재·지역별 다차원 집계를 만들고 SAP_* 온톨로지로 그래프 탐색까지 한 사이클 통과합니다.
워크숍 목표
다 끝내고 나면 D.Hub 안에서 다음 흐름을 한 사이클 손으로 통과한 셈이 됩니다.
- 시나리오 1개를 포털로 적재해 컬렉션 1종, 데이터셋 21종(원시 5 + 중간 6 + 통합 2 + 집계 8), 코드 노드 18종, 파이프라인 13종, 온톨로지 10엔티티/10관계, 에이전트 1종을 한꺼번에 등록합니다.
- SAP 의 5개 원시 테이블 —
VBAK(수주 헤더),VBAP(수주 라인),KNA1(고객 마스터),MARA(자재 마스터),MAKT(자재 설명) — 을 판매-자재-고객 세 도메인으로 갈라 정제합니다. - 영업 + 자재 + 고객 을 한 row 에 합친 통합 마스터 테이블
tb_sales_master를 만듭니다. - 시계열(연·월·일) · 지역(국가·대륙) · 분류(고객·산업·자재 타입) 7 차원으로 다차원 집계 파이프라인을 병렬 실행합니다.
- 10엔티티 / 10관계의
SAP_*그래프에서 한 고객이 어떤 자재를 어떤 시점에 얼마나 샀나 의 5-홉 경로를 펼쳐 봅니다.
엔터프라이즈 ERP 통합 시나리오 중 가장 데이터셋이 많은 워크숍입니다. 13 파이프라인의 의존 그래프 가 핵심입니다. 권장 소요 시간은 90분.
사전 준비
- D.Hub 포털 접근 가능한 엔지니어 계정 (Editor 권한 이상, 파이프라인 실행 가능)
- 약 3MB 의 zip 한 개를 받을 다운로드 여유 (다른 시나리오의 약 6×)
터미널·Python·dhub2-examples 클론은 필요 없습니다.
1. 시나리오 적재 (10분)
sap.zip 다운로드(2.9 MB)zip 크기가 약 3MB 라 업로드 진행률이 다른 시나리오보다 길게 보일 수 있습니다. 가져오기 다이얼로그가 완료 로 바뀌면 한 컬렉션이 만들어집니다.
manifest.json 순서대로 다음 자산이 올라갑니다.
- 컬렉션 1종 —
sap(alias: SAP ERP 영업 분석) - 데이터셋 21종 — 원시 5 (
tb_sap_vbak,tb_sap_vbap,tb_sap_kna1,tb_sap_mara,tb_sap_makt), 중간 6 (tb_sales_all,tb_sales,tb_customer,tb_mara_info,tb_makt_lang_filter,tb_material), 통합 2 (tb_sales_material,tb_sales_master), 집계 8 (tb_year_info,tb_month_info,tb_date_info,tb_customer_summary,tb_customer_country_summary,tb_customer_continent_summary,tb_industry_summary,tb_material_summary) - 코드 18종 (Python) — 각 변환 단계 +
build_sap_ontology - 파이프라인 13종 — 정제 4 + 통합 1 + 집계 7 + 온톨로지 1
- 온톨로지 — 엔티티 10종(
SAP_Customer,SAP_SalesOrder,SAP_SalesOrderLine,SAP_Country,SAP_Continent,SAP_OrderDate,SAP_OrderMonth,SAP_OrderYear,SAP_MaterialType,SAP_MaterialIndustry), 관계 10종 - 에이전트 —
sap_assistant
적재 완료 후 좌측 트리에 sap 한 컬렉션이 보입니다. 21 데이터셋이 한 컬렉션에 다 들어가는 구조는 ERP 분석의 표준 — 도메인 경계가 모듈 (SD/MM) 단위라 컬렉션을 더 잘게 쪼개기 어렵습니다.
2. 원시 SD/MM 테이블 둘러보기 (10분)
sap 컬렉션에서 원시 5종부터 봅니다.
tb_sap_vbak— 수주 헤더. 컬럼:VBELN(수주 번호),ERDAT(생성일, YYYYMMDD),KUNNR(고객 번호),NETWR(순 금액),WAERK(통화)tb_sap_vbap— 수주 라인. 컬럼:VBELN+POSNR(라인 번호) 복합키,MATNR(자재 번호),KWMENG(수량),NETWR(라인 금액)tb_sap_kna1— 고객 마스터. 컬럼:KUNNR,NAME1(회사명),LAND1(국가 코드),KTOKD(계정 그룹)tb_sap_mara— 자재 마스터. 컬럼:MATNR,MTART(자재 타입),MATKL(자재 그룹/산업),MEINS(기본 단위)tb_sap_makt— 자재 설명. 컬럼:MATNR,SPRAS(언어 키),MAKTX(설명 텍스트)
SAP 네이티브 컬럼명은 4~5자 약어 라 처음에는 낯섭니다. 핵심 키 세 개만 머리에 둡니다 — VBELN (수주), KUNNR (고객), MATNR (자재). 다른 컬럼은 §3 의 정제 코드 노드가 읽기 좋은 이름 으로 바꿔 줍니다.
3. 정제 파이프라인 3종 — 영업·자재·고객 (15분)
sap 컬렉션의 파이프라인 섹션에서 정제 3종을 차례로 실행합니다.
sap_pipeline_join_sales — 노드 2 단계.
join_vbak_vbap—tb_sap_vbak+tb_sap_vbap를VBELN으로 join →tb_sales_all(수주 1라인 = 1행)processing_order_date—ERDAT의YYYYMMDD문자열을tb_sales의order_date(date) +year/month/day파생 컬럼으로 분해
sap_pipeline_join_material — 노드 3 단계.
mapping_mara_info—tb_sap_mara의 약어 컬럼을 읽기 좋은 이름 으로 매핑 →tb_mara_infofiltering_makt_lang—tb_sap_makt의 다국어 행 중 현재 언어 만 남김 →tb_makt_lang_filterjoin_mara_makt— 두 결과를MATNR로 join →tb_material(자재 1행 = 설명 1행)
sap_pipeline_transform_customer — 노드 1 단계.
processing_customer_info—tb_sap_kna1의 회사명 trim, 국가 코드(LAND1) → ISO 매핑 →tb_customer
세 파이프라인을 차례로 Run 합니다. tb_sales, tb_material, tb_customer 세 데이터셋의 미리 보기에서 각각 컬럼이 읽기 좋은 이름 으로 바뀌어 있는지 확인합니다.
4. 통합 마스터 테이블 (10분)
sap_pipeline_unification_total 파이프라인을 엽니다. 노드 2 단계로 세 도메인을 한 row 에 합칩니다.
join_sales_material—tb_sales+tb_material을MATNR로 left join →tb_sales_material(수주 라인 1행 = 자재 정보 합쳐짐)join_customer_sales_material— 그 결과 +tb_customer를KUNNR로 left join →tb_sales_master
tb_sales_master 한 행에는 다음이 모두 들어 있습니다.
- 수주 메타 (
VBELN,order_date,year,month,day) - 라인 메타 (
POSNR,quantity,line_amount) - 자재 메타 (
MATNR,material_type,material_industry,description) - 고객 메타 (
KUNNR,customer_name,country,continent)
비정규화 가 의도된 설계입니다. 집계 파이프라인 7종이 이 한 테이블만 보면 시간·고객·자재·지역 어느 축으로도 group-by 가 가능합니다.
Run 을 눌러 실행. 끝나면 tb_sales_master 미리 보기에서 한 행이 위 네 영역을 다 갖고 있는지 확인합니다.
5. 다차원 집계 파이프라인 7종 (15분)
이번 단계가 ERP 분석의 분석 표면 입니다. 7 파이프라인을 병렬로 실행합니다.
시계열 3종 — tb_sales_master 의 year / month / order_date 별 집계.
sap_pipeline_year_summary→tb_year_info(연도별 매출·라인 수·평균 금액)sap_pipeline_month_summary→tb_month_info(월별)sap_pipeline_date_summary→tb_date_info(일별)
고객·지역 3종 — KUNNR / country / continent 별 집계.
sap_pipeline_customer_summary→tb_customer_summarysap_pipeline_country_summary→tb_customer_country_summarysap_pipeline_continent_summary→tb_customer_continent_summary
분류 2종 — 자재 메타 별 집계.
sap_pipeline_industry_summary→tb_industry_summary(자재 산업별)sap_pipeline_material_type→tb_material_summary(자재 타입별)
각 파이프라인을 차례로 Run 합니다. 끝나면 8개 집계 데이터셋이 모두 행 ≥ 1 인지 확인합니다.
6. 온톨로지 + 그래프 탐색 (15분)
마지막은 그래프 시점입니다. ontology_materialization 파이프라인을 Run 합니다. build_sap_ontology 가 통합 마스터와 8 집계를 batch 모드로 읽어 다음 10 엔티티 + 10 관계를 upsert 모드로 적재합니다.
엔티티 10종:
- 거래 —
SAP_SalesOrder,SAP_SalesOrderLine - 고객 —
SAP_Customer,SAP_Country,SAP_Continent - 시간 —
SAP_OrderDate,SAP_OrderMonth,SAP_OrderYear - 자재 분류 —
SAP_MaterialType,SAP_MaterialIndustry
관계 10종 (주요):
SAP_locatedIn(고객 → 국가),SAP_PartOf(국가 → 대륙)SAP_CUSTOMER_PLACED_ORDER,SAP_ORDER_ON_DATE,SAP_ORDER_HAS_LINESAP_LINE_MATERIAL_TYPE,SAP_LINE_MATERIAL_INDUSTRYSAP_PartOf_YEAR,SAP_PartOf_MONTH
그래프 탐색기 에서 한 고객이 어떤 자재를 어떤 시점에 얼마나 샀나 의 5-홉 경로를 한 줄로 띄웁니다.
MATCH (c:SAP_Customer)-[:SAP_CUSTOMER_PLACED_ORDER]->(o:SAP_SalesOrder)
-[:SAP_ORDER_HAS_LINE]->(l:SAP_SalesOrderLine)
-[:SAP_LINE_MATERIAL_INDUSTRY]->(ind:SAP_MaterialIndustry),
(o)-[:SAP_ORDER_ON_DATE]->(d:SAP_OrderDate)
RETURN c, o, l, ind, d
LIMIT 30
한 화면에 고객 → 주문 → 라인 → 자재 산업 4 차원이 동시에 펼쳐집니다. ERP 분석에서 교차 집계 SQL 로는 잘 안 보이는 패턴 (한 고객이 어떤 산업의 자재를 언제 몰아 사는지) 이 그래프에서 한 번에 잡힙니다.
7. 다음 단계 + 회고 (5분)
여기까지 왔다면 한 ERP 시나리오 위에서 다음 다섯 흐름을 한 번씩 통과한 셈입니다.
- SAP 네이티브 약어 컬럼 → 읽기 좋은 이름 매핑
- 3 도메인 정제 → 통합 마스터 비정규화
- 7 차원 병렬 집계
- 10 엔티티 그래프 → 다축 탐색
- 의존 그래프 13 파이프라인의 운영 단순화
끌리는 방향으로 한 발 더:
- 엔지니어 코스 의 파이프라인 스케줄링 으로 가서, 정제 3종 → 통합 1종 → 집계 7종 + 온톨로지 1종 의 13 파이프라인 의존 그래프 를 일별 배치로 등록합니다.
sap_assistant에이전트 에 자연어 질의를 한 사이클 돌립니다 (다음 라운드 의제).- 자기 도메인 ERP 모듈 (MM 재고, PP 생산, FI 회계) 을 같은 형판 — 원시 → 정제 → 통합 → 집계 → 온톨로지 — 으로 옮깁니다.
검증 체크리스트
- 컬렉션
sap에 데이터셋 21종이 모두 올라가 있는지 (원시 5 + 중간 6 + 통합 2 + 집계 8) sap_pipeline_join_sales실행 뒤tb_sales의order_date가 date 타입 으로 잡혀 있고year/month파생 컬럼이 채워졌는지sap_pipeline_unification_total실행 뒤tb_sales_master한 행에 수주 + 라인 + 자재 + 고객 네 영역이 다 들어 있는지- 시계열 집계 3종 (
tb_year_info,tb_month_info,tb_date_info) 의 행 수가 연도 ≤ 월 ≤ 일 순서로 늘어나는지 - 그래프 탐색기에서
SAP_Customer한 노드를 시작점으로 5-홉 경로 (Customer→SalesOrder→SalesOrderLine→MaterialIndustry+OrderDate) 를 한 화면에 펼칠 수 있는지