수입 솔루션 · 수입 진행 관리

수입 리드타임 자금 묶임 비용 다차원 분석 — 입고가 늦어진 만큼 묶인 돈을 공급사·입항지·단계별로 쪼개 보는 화면

큐브 집계 · 드래그 앤 드롭 축 구성 · 칸에서 입고 라인까지의 드릴스루 · 예정 대비 차이와 여덟 요인 분해 · 행에 남는 변동 사유 · 숫자를 모델에 맡기지 않는 AI 분석 · 스스로 도는 AI 에이전트 — 소개 영상과 실제 화면, 그리고 CDS 코드까지

소개 영상블로그 목차 순서대로 · 자막 포함

도입 포인트 — 이 앱을 사용해야 하는 이유

수입 담당자가 자주 받는 질문은 세 가지입니다. 이번 분기 리드타임이 예정보다 얼마나 길어졌나, 어느 공급사 · 어느 단계에서 늘었나, 그 지연이 돈으로는 얼마인가. 지금은 구매오더 · 입고 · 선적 서류 · 포워더 자료가 흩어져 있어, 이 세 답을 엑셀로 이어 붙이느라 마감 때마다 시간을 씁니다. 이 앱은 세 답을 한 화면에 붙입니다.

한 줄 요약 — 늦어진 날수를 자금 묶임 비용으로 바꿔 공급사 · 입항지 · 단계별로 쪼개 보고, 예정과의 차이를 여덟 요인으로 나눠 합이 정확히 맞는지 매번 검산합니다.

핵심 포인트 여덟 가지

핵심 포인트고객이 얻는 것지금 방식이라면
① 축을 바꿔도 갈라지지 않는 피벗공급사 · 원산지 · 자재 · 플랜트 · 결제 통화 · 운송수단 · 입항지 같은 차원을 끌어다 놓아 행 3단계 · 열 2단계로 봅니다. 모든 축이 같은 큐브에서 나오므로 합계가 어긋날 자리가 없습니다.공급사별 · 입항지별 리드타임 표를 따로 만들고, 합계가 서로 다르면 표를 맞추는 일부터 합니다.
② 칸에서 입고 라인까지 한 번에숫자를 누르면 그 금액을 만든 입고 라인이 열리고, 라인 합계가 칸 금액과 같은지 그 자리에서 보입니다.표준 화면을 다시 열어 공급사 · 기간 조건을 손으로 맞춥니다.
③ 지연이 쌓인 단계를 바로 찾는 단계별 일수준비 · 선적 대기 · 운송 · 통관 · 입고·검수 다섯 단계의 일수를 같은 표에서 비교합니다. 어느 단계에서 늦어졌는지가 한눈에 보입니다.포워더 · 관세사 자료와 입고 일자를 엑셀로 이어 붙여 단계별로 계산합니다.
④ 늦은 날수가 돈으로 환산물대 × 가정 금리 × 일수로 자금 묶임 비용을 계산해 지연의 무게를 금액으로 말합니다. 금리는 가정값이며 회사 기준으로 바꿔 쓰는 자리입니다."며칠 늦었다" 까지만 알고, 그것이 얼마인지는 재무팀에 따로 묻습니다.
⑤ 예정 차이를 여덟 요인으로 분해물대 변동 · 조달 금리 · 준비 · 선적 대기 · 운송 · 통관 · 입고·검수 · 미계획으로 가르고, 요인의 합이 총 차이와 같은지 매번 검산합니다.총 차이만 보고 원인은 담당자 설명에 의존합니다.
⑥ 차이 사유가 행에 남는다사유가 조회 범위와 행 경로에 묶여 저장되어 축을 바꿔도, 다음 달에도 따라옵니다.같은 질문을 매달 다시 하고 지난달 답은 메일에서 찾습니다.
⑦ 사람이 열지 않아도 도는 감시규칙마다 임계값과 받을 역할이 붙어, 걸리면 대기함에 올라갑니다. 실행은 하루 한 번으로 서버가 제한합니다.나빠진 날 아무도 화면을 열지 않으면 그대로 지나갑니다.
⑧ 숫자는 서비스가, 문장은 규칙이금액 · 비율은 서비스가 큐브에서 계산하고 AI 해설은 읽기만 합니다. 기본은 규칙 기반이며 모델 연결은 설정으로만 켭니다.AI 가 만든 숫자를 보고에 써도 되는지부터 따져야 합니다.

사례로 보는 효과 — 3.61억원 차이의 진짜 이유

샘플 데이터(입고 라인 3,000건)에서 자금 묶임 비용은 예정 26.00억원 대비 실적 29.61억원으로 3.61억원(+13.9%) 많았습니다. 총 차이만 보면 “전반적으로 늦었다”로 끝납니다. 여덟 요인으로 가르자 가장 큰 몫(1.64억원)은 예정에 없던 입고 258건이었고, 그다음이 조달 금리(0.60억원), 생산·출하 준비(0.53억원), 선적 대기(0.25억원), 운송(0.24억원) 순이었습니다. 요인 여덟 개의 합은 3.61억원으로 총 차이와 1원도 어긋나지 않았습니다. 같은 샘플에서 허용 일수를 넘긴 건은 1,000건(33.3%)이었습니다.

도입하면 달라지는 것

  • 마감 자료 — 지연 표 · 요인 · 사유 · 보고서가 한 화면에서 나와 엑셀 취합이 줄어듭니다.
  • 회의의 주제 — “어느 표가 맞나” 대신 “어느 공급사와 어느 단계를 손볼까” 를 이야기합니다.
  • 협상의 근거 — 포워더 · 관세사 · 공급사에게 단계별 일수와 금액으로 말할 수 있습니다.
  • 놓치지 않는 감시 — 아무도 화면을 열지 않은 날에도 규칙에 걸린 건이 대기함에 올라옵니다.

이런 회사에 맞습니다

해외 공급사에서 자재를 들여오고 입고까지 수 주가 걸리는 제조 · 유통 회사에 맞습니다. 결제 통화가 여러 개이고 입항지 · 운송수단이 섞여 있어 리드타임 편차가 큰 곳일수록 효과가 큽니다. 구매 · 물류 · 자금 담당이 같은 숫자를 보고 싶은 조직이 대상 사용자입니다.

실행 화면

사용 방법

  1. 회사코드 · 입고월 범위 · 차원 값을 정하고 조회를 누르거나 Enter 를 칩니다.
  2. 요약에서 역할을 고르고 앞세운 지표를 확인합니다.
  3. 분석 축 보드에서 차원을 끌어다 놓아 행 · 열을 바꿉니다. 행의 ▾ 로 펼칩니다.
  4. 피벗의 칸을 눌러 그 칸을 만든 입고 라인을 봅니다.
  5. 비교를 예정 대비로 바꿔 차이와 요인 워터폴을 보고 큰 행에 사유를 적습니다.
  6. AI 분석 · AI 에이전트 · 검토용 PPTX · CSV 로 내보내고, 자주 쓰는 배치는 레이아웃으로 저장합니다.

무엇으로 만들었나

자리무엇왜 그렇게 두었나
화면OpenUI5 표준 컨트롤(sap_horizon), 행 트리 표(TreeTable), 직접 그린 SVG 차트외부 차트 라이브러리를 들이지 않아 사내망 · 보안 심사 부담이 없습니다.
집계 · 판정서비스 쪽 한 파일(core.js)이 큐브 읽기 · 요인분해 · 해설 · 에이전트를 계산화면은 합산 · 배치만 하고 금액은 서비스가 계산합니다. 숫자가 갈라지지 않습니다.
OData 서비스엔티티셋 16개와 펑션 3개로 구성된 V2 서비스, 큐브는 한 번 읽어 브라우저에서 재집계축을 바꿀 때마다 서버를 부르지 않기 위해서입니다.
테마sap_horizon표준 화면과 같은 모양으로 보이게 하기 위해서입니다.
항목내용
업무 영역수입 솔루션 · 수입 진행 관리
관련 기준서- (확정되지 않아 표기하지 않습니다)
연계 표준 T-codeME23N · MIGO · MB51 · MIRO · FBL1N
데이터OData V2 · 샘플 입고 라인 3,000건 · 큐브 23,608행
화면조회 · 축 보드 · 피벗 · 차트 · 드릴스루 · 차이 · AI · 에이전트 · 레이아웃
SAP 표준 기능을 그대로 이어받은 부분 — 구매오더 조건과 납기, 입고 일자와 전표, 송장 금액은 표준 화면의 값을 원천으로 삼습니다. 이 앱은 표준 데이터를 다른 관점으로 묶어 볼 뿐 표준 거래를 대신하지 않습니다.

처음 열었을 때 — 조회조건 · 축 보드 · 피벗

화면은 조회조건, 분석 축 보드, 요약, 피벗과 차트의 순서로 쌓여 있습니다. 샘플은 가상 회사 1000 의 2026년 4월~9월 입고분 3,000라인입니다.

조회 전 — 틀이 먼저 보인다
조회 전 — 틀이 먼저 보인다 — 조회를 누르기 전에도 조회조건 · 분석 축 보드 · 요약 · 피벗 틀이 제자리에 있습니다.

빈 화면을 주지 않습니다. 차원 목록과 측정값은 조회조건과 무관해서 화면을 열 때 먼저 읽기 때문에, 축을 미리 짜 두고 조회할 수 있습니다. 기간은 2026년 4월~9월, 회사코드는 1000 이 기본입니다.

조회 직후 — 피벗과 차트
조회 직후 — 피벗과 차트 — 조회하면 입고월 열과 공급사 행의 피벗, 오른쪽 차트가 함께 채워집니다.

표시 항목의 기본은 자금 묶임 비용(가정 금리)입니다. 큐브는 한 번만 읽고, 이후 축 변경은 브라우저에서 처리합니다. 머리 영역은 접을 수 있으며 접으면 요약 한 줄이 남습니다.

분석 축 보드
분석 축 보드 — 쓰지 않는 차원 · 행 축 · 열 축 세 칸에 차원 칩이 놓여 있습니다.

칩을 끌어다 놓거나 칩의 화살표 버튼으로 옮깁니다. 행 축은 최대 3단계, 열 축은 최대 2단계입니다. 축을 비우는 버튼도 있습니다.

축을 옮긴 뒤 — 같은 합계
축을 옮긴 뒤 — 같은 합계 — 공급사 대신 입항지를 행으로 올린 모습입니다.

서버를 다시 부르지 않고 브라우저의 큐브를 다시 묶습니다. 총합은 축을 바꾸기 전과 같습니다. 이 일치를 축 배치 여섯 가지로 자동 검증했습니다.

경영 요약 — 자리마다 다른 화면

같은 큐브라도 보는 사람에 따라 먼저 필요한 숫자가 다릅니다. 역할 네 가지를 고르면 앞세우는 지표와 쪼개 보는 차원이 바뀝니다.

경영 요약 — 재무
경영 요약 — 재무 — 역할을 재무로 두면 자금 묶임 비용과 예정 대비 차이를 앞세웁니다.

역할을 바꾸면 앞세우는 지표와 쪼개 보는 차원이 함께 바뀝니다. 다시 조회하지 않습니다.

경영 요약 — 구매
경영 요약 — 구매 — 구매 책임자 역할은 공급사별 허용 일수 초과율을 앞세웁니다.

어느 공급사가 예정보다 자주 늦는지 상위 목록으로 보여 줍니다. 허용 일수는 예정 총 일수에 3일을 더한 가정값입니다.

경영 요약 — 물류
경영 요약 — 물류 — 물류 책임자 역할은 선적 대기 · 통관 일수와 입항지를 앞세웁니다.

입항지별 단계 일수가 예정과 얼마나 다른지 봅니다. 포워더 · 관세사 협의의 근거 숫자가 됩니다.

경영 요약 — 자금
경영 요약 — 자금 — 자금 책임자 역할은 조달 금리 요인과 결제 통화를 앞세웁니다.

금리 가정이 결과에 얼마나 영향을 주는지를 요인으로 분리해 보여 줍니다. 실제 조달 금리는 확인 필요입니다.

축을 바꾸고 범위를 좁힌다

열을 두 단계로 세우고, 행을 펼치고, 차원 값을 골라 범위를 좁힙니다. 서버를 다시 부르지 않습니다.

열 축 두 개
열 축 두 개 — 열에 입고월과 운송수단 두 단계를 올린 피벗입니다.

열 조합이 36개를 넘으면 더 추가하지 못하게 막고 범위를 좁히라고 안내합니다.

행을 펼치면 차트도 함께
행을 펼치면 차트도 함께 — 행 트리를 펼치면 하위 축으로 내려가고 차트가 같은 행 기준으로 바뀝니다.

표와 차트 사이 손잡이로 너비를 조절하며, 값은 브라우저가 기억합니다.

차원 값 다중 선택
차원 값 다중 선택 — 시간 외 차원마다 값을 여러 개 고를 수 있습니다.

같은 차원 안에서는 또는, 차원 사이는 그리고로 묶입니다. 값마다 이름 · 코드 · 라인 수가 보이고 큐브에 있는 값만 올라옵니다.

칸에서 입고 라인까지

피벗의 숫자를 의심할 때 다른 화면을 열 필요가 없습니다.

칸에서 입고 라인으로
칸에서 입고 라인으로 — 칸을 누르면 그 금액을 만든 입고 라인이 대화상자로 열립니다.

머리에 칸 값과 라인 합계, 일치 여부, 읽은 조건이 표시됩니다. 기본 500행씩 읽고 페이징합니다.

검산과 기간 요약
검산과 기간 요약 — 큐브 합계와 라인 합계를 측정값별로 비교하는 검산 패널입니다.

차이는 0이어야 하며 기간별 요약도 같은 숫자와 맞춰 봅니다.

계산 항목 — 합계로는 나오지 않는 행

평균 리드타임이나 초과율처럼 식으로 정의되는 단계는 계산 항목으로 둡니다.

계산 항목 — 평균 리드타임
계산 항목 — 평균 리드타임 — 평균 리드타임 · 총 소요 일수 · 초과율 · 묶임 비용률 · 1일당 묶임 비용이 행으로 나옵니다.

합계로 전기되는 값이 아니라 식으로 정의된 단계입니다. 계산 항목을 고르면 표와 차트가 그 항목만 보여 주고 열로 세울 수도 있습니다.

예정 대비 차이 — 같은 표가 지연 점검 자료가 된다

비교 기준을 예정으로 바꾸면 같은 표가 차이 표가 되고, 요인 워터폴과 변동 사유가 붙습니다.

예정 대비 — 차이 모드
예정 대비 — 차이 모드 — 비교를 예정 대비로 바꾸면 칸마다 실적 · 예정 · 차이 · 증감률이 보입니다.

색은 금액과 비율이 모두 임계를 넘을 때만 칠합니다. 자금 묶임 비용이 예정보다 많으면 불리한 방향으로 칠합니다.

변동 사유 입력
변동 사유 입력 — 차이가 큰 행에 사유 구분과 내용을 적습니다.

사유는 조회 범위와 행 경로를 키로 서비스에 저장되어 새로 고침 뒤에도, 다음 기간에도 따라옵니다. AI 근거와 CSV 에도 실립니다.

요인 워터폴
요인 워터폴 — 예정에서 실적까지를 요인별 막대로 이어 보여 줍니다.

물대 변동 · 조달 금리 · 준비 · 선적 대기 · 운송 · 통관 · 입고·검수 · 미계획의 순서이며, 아래에 요인 합 − 총 차이 = 0 검산 줄이 나옵니다.

행별 요인 분해
행별 요인 분해 — 행 범위를 정하면 그 범위의 차이만 요인으로 나눕니다.

공급사 한 곳 · 입항지 한 곳만 골라도 요인의 합이 그 범위의 총 차이와 맞습니다.

AI 분석과 보고서 — 숫자는 서비스가, 문장은 규칙이

AI 분석은 서비스가 계산한 값을 문장으로 옮기고 근거 표를 함께 보여 줍니다.

AI 분석 — 요약과 점검 대상
AI 분석 — 요약과 점검 대상 — 현재 범위를 해설한 요약과 점검 필요한 행 목록이 열립니다.

기본은 규칙 기반 해설이며 서비스가 계산한 값만 문장으로 옮깁니다. 이미 사유가 적힌 차이는 건너뜁니다. 점검 필요 · 확인 필요로만 적고 원인을 단정하지 않습니다.

AI 분석 — 근거 표
AI 분석 — 근거 표 — 해설에 쓴 숫자의 근거 표를 펼쳐 볼 수 있습니다.

AI 는 숫자를 만들지 않으므로 문장의 모든 금액이 이 표의 값과 일치해야 합니다.

검토용 자료(PPTX)
검토용 자료(PPTX) — 현재 범위의 표와 차트를 담은 파워포인트 보고서를 브라우저에서 만듭니다.

외부 라이브러리 없이 XML 을 짜서 zip 으로 묶습니다. 내려받은 파일이 열리는 것까지 확인했습니다.

AI 에이전트 — 사람이 열지 않아도 돈다

감시 규칙에 걸린 건을 받을 역할의 관점으로 대기함에 올립니다.

AI 에이전트 — 감시 규칙
AI 에이전트 — 감시 규칙 — 규칙마다 임계값 · 받을 역할 · 주기가 붙어 있습니다.

샘플 규칙은 다섯 개입니다: 공급사 허용 일수 초과율, 입항지 대기·통관 일수, 자금 묶임 비용 예정 초과, 조달 금리 영향, 장기 리드타임 건.

AI 에이전트 — 대기함
AI 에이전트 — 대기함 — 규칙에 걸린 건이 받을 역할 관점의 보고로 대기함에 올라옵니다.

실행은 하루 한 번만 허용되고 판정은 서버가 합니다. 두 번째 실행은 제한 안내만 받고 새 보고를 올리지 않습니다. 걸린 것이 없어도 활동 기록은 남습니다.

레이아웃 저장과 복원

자주 쓰는 배치를 이름 붙여 저장하고, 기본으로 지정하면 열자마자 조회됩니다.

레이아웃 저장 목록
레이아웃 저장 목록 — 축 · 조회조건 · 측정값 · 표시 행 수 · 접힘 상태를 이름 붙여 저장합니다.

기본 레이아웃과 자동 조회를 지정할 수 있고, 이름 바꾸기와 삭제도 됩니다. 기본 + 자동 조회면 열자마자 조회된 상태로 시작합니다.

좁은 화면과 한계

작은 화면과 범위 상한에서의 동작입니다.

좁은 화면 — 차트가 표 아래로
좁은 화면 — 차트가 표 아래로 — 390px 폭에서는 차트가 표 아래로 쌓입니다.

가로 스크롤 없이 같은 기능을 쓰도록 배치만 바뀝니다.

범위 상한 안내
범위 상한 안내 — 행 · 열 조합이 상한을 넘으면 반쯤 그린 표 대신 안내를 띄웁니다.

샘플에서는 열이 68개가 되면 앞의 36개만 보여 주고 열 축을 줄이거나 차원 값을 고르라고 안내합니다.

화면 뒤에서 일어나는 일

단계일어나는 일
① 조회CubeSet · PlanSet 을 조회조건 $filter 로 한 번 읽습니다.
② 재집계model/cube.js 가 행 · 열 축대로 다시 묶습니다. 서버 호출 없음.
③ 드릴스루칸의 행 경로 + 열 조합을 $filter 로 바꿔 ItemSet 을 읽습니다.
④ 차이PlanSet 의 같은 조합 값을 맞춰 칸마다 실적 · 예정 · 차이를 만듭니다.
⑤ 요인분해DecomposeVariance 가 순차 대체로 여덟 요인을 계산하고 합을 검산합니다.
⑥ 해설 · 감시ExplainScope 와 RunAgent 가 서비스 값만으로 문장과 보고를 만듭니다.

조회조건

조회조건필수기본값$filter
회사코드예1000Bukrs eq '1000'
입고월 시작 · 종료예2026.04 ~ 2026.09Period ge '202604' and Period le '202609'
차원 값아니오전체차원별 eq 를 or 로 묶고 차원 사이는 and
금액 단위아니오원화면 표시용
비교아니오실적만예정 대비 선택 시 PlanSet 을 함께 읽음

결과 컬럼

컬럼의미산출식
입고 건수입고 라인 수라인 1건 = 1
물대원화 환산 물대수량 × 외화 단가 × 환율
단계별 일수준비 · 선적 대기 · 운송 · 통관 · 입고·검수단계별 일자 차이
자금 묶임 비용(가정 금리)리드타임 동안 묶인 물대의 금융 비용물대 × 금리(%) ÷ 100 × 총 일수 ÷ 365
평균 리드타임건당 평균 소요 일수총 일수 ÷ 입고 건수
초과율허용 일수를 넘긴 건의 비율초과 건수 ÷ 입고 건수 × 100
묶임 비용률물대 대비 묶임 비용묶임 비용 ÷ 물대 × 100

좁은 화면에서 달라지는 것

390px 폭에서는 차트가 표 아래로 쌓이고 머리 영역은 접힌 채 시작합니다. 열 조합이 36을 넘으면 표를 그리지 않고 범위를 좁히라는 안내를 띄웁니다. 샘플에서 열 68개가 되는 배치로 이 안내를 확인했습니다.

파일 구성

index.html · Component.js · manifest.json
controller/   Main.controller.js · BaseController.js
view/         Main.view.xml · fragment/ (Agent · Ai · Drill · Layout · Reason)
model/        cube.js · chart.js · layout.js · formatter.js · pptx.js · ErrorHandler.js
odata/        metadata.xml · service.js · core.js · ai.json · json/*.json
media/        소개 영상 · 포스터 · 목차 트랙

SAP 표준 기능 확장 포인트

표준 실행은 SAP 표준 T-code 가 담당하고, 이 화면은 조회 · 검증 관점을 더해 확장합니다.

표준으로 되는 것과 안 되는 것

하고 싶은 일표준으로 되는 것표준에서 걸리는 자리이 앱이 더하는 관점
발주 조건과 납기 확인구매오더 조회(ME23N)공급사 · 기간별로 묶은 리드타임 비교는 화면 밖 작업같은 큐브에서 공급사 · 입항지 축으로 비교
입고 확인입고(MIGO) · 자재 문서 목록(MB51)단계별 일수를 한 표로 모아 주지 않음발주~입고 다섯 단계 일수를 같은 표에 정렬
송장과 물대 확인송장 검증(MIRO)지연을 금액으로 환산하지 않음가정 금리로 자금 묶임 비용 환산
공급사 지급 조건공급사 개별 항목(FBL1N)리드타임과 지급 시점을 함께 볼 자리가 없음조달 금리 요인으로 영향을 분리
예정 대비 차이의 원인 분해없음보통 엑셀로 만듭니다여덟 요인으로 가르고 합계를 검산

T-code 별 연계 지점

T-code이름연계
ME23N구매오더 조회발주일 · 예정 입고일 · 물대 조건을 이 앱의 예정 값과 맞춥니다. 이 앱 결과에서 공급사 · 오더를 확인하러 돌아가는 길입니다.
MIGO입고입고일(RecvDate)의 원천입니다. 표준 입고 전표 일자와 이 앱의 입고 라인 일자를 대사 지점으로 둡니다.
MB51자재 문서 목록입고 전표 목록을 열어 라인 건수 · 수량을 맞춰 봅니다.
MIRO송장 검증송장 금액이 물대와 같은지 확인합니다. 법정 · 세무 처리는 표준에 남깁니다.
FBL1N공급사 개별 항목지급 조건 · 결제 시점을 확인합니다. 자금 묶임 비용의 금리 가정을 정할 때 참고합니다.

운영으로 옮길 때 기존 표준 리포트를 없앨 필요는 없습니다. 표준 리포트는 법정 · 감사 대응에 그대로 두고, 이 화면은 지연 점검과 협상 근거를 맡습니다. 각 표준 화면의 세부 필드 대응은 회사 설정에 따르며 확인 필요입니다.

S/4HANA 분석 스택과의 자리

S/4HANA 의 표준 CDS 분석 쿼리나 Fiori 분석 앱 위에 이 화면을 올려 같은 큐브를 읽게 할 수 있습니다. Analysis for Office 같은 도구는 같은 CDS 큐브를 엑셀 쪽에서 읽는 경로입니다. 구매 · 입고 영역에 어떤 표준 분석 앱이 있는지는 설치 버전에 따라 달라 확인 필요이며, 확인하지 못한 앱 이름은 적지 않았습니다.

확장 포인트 — 운영에서 실제로 손대는 자리

확장 자리고객사가 정하는 것손대는 방법
단계 일자 원천준비 · 선적 · 통관 일자를 어느 필드에서 받을지확장 필드 또는 별도 이력 테이블, 확인 필요
자금 묶임 금리통화별 · 기간별 적용 금리매핑 테이블 한 곳
허용 일수예정 총 일수에 더하는 여유 일수서비스 설정
차원 범위쓸 차원 · 이름 체계차원 뷰 확장
권한회사코드 · 플랜트 · 구매조직분석 권한(DCL)
감시 규칙임계값 · 주기 · 받을 역할규칙 테이블

분석 지표 정의

지표산식판정 기준대응 기능원천 데이터비고
자금 묶임 비용물대 × 금리 ÷ 100 × 일수 ÷ 365예정보다 임계 넘게 많으면 점검 필요큐브 · 차이 모드물대 · 일수 · 금리금리는 가정값
초과율초과 건 ÷ 입고 건 × 100상한 초과 시 점검 필요계산 항목 · 감시 규칙예정 · 실적 일수허용 3일은 가정
요인 합 검산Σ요인 − 총 차이0 이 아니면 오류요인 워터폴순차 대체 계산순서는 확인 필요

CDS 구성

뷰 레이어 구성

레이어뷰하는 일왜 나누나
기준zimp_leadplan예정 일수 · 금리 · 물대실적과 예정을 같은 키로 맞추기 위해
차원ZI_ImportLeadSupplier 외공급사 · 입항지 이름과 코드화면 필터에 이름을 주기 위해
큐브ZI_ImportLeadCube입고 라인을 차원 조합별로 합계피벗의 단일 원천
쿼리ZC_ImportLeadQuery조회 파라미터와 필터화면이 읽는 얇은 층
권한ZI_ImportLeadAuth회사 · 플랜트 범위 제한집계 단계에서 걸어야 새지 않음
서비스ZUI_ImportLeadOData 로 게시화면은 서비스 주소만 압니다

① 예정 기준 테이블

예정 일수 · 예정 금리 · 예정 물대는 구매오더 조건에서 오지만 단계별 예정 일수는 표준에 없는 경우가 많아 기준 테이블로 둡니다. 이 객체에서 비교 기준이 결정됩니다.

" ───────────────────────────────────────────────
" zimp_leadplan — 수입 리드타임 예정 기준
" 단계별 예정 일수와 예정 금리를 공급사 · 자재 · 입항지 단위로 둔다.
" 나눈 이유: 예정 값이 바뀌어도 큐브 뷰를 고치지 않기 위해서.
" ───────────────────────────────────────────────
@EndUserText.label : '수입 리드타임 예정'
@AbapCatalog.tableCategory : #TRANSPARENT
define table zimp_leadplan {
  key client   : abap.clnt not null;
  key supplier : lifnr not null;
  key material : matnr not null;
  key port     : abap.char(3) not null;
  plan_prep    : abap.int2;
  plan_wait    : abap.int2;
  plan_sea     : abap.int2;
  plan_cust    : abap.int2;
  plan_recv    : abap.int2;
  plan_fin_rate: abap.dec(5,3);
}

② 입고 라인 뷰

구매오더 항목과 입고 이력을 한 줄로 묶어 라인 단위의 일자와 물대를 만듭니다. 드릴스루의 원천입니다.

" ZI_ImportLeadItem — 입고 라인 (드릴스루 원천)
" 이름·역할·이유: 발주~입고를 한 줄로 두어 단계 일수를 라인에서 계산한다.
@AbapCatalog.viewEnhancementCategory: [#NONE]
@AccessControl.authorizationCheck: #CHECK
define view entity ZI_ImportLeadItem
  as select from ekko as h
  inner join ekpo as i on i.ebeln = h.ebeln
  inner join ekbe as g on g.ebeln = i.ebeln and g.ebelp = i.ebelp and g.vgabe = '1'
{
  key h.ebeln as PurchaseOrder,
  key i.ebelp as PurchaseOrderItem,
  h.lifnr     as Supplier,
  i.matnr     as Material,
  i.werks     as Plant,
  h.bedat     as OrderDate,
  g.budat     as ReceiptDate,
  @Semantics.amount.currencyCode: 'Currency'
  i.netwr     as CargoAmount,
  h.waers     as Currency,
  dats_days_between( h.bedat, g.budat ) as TotalDays
}

③ 실적 큐브

입고 라인을 차원 조합별로 합계로 묶습니다. 자금 묶임 비용은 가정 금리로 라인에서 계산해 합칩니다.

" ZI_ImportLeadCube — 실적 큐브
" 차원 조합별 물대 · 일수 · 자금 묶임 비용 합계
@Analytics.dataCategory: #CUBE
@AccessControl.authorizationCheck: #CHECK
define view entity ZI_ImportLeadCube
  as select from ZI_ImportLeadItem as i
{
  i.Supplier, i.Material, i.Plant,
  substring( i.ReceiptDate, 1, 6 ) as Period,
  @Aggregation.default: #SUM
  cast( i.CargoAmount as abap.curr(18,0) ) as CargoAmount,
  @Aggregation.default: #SUM
  i.TotalDays as TotalDays,
  @Aggregation.default: #SUM
  cast( i.CargoAmount * 0.05 * i.TotalDays / 365 as abap.curr(18,0) ) as CarryCost,  " 금리 5% 는 가정값 — 확인 필요
  @Aggregation.default: #SUM
  1 as ItemCount
}
group by i.Supplier, i.Material, i.Plant, substring( i.ReceiptDate, 1, 6 )

④ 예정 큐브

같은 차원 키로 예정 일수와 예정 금리를 읽어 차이 모드의 비교 값을 만듭니다.

" ZI_ImportLeadPlanCube — 예정 큐브 (실적과 같은 키 + Version)
@Analytics.dataCategory: #CUBE
define view entity ZI_ImportLeadPlanCube
  as select from zimp_leadplan
{
  key supplier as Supplier, key material as Material, key port as Port,
  'PLAN' as Version,
  @Aggregation.default: #SUM
  plan_prep + plan_wait + plan_sea + plan_cust + plan_recv as PlanDays,
  plan_fin_rate as PlanFinRate
}

⑤ 실적 + 예정 통합 큐브

두 큐브를 한 키로 이어 차이 모드를 서비스 한 번 읽기로 만듭니다.

" ZI_ImportLeadAll — 실적 + 예정 통합 (union)
define view entity ZI_ImportLeadAll
  as select from ZI_ImportLeadCube
{ Supplier, Material, Period, 'ACTUAL' as Version, CargoAmount, CarryCost, TotalDays }
union all
  select from ZI_ImportLeadPlanCube
{ Supplier, Material, '' as Period, Version, 0 as CargoAmount, 0 as CarryCost, PlanDays as TotalDays }

⑥ 분석 쿼리

화면이 읽는 얇은 층입니다. 조회 파라미터와 필터 필드를 선언합니다.

" ZC_ImportLeadQuery — 분석 쿼리
@Analytics.query: true
@AccessControl.authorizationCheck: #CHECK
define view entity ZC_ImportLeadQuery
  as select from ZI_ImportLeadAll
{
  @AnalyticsDetails.query.axis: #ROWS
  Supplier,
  @AnalyticsDetails.query.axis: #COLUMNS
  Period,
  @Consumption.filter: { selectionType: #RANGE, multipleSelections: true }
  Material,
  CargoAmount, CarryCost, TotalDays
}

⑦ 권한 (DCL)

공급사가 아니라 구매조직 · 플랜트 기준으로 범위를 제한합니다. 집계 단계에서 걸어야 합계로 새지 않습니다.

" ZI_ImportLeadAuth — 분석 권한
@EndUserText.label: '수입 리드타임 권한'
define role ZI_ImportLeadAuth {
  grant select on ZI_ImportLeadCube
    where ( Plant ) = aspect pfcg_auth( M_BEST_WRK, WERKS, ACTVT = '03' );
}

운영 시점에 해야 할 일

개발보다 정하는 일이 많습니다.

해야 할 일무엇을 정하나정하지 않으면누가
단계 일자 원천준비 · 선적 · 통관 일자를 받을 필드단계별 일수를 만들 수 없습니다구매 · 물류
금리 기준통화별 가정 금리인지 실제 조달 금리인지묶임 비용이 재무 보고 금액과 어긋납니다자금팀
환율 유형 · 환산 시점물대를 어느 날짜 환율로 원화 환산할지외화 물대가 해석마다 달라집니다회계팀
허용 일수예정 총 일수에 더할 여유초과율이 의미 없는 숫자가 됩니다구매 · 물류
차원 범위쓸 차원과 이름 체계나중에 늘리려면 뷰를 고쳐 다시 이송해야 합니다현업 · 구매
권한 설계구매조직 · 플랜트 범위전사 합계와 자기 몫의 차이로 남의 숫자가 드러납니다보안 · 권한
대사 체계입고 전표(MB51) · 송장(MIRO)과 맞출 항목첫 회의에서 숫자가 안 맞는다는 이야기가 나옵니다회계 · 구매
전송(TR) 순서테이블 → 뷰 → 서비스 → 앱서비스 활성화 단계에서 막힙니다Basis
서비스 활성화/IWFND/MAINT_SERVICE 등록 또는 바인딩 게시, manifest.json 의 서비스 주소 교체샘플 주소를 계속 읽습니다Basis · 개발
배치 등록에이전트를 하루 한 번 도는 배치로 연결사람이 화면을 열 때만 점검됩니다Basis

숫자를 믿을 수 있는가 — 검증 결과

대사식검사 건수차이 건수최대 차이
라인 자금 묶임 비용 = 물대 × 금리 × 일수 ÷ 365 (실적)3,00000
큐브 합계 = 라인 합계 (측정값 9종)900
요인 8종의 합 = 총 차이 (라인 단위)3,00000
요인 8종의 합 = 총 차이 (전체 범위)100
피벗 총합 = 큐브 총합 (축 6가지 배치)600
드릴스루 칸 값 = 읽은 라인 합 (3칸)300
서비스 계약 자동 점검480-
화면 동작 자동 점검(F1–F15)150-

의도적 예외: 예정 없는 라인 258건(자금 묶임 비용 164,341,435원)은 미계획 요인으로 분리했으며 위 차이 건수와 별개입니다. 도입 포인트의 사례와 같은 숫자입니다.

운영 데이터로 갈 때

입고 이력이 수천만 건이면 큐브 집계는 브라우저가 아니라 CDS 쪽에서 합니다. 조회조건(회사 · 기간)을 필수로 묶어 읽는 범위를 제한하고, 큐브 행 수가 수만을 넘으면 월 단위 사전 집계 뷰를 둡니다. 화면의 열 상한 36과 드릴스루 기본 500행은 그대로 둡니다. 응답 시간 기준은 조회 3초 안쪽을 목표로 잡되 실제 값은 시스템 규모에 따라 확인 필요입니다.

자주 묻는 질문

도입 전에 가장 자주 나오는 질문을 주제별로 모았습니다.

숫자와 산식

자금 묶임 비용은 어떻게 계산하나요?

물대 × 금리(%) ÷ 100 × 총 소요 일수 ÷ 365 입니다. 샘플의 금리는 통화별 가정값이며 실제 조달 금리가 아닙니다. 어떤 금리를 쓸지는 자금팀과 정해야 하므로 확인 필요입니다.

칸의 숫자를 어떻게 믿나요?

칸을 누르면 그 칸을 만든 입고 라인이 열리고 칸 값과 라인 합계의 일치 여부가 머리에 표시됩니다. 검산 패널에서도 큐브 합계와 라인 합계를 측정값별로 비교하며 샘플에서 차이는 0 이었습니다.

요인분해의 합이 왜 총 차이와 같은가요?

예정 값에서 출발해 요인을 정해진 순서대로 하나씩 실적 값으로 바꿔 넣는 순차 대체 방식이라, 각 단계의 변화 합이 정확히 총 차이가 됩니다. 라인 3,000건 모두에서 차이가 0 임을 확인했습니다.

요인 순서를 바꾸면 결과가 달라지나요?

요인별 금액 배분은 달라질 수 있지만 합은 같습니다. 이 순서가 회사의 분석 관행과 맞는지는 확인 필요입니다.

예정 없이 입고된 건은 어떻게 처리하나요?

예정이 없는 라인은 비교할 기준이 없어 전액을 미계획 요인으로 분리합니다. 샘플에서는 258건 1.64억원이었습니다.

허용 일수는 무엇인가요?

예정 총 일수에 3일을 더한 샘플 가정값입니다. 초과율 계산에만 쓰며 회사 기준에 맞춰 바꿔야 합니다.

화면과 조작

축을 바꾸면 서버를 다시 부르나요?

부르지 않습니다. 큐브를 조회 때 한 번 읽고 브라우저에서 다시 묶습니다. 서버 요청 횟수 0 임을 자동 점검했습니다.

행과 열은 몇 단계까지 되나요?

행 3단계, 열 2단계입니다. 열 조합이 36을 넘으면 더 추가하지 못하게 막고 범위를 좁히라고 안내합니다.

드릴스루는 몇 행까지 읽나요?

기본 500행씩 읽고 페이징합니다. 칸의 값과 라인 합이 다르면 머리에 표시합니다.

레이아웃은 어디에 저장되나요?

서비스에 저장되어 새로 고침 뒤에도 남습니다. 기본 레이아웃과 자동 조회를 지정하면 열자마자 조회된 상태로 시작합니다.

휴대폰에서도 쓸 수 있나요?

390px 폭에서 차트가 표 아래로 쌓이는 배치로 동작을 확인했습니다. 열이 너무 많으면 앞쪽만 보여 주고 범위를 좁히라고 안내합니다.

AI 분석과 에이전트

AI 분석이 숫자를 만들어 내지 않나요?

만들지 않습니다. 금액 · 비율은 서비스가 계산하고 해설은 그 값을 문장으로 옮깁니다. 근거 표를 펼쳐 문장의 숫자가 표와 같은지 볼 수 있습니다.

외부 AI 모델에 데이터가 나가나요?

기본은 규칙 기반이라 나가지 않습니다. 모델 연결은 서비스 설정 한 곳에서만 켜며 기본은 꺼짐입니다. API 키는 앱 · 설명서 · 글에 두지 않습니다.

에이전트는 얼마나 자주 도나요?

하루 한 번입니다. 판정은 서버가 하며 두 번째 실행은 제한 안내만 받습니다. 걸린 것이 없어도 활동 기록은 남습니다.

운영 배치와는 어떻게 연결하나요?

화면 타이머나 사람의 실행 대신 배치 잡이 같은 펑션을 부르도록 등록합니다. 호출 주체가 기록에 남습니다. 실제 등록 절차는 시스템 구성에 따라 확인 필요입니다.

검토용 자료는 무엇인가요?

현재 글의 내용으로 브라우저에서 만드는 파워포인트 파일입니다. 외부 서버로 보내지 않고 내려받습니다.

도입과 운영

어떤 회사에 효과가 큰가요?

해외 공급사에서 들여오고 입고까지 수 주가 걸리며 결제 통화 · 입항지가 여러 곳인 회사입니다. 구매 · 물류 · 자금 담당이 같은 숫자를 보고 싶은 조직이 대상입니다.

표준 리포트를 없애야 하나요?

없애지 않습니다. 법정 · 감사 대응은 표준 화면에 그대로 두고 이 화면은 지연 점검 관점을 더합니다.

운영 연결에 무엇이 필요한가요?

단계 일자 원천 결정, 금리 기준, 환율 유형, 권한 설계, CDS 전송, 서비스 활성화와 manifest.json 서비스 주소 교체입니다. 소요 기간은 시스템 상태에 따라 달라 확인 필요입니다.

권한은 어떻게 거나요?

구매조직 · 플랜트 기준의 분석 권한을 집계 단계에서 겁니다. 드릴스루에만 걸면 합계로 남의 숫자가 새므로 큐브 단계에서 겁니다.

대용량에서도 되나요?

입고 이력이 수천만 건이면 집계를 CDS 쪽에서 하고 조회조건을 필수로 둡니다. 구체 응답 시간은 확인 필요입니다.

계정체계나 차원이 바뀌면 어떻게 하나요?

차원 뷰와 매핑 테이블 한 곳을 고치면 화면은 서비스의 차원 목록을 읽어 따라갑니다.

이 결과를 회계 · 세무 판단에 그대로 써도 되나요?

이 화면은 집계 · 대사를 돕는 점검 도구입니다. 최종 판단은 회사와 감사인이 하고, 세무 · 관세 신고는 회사와 세무 대리인 · 관세사가 판단합니다.