SAP 자금 솔루션 이자 수익·비용 다차원 분석 — 은행·기간·금리 유형을 끌어다 놓고 계획 대비 차이의 원인까지
큐브 집계 · 끌어다 놓는 축 구성 · 칸에서 원천 문서까지의 드릴스루 · 계획 대비 차이와 요인분해 · 행에 남는 변동 사유 · 감시 에이전트 — 소개 영상과 실제 화면 32종, 그리고 CDS 코드까지
소개 영상블로그 목차 순서대로 · 자막 포함
개발 배경
자금 담당자는 매달 비슷한 질문을 받습니다. 이번 달 이자 비용이 왜 늘었는지, 어느 은행의 조달 금리가 높은지, 계획과 얼마나 다른지, 그 차이는 잔액 때문인지 금리 때문인지 같은 질문입니다. 답을 만들려면 대출·차입 계약 자료, 은행 계좌 명세, 총계정원장의 이자 계정, 계획 자료를 한곳에 모아야 합니다.
지금 방식은 대개 표준 화면 여러 개와 엑셀입니다. 은행별 자료를 내려받아 붙이고, 환율을 곱하고, 계획 파일과 맞춰 차이를 계산합니다. 월말마다 기준이 조금씩 달라지고, 숫자가 어긋나면 어느 단계에서 어긋났는지 되짚는 데 시간이 걸립니다.
이 화면은 그 자리를 메우려고 만들었습니다. 이자 계산 라인을 큐브로 한 번 모아 두고, 보는 사람이 축을 바꾸며 같은 숫자를 여러 모양으로 봅니다. 표준 실행은 SAP 표준 T-code 가 담당하고, 이 화면은 조회와 검증 관점을 더해 확장합니다. 이 글의 데이터는 모두 가상의 샘플이며 환율과 금리는 가정값입니다.
이자 손익은 계약마다 흩어져 있어 한 번에 보이지 않는다
차입금 이자는 은행과 상품, 고정·변동 금리, 만기 구간에 따라 계산 방식이 다르고 예금 이자는 반대 방향의 손익입니다. 같은 은행 안에서도 상품이 여러 개이고 외화 라인은 환율까지 얽힙니다. 화면은 이 모든 차원을 큐브의 축으로 두어 필요한 조합을 끌어다 놓는 것으로 보게 합니다.
월말마다 표를 새로 만들면 기준이 달라진다
엑셀로 만든 표는 만든 사람의 기준을 담고 있어 다음 달에 다른 사람이 만들면 합계가 어긋납니다. 큐브는 한 번 정한 집계 기준을 모든 표가 공유하므로 축을 바꿔도 합계가 변하지 않습니다. 표 합계와 차트 합계, 원천 문서 합계가 같은 값에서 나온다는 것을 화면이 매번 보여 줍니다.
차이의 원인을 설명하는 데 하루가 걸린다
계획보다 이자 비용이 커졌다는 사실까지는 표로 알 수 있지만 잔액이 늘어서인지 금리가 올라서인지는 따로 계산해야 합니다. 화면은 차이를 잔액·금리·기간·환율·계획 외·계획 미실현 요인으로 나누고, 요인 합이 총 차이와 같은지 검산 줄로 적습니다. 요인 옆에는 변동 사유를 남길 수 있습니다.
사용 방법
- 조회 조건 입력 — 기간(시작·끝)과 회사·은행 같은 차원 값을 고릅니다. 모두 선택 사항이며 비워 두면 전체 범위입니다.
- 조회 — 조건 줄 오른쪽 끝의 조회 버튼을 누르거나 입력 칸에서 Enter 를 누릅니다. 자동 조회로 지정한 보기가 있으면 열리자마자 조회됩니다.
- 요약 확인 — 조회가 끝나면 조건 영역이 한 줄로 접히고 피벗 표와 차트가 나옵니다. 경영·재무·자금·회계 버튼으로 관점을 바꿉니다.
- 축 이동 — 차원 칩을 행 축·열 축 칸으로 끌어다 놓습니다. 행 3단계, 열 2단계까지이며 열 조합이 36개를 넘으면 안내가 나옵니다.
- 칸 클릭 상세 — 표의 칸을 누르면 원천 문서 목록이 열리고 합계가 칸 금액과 같은지 보입니다. 기준 대비 차이를 켜면 요인분해와 워터폴, 변동 사유가 이어집니다.
- 내려받기 — CSV 버튼으로 현재 피벗을, 해설 창에서 PPT 보고서를 내려받습니다.
숫자를 믿을 수 있는가 — 검증 결과
집계 단계마다 대사식을 세워 샘플 데이터 전체에 돌렸습니다. 화면 쪽은 실제 브라우저로 같은 항목을 다시 확인했습니다.
| 대사식 | 검사 건수 | 차이 | 의도적 예외 |
|---|---|---|---|
| 큐브 합계 = 원천 라인 합계(9개 기간 × 이자손익·적수·수수료·라인 수) | 36 | 0 | 0 |
| 표 합계 = 큐브 합계(원 단위) | 1 | 0 | 0 |
| 값 필터 합계 = 같은 조건 재계산(-3,798,145,928원) | 1 | 0 | 0 |
| 원천 문서 합계 = 칸 금액(대표 9칸) | 9 | 0 | 0 |
| 요인 합 − 총 차이(검산 줄, 전체·단일 은행) | 2 | 0 | 0 |
| 색 표시 규칙(금액·비율 둘 다 넘을 때만) | 91칸 | 0 | 0 |
큐브 합계와 원천 라인 합계의 대사는 9개 기간 × 4개 측정값 36건이며 최대 차이는 0원입니다. 아래 확인은 한 번 실행한 결과이고 운영 데이터에서는 다시 돌려야 합니다. 새로 고침 뒤에도 변동 사유와 저장한 보기가 남는지는 샘플 서버가 다시 시작하면 초기화되어 화면으로는 확인하지 못했습니다(서비스 로직의 생성·조회는 확인했습니다. 확인 필요).
무엇으로 만들었나
| 자리 | 무엇 | 왜 그렇게 두었나 |
|---|---|---|
| 피벗 표 | 트리 표 컨트롤(행 3단계, 동적 열) | 행 단계를 접고 펼치며 합계 행을 같은 표에서 처리합니다. |
| 차트 | 직접 그린 SVG(묶음 막대·워터폴) | 외부 차트 라이브러리 없이 표와 같은 값을 그립니다. |
| 축 배치 | 끌어놓기 영역(DragInfo·DropInfo) | 칩을 칸에 놓는 동작이 곧 축 구성입니다. |
| 집계·계산 | 브라우저의 피벗 엔진과 공용 계산식 파일 | 축을 바꿔도 서버를 부르지 않고, 서버와 화면이 같은 식을 씁니다. |
| 데이터 서비스 | OData V2 서비스: 큐브·계획·원천 문서·차원·계산 항목·사유·보기·감시 규칙을 읽고 쓰는 14종 엔티티셋과 요인분해·해설·에이전트 실행 3종 펑션 | 화면은 서비스 모델 하나로 읽고 쓰며 조회 조건은 필터로 서버에 보냅니다. |
| 모델 구성 | 기본 모델은 OData 모델(묶음 요청 없음, JSON), 화면 상태는 별도 JSON 모델 | 큐브·계획은 조회 때 한 번, 원천 문서는 쪽을 나눠 읽습니다. |
| 테마 | sap_horizon | SAP 표준 시각 언어를 그대로 따릅니다. |
| 항목 | 내용 |
|---|---|
| 솔루션 | 자금 솔루션 |
| 업무 영역 | 이자 수익·비용 분석 |
| 관련 기준서·대상 영역 | 업무 분석 · 특정 기준서 연계 없음 · 대상 영역: 차입·예치 이자, 외화 환산, 계획 대비 차이 |
| SAP 표준 T-code | FF7A · FF7B · FEBAN · FBL3N |
| Namespace | zui5.intcost |
| 화면 성격 | 다차원 분석(피벗·차트·원천 문서·차이 분석·에이전트) |
| 데이터 연동 | OData V2 서비스, 현재는 샘플 데이터(운영 원천 연동 범위는 확인 필요) |
| 테마 | sap_horizon |
실행 화면
실제 브라우저로 찍은 화면 32종입니다. 처음 열었을 때부터 좁은 화면까지 사용 순서대로 놓았고, 화면마다 무엇을 보는지와 누르면 무엇이 일어나는지를 아래에 적었습니다. 은행 이름과 금액은 모두 가상의 샘플입니다.
처음 열었을 때 — 빈 틀에서 피벗까지
화면은 틀부터 서고 값은 조회할 때 한 번만 읽습니다. 처음 보는 사람도 무엇을 고르면 무엇이 채워지는지 알 수 있게 했습니다.

조회를 누르기 전에는 서버에서 값을 읽지 않고 틀만 그립니다. 위쪽에 조회 조건, 가운데에 차원 칩과 행 축·열 축 칸, 아래에 피벗 표가 놓입니다. 조회 버튼은 조건 줄 오른쪽 끝에 있고 입력 칸에서 Enter 를 눌러도 같은 동작입니다. 저장한 보기 가운데 자동 조회로 지정한 것이 있으면 이 단계를 건너뛰고 바로 조회됩니다.

큐브와 계획을 한 번 읽어 표와 차트를 그립니다. 표 합계와 차트 합계는 둘 다 원 단위 큐브 합계에서 나오므로 서로 어긋날 자리가 없습니다. 이 시점부터 축을 바꾸거나 관점을 눌러도 서버를 다시 부르지 않습니다. 금액은 백만원 단위로 표시하지만 합산은 원 단위로 합니다.

보관함에는 회계기간·회사·통화·금리 유형·만기 구간·자금 용도·손익 구분 같은 차원이 칩으로 놓여 있습니다. 칩을 행 축이나 열 축 칸으로 끌어다 놓으면 표가 다시 짜입니다. 측정값은 이자손익을 기본으로 하고 적수·수수료·라인 수와 계산 항목을 더 고를 수 있습니다.

칩 하나를 끌어다 놓으면 행·열 칸의 순서대로 트리가 펼쳐집니다. 행은 3단계, 열은 2단계까지 쌓을 수 있고 칩의 X 로 빼면 즉시 표가 바뀝니다. 같은 차원을 행과 열에 동시에 둘 수는 없습니다.

조회가 끝나면 조건 영역은 한 줄 요약으로 접힙니다. 요약에는 기간과 걸러 둔 값이 남아 있어 지금 무엇을 보고 있는지 알 수 있고, 펼침 단추로 조건을 다시 고칩니다. 화면의 대부분이 표와 차트에 쓰이는 이유입니다.
관점별 요약 — 같은 데이터를 네 가지 눈으로
경영·재무·자금·회계 관점은 데이터를 바꾸지 않고 보는 항목과 배치만 바꿉니다.

관점 버튼을 누르면 측정값·행·열 배치가 그 관점의 기본값으로 바뀝니다. 경영 관점은 은행별 순이자손익을 행으로 두고 분기를 열로 놓습니다. 어떤 관점이든 같은 큐브에서 나오는 값이라 관점을 바꿔도 합계는 변하지 않습니다.

수익·비용·순이자손익 계산 항목이 열에 함께 나와 어느 쪽이 손익을 움직였는지 바로 보입니다. 비용은 손익 영향 방향으로 마이너스 표시이며 계산 항목 이름에서 방향을 알 수 있습니다.

조달 금리(%)는 비용 이자를 비용 적수로 나눠 연 환산한 값입니다. 은행·금리 유형별로 같은 잔액이라도 금리가 다르면 비용이 달라지는 자리를 한눈에 봅니다. 금리 값은 샘플 데이터의 가정값입니다.

회계 담당자는 숫자가 몇 건의 원천 라인으로 이뤄졌는지가 먼저 궁금합니다. 라인 수와 수수료를 이자손익 옆에 놓아 칸을 눌러 원천 문서로 내려가기 전에 규모를 가늠하게 했습니다.
축 전환과 범위 — 끌어다 놓고 걸러내고 너비를 맞춘다
차원 칩을 끌어다 놓으면 표가 다시 짜이고, 이때는 서버를 부르지 않습니다.

열 축은 두 단계까지 쌓입니다. 분기 아래에 고정금리·변동금리가 나뉘어 어느 분기의 비용이 변동금리에서 나왔는지 읽습니다. 열 개수가 많아지면 표가 가로로 길어지므로 36열 상한이 걸려 있습니다.

값 필터 창에서 차원을 고르고 값을 다중 선택합니다. 걸러진 표의 합계는 같은 조건으로 따로 계산한 합계와 같은지 확인했고(-3,798,145,928원 일치), 이 값 필터는 서버를 부르지 않고 브라우저에서 다시 합산합니다.

필터를 걸면 행과 차트가 선택한 값만 남습니다. 합계 행도 선택한 값만 더한 값입니다. 필터를 풀면 같은 칸으로 되돌아오며, 걸러 둔 상태는 보기 저장에 함께 남깁니다.

표를 넓게 볼지 차트를 넓게 볼지는 보는 사람마다 다릅니다. 손잡이로 나눈 너비는 그 브라우저에 남아 다음에 열 때 같은 비율로 시작합니다.
칸에서 원천 문서까지
표의 숫자가 의심스러울 때 다른 화면을 열지 않고 그 칸에서 바로 원천 문서로 내려갑니다.

행의 경로와 열의 조합이 그대로 조회 조건이 되어 원천 문서 라인을 읽습니다. 맨 위에 칸 금액과 문서 합계가 함께 나오고 같으면 정상, 다르면 점검 필요로 표시합니다. 대표 9칸을 눌러 본 결과 9칸 모두 합계가 칸 금액과 같았습니다.

문서 번호·전기일·은행·상품·잔액·금리·일수·이자 금액이 한 줄에 놓입니다. 많은 건수는 쪽을 나눠 읽고 CSV 로 내려받을 수 있습니다. 계좌번호는 가운데를 가려 표시합니다.

별도 화면을 만들지 않고 회계기간 칩을 열 축에 놓는 것으로 월별 추이를 봅니다. 월별 일수가 다른 달의 이자는 일수가 반영된 값이라 월 간 비교는 평균 잔액과 금리를 함께 보는 편이 좋습니다.
계산 항목 — 수익·비용·순이자손익과 조달 금리
자주 쓰는 식은 계산 항목으로 정의해 서버와 화면이 같은 식을 씁니다.

계산 항목은 Interest[I]+Interest[E] 처럼 측정값 토큰으로 정의한 식입니다. 서버와 화면이 같은 식 파일을 읽어 두 곳의 값이 달라질 수 없습니다. 비율 항목은 합계 행에서 합계끼리 다시 나눠 계산하므로 행별 비율을 평균내지 않습니다.
기준 대비 차이 — 같은 표가 계획 대비 점검표가 된다
비교 기준을 계획으로 두면 같은 표에 차이와 차이율이 붙고, 차이는 요인으로 나뉩니다.

실적·계획·차이·차이율 네 열이 생깁니다. 금액 기준(기본 10백만원)과 비율 기준(기본 5퍼센트)을 둘 다 넘는 칸에만 색이 입혀지며 한쪽만 넘으면 칠하지 않습니다. 이 규칙으로 91칸에만 색이 들어가는 것을 확인했습니다. 이자 비용이 계획보다 커진 칸은 불리 색, 줄어든 칸은 유리 색입니다.

사유는 분류와 문장으로 남고 조회 범위와 행 경로를 키로 저장됩니다. 축 배치가 바뀌어도 같은 행이면 사유가 따라옵니다. 저장하면 행 이름 앞에 연필 표식이 나타납니다.

은행 하나를 골라 계획 이자손익에서 실적까지를 잔액·금리·기간·환율·계획 외·계획 미실현 요인으로 나눕니다. 이 화면의 한빛은행은 계획 -2,042.7에서 실적 -2,185.5(백만원)로 -142.7 벌어졌고 그 가운데 잔액 변동이 -149.2로 가장 컸습니다.

잔액 변동 -149.2, 금리 변동 +21.4, 기간 차이 0.0, 환율 변동 -14.9, 계획 외 0.0, 계획 미실현 0.0이고 합이 계획 대비 차이 -142.7입니다. 맨 아래 검산 줄이 계획 + 요인 합 − 실적이 0인지 매번 적습니다. 반올림으로 남는 잔차는 환율 요인에 넣어 합이 어긋나지 않게 합니다.
AI 분석과 보고서
숫자는 서비스가 계산하고 해설은 그 숫자만 인용합니다.

금액과 비율은 서비스가 큐브에서 계산해 근거 표로 함께 보여 주고, 해설 문장은 그 숫자만 인용합니다. 현재 구현은 규칙 기반 해설이며 모델 연동은 확인 필요입니다. 관점 버튼에 따라 강조하는 항목이 달라집니다.

브라우저 안에서 보고서 파일을 지어 내려받습니다. 표지·요약·표·차트·근거로 이뤄져 있으며 내려받은 파일은 슬라이드 4장으로 열리는 것을 확인했습니다. 차트는 SVG 를 그림으로 바꿔 넣습니다.
AI 에이전트 — 규칙에 걸린 항목을 대기함으로
사람이 화면을 열지 않아도 점검할 항목을 규칙으로 정해 두고, 하루 한 번 실행합니다.

규칙마다 지표·연산자·임계값·주기·받을 사람이 붙어 있습니다. 기본 규칙은 조달 금리 상한 초과, 환율 영향 임계, 순이자손익 계획 미달, 변동금리 비중 상한입니다. 임계값은 화면에서 고칩니다.

실행하면 규칙 4개 중 4건이 걸려 보고 4건이 대기함에 오르고 활동 기록에 실행 이력이 남습니다. 보고에는 받을 사람의 직함과 심각도, 근거 숫자가 들어 있습니다. 읽음 표시는 열어 본 보고에만 붙습니다.

하루 한 번 제한은 화면이 아니라 서비스가 실행 기록을 보고 판정합니다. 두 번째 호출에는 제한 상태가 돌아오고 활동 기록에는 시도가 남습니다. 화면을 새로 열어도 우회되지 않습니다.
레이아웃 저장과 복원
자주 쓰는 배치는 이름을 붙여 저장하고 필요하면 기본 배치로 돌아옵니다.

저장하는 설정은 행 축, 열 축, 측정값, 차이 모드, 필터, 금액 단위, 차이 기준, 표시 행 수와 접힘 상태입니다. 기본 보기와 자동 조회를 지정할 수 있습니다.

보기 관리 창에서 저장한 보기를 불러오고 이름을 바꾸고 지웁니다. 자동 조회로 지정한 보기는 화면을 열자마자 그 배치로 조회됩니다.

실험하다 길을 잃었을 때 기본 배치로 돌아가는 단추입니다. 저장한 보기는 지워지지 않고 그대로 남습니다.
좁은 화면과 한계
상한과 좁은 화면 배치를 화면으로 확인합니다.

열 개수는 열 축 단계의 값 수를 곱한 값입니다. 36개를 넘으면 칩 이동을 되돌리고 필터로 범위를 좁히거나 다른 차원을 쓰라고 안내합니다. 화면이 아무 말 없이 느려지는 일을 막는 상한입니다.

좁은 화면에서는 조건과 레이아웃 보드가 세로로 쌓이고 표는 가로로 스크롤됩니다. 차원 칩 끌어놓기는 그대로 동작합니다.

폭이 좁으면 차트 영역이 표 아래로 이동합니다. 휴대폰에서 보더라도 차트를 숨기지 않으므로 표와 차트를 같은 순서로 읽을 수 있습니다.
화면 뒤에서 일어나는 일
- 화면을 열면 차원·측정값·계산 항목 목록을 먼저 읽습니다. 조건이 없는 목록이라 조회 전에도 틀을 그릴 수 있습니다.
- 조회하면 큐브와 계획을 한 번 읽습니다(각각 최대 5,000행). 조회 조건은 필터로 서버에 보냅니다.
- 피벗 엔진이 행·열 축과 측정값에 따라 트리를 만들고 합계를 원 단위로 계산합니다.
- 축·관점·단위를 바꾸면 같은 큐브를 브라우저에서 다시 합산합니다. 서버 호출은 없습니다.
- 칸을 누르면 그 칸의 조건으로 원천 문서를 쪽을 나눠 읽고, 칸 금액과 합계를 비교합니다.
- 차이 모드의 요인분해·해설·에이전트 실행은 서비스 펑션을 호출하고, 변동 사유와 보기는 서비스에 저장합니다.
차이 판정과 표시 규칙
| 판정 조건 | 결과 상태 | 사용자 조치 |
|---|---|---|
| 실적−계획 차이가 금액 기준 이상이고 차이율도 비율 기준 이상 | 점검 필요(색 표시) | 변동 사유를 입력하고 요인분해로 원인 요인 확인 |
| 둘 중 하나만 기준을 넘음 | 표시 없음 | 필요하면 기준값 조정 |
| 요인 합과 총 차이의 검산 줄이 0 | 정상 | 없음 |
| 검산 줄이 0 이 아님 | 점검 필요 | 계획 버전과 조회 범위 확인 |
| 칸 금액과 원천 문서 합계가 다름 | 점검 필요 | 원천 문서 목록과 조회 범위 확인 |
| 열 조합이 36개 초과 | 이동 취소와 안내 | 필터로 범위 축소 또는 다른 차원 사용 |
| 감시 규칙 지표가 임계값 조건에 해당 | 대기함 등록(점검 필요) | 담당자가 내용을 읽고 판단 |
| 같은 날 에이전트 두 번째 실행 | 제한 안내 | 다음 날 다시 실행 |
조회조건
| 필드 | 필수 | 기본값 | 서버로 가는 조건 |
|---|---|---|---|
| 기간 시작·끝 | 선택 | 2026년 01월~09월 | Period ge · Period le 필터 |
| 회사·은행·상품·통화·금리 유형·만기 구간·자금 용도·손익 구분 | 선택 | 전체 | 차원별 eq 조건(다중 선택은 or) |
| 측정값 | 선택 | 이자손익 | 화면에서 사용(서버 조건 아님) |
| 금액 단위 | 선택 | 백만원 | 화면 표시용 |
| 차이 기준(금액·비율) | 선택 | 10백만원 · 5퍼센트 | 화면에서 색 판정 |
결과 컬럼
| 컬럼 | 의미 | 산출식 |
|---|---|---|
| 실적 | 선택한 측정값의 실적 | 큐브 합계(원 단위, 표시는 선택 단위) |
| 계획 | 같은 칸의 계획 | 계획 큐브 합계 |
| 차이 | 실적 − 계획 | 합계 행은 합계끼리 계산 |
| 차이율 | 차이 ÷ |계획| | 계획이 0이면 표시하지 않음 |
| 계산 항목 열 | 수익·비용·순이자손익·조달 금리 등 | 공용 계산식(토큰 식) |
좁은 화면에서 달라지는 것
폭이 좁으면 조건과 레이아웃 보드가 세로로 쌓이고 표는 가로로 스크롤됩니다. 차트는 숨기지 않고 표 아래로 내려옵니다. 끌어놓기는 그대로 쓸 수 있지만 터치 환경의 사용성은 확인 필요입니다.
파일 구성
| 자리 | 파일 |
|---|---|
| 진입 | index.html · Component.js · manifest.json |
| 컨트롤러·뷰 | controller/ · view/(원천 문서·변동 사유·보기 저장·보기 관리·AI 분석·에이전트 창) |
| 모델 | model/(피벗 엔진·차트·보기 설정·서식·오류 처리·보고서 생성) |
| 서비스 | odata/ 아래 서비스 로직·계산식·메타데이터·샘플 데이터 |
| 스타일·문구 | css/ · i18n/ |
| 설명서·영상 | readme.html · media/ |
SAP 표준 기능 확장 포인트
표준 실행은 SAP 표준 T-code 가 담당하고, 이 화면은 조회와 검증 관점을 더해 확장합니다. 표준 화면이 이미 잘하는 일은 그대로 두고, 여러 화면을 오가며 손으로 맞추던 부분만 이어 붙이는 쪽으로 만들었습니다.
표준으로 되는 것과 안 되는 것
| 하고 싶은 일 | 표준 화면 | 이 화면이 더하는 관점 |
|---|---|---|
| 은행별 현금 포지션 확인 | FF7A | 이자 손익을 은행·상품·금리 유형 축으로 함께 봄 |
| 유동성 예측과 계획 이자 대조 | FF7B | 계획 이자와 실적 이자를 같은 표에서 차이와 요인으로 비교 |
| 은행 계좌 명세 사후 처리 | FEBAN | 명세의 이자 입출금을 원천 문서 라인과 맞춰 봄 |
| 이자 계정 라인 아이템 조회 | FBL3N | 칸 금액을 이룬 라인을 같은 조건으로 열고 합계 대조 |
| 법정 보고·공시·세무 신고 | 표준 화면 | 이 화면은 점검 도구이며 대체하지 않음 |
T-code 별 연계 지점
| T-code | 이름 | 연계 |
|---|---|---|
| FF7A | 현금 포지션 | 이어받는 데이터: 은행 계좌별 잔액·기간. 대사 지점: 평균 잔액과 포지션 기간 잔액. 오가는 법: 이 화면의 은행 행에서 FF7A 로 해당 은행 포지션을 확인. 표준에 남길 일: 일일 자금 운용 판단. |
| FF7B | 유동성 예측 | 이어받는 데이터: 계획 잔액·금리 가정. 대사 지점: 계획 이자와 예측 항목. 오가는 법: 계획 대비 차이가 큰 행에서 FF7B 의 가정을 열어 확인. 표준에 남길 일: 유동성 계획 승인. |
| FEBAN | 은행 계좌 명세 사후 처리 | 이어받는 데이터: 명세 라인의 이자 입출금. 대사 지점: 이자 입금 라인과 원천 문서 이자 금액. 오가는 법: 원천 문서의 계좌 정보로 FEBAN 명세를 확인. 표준에 남길 일: 명세 전기와 사후 처리. |
| FBL3N | G/L 계정 라인 아이템 | 이어받는 데이터: 이자 수익·비용 계정 라인. 대사 지점: 칸 금액과 계정 라인 합계. 오가는 법: 칸의 원천 문서에서 같은 조건으로 FBL3N 조회. 표준에 남길 일: 결산·감사 대응. |
운영으로 옮길 때 기존 표준 리포트를 없앨 필요는 없습니다. 이 화면은 분석과 점검용이며 같은 숫자를 표준 화면과 맞춰 보는 절차를 운영 대사로 두는 것을 권합니다.
S/4HANA 분석 스택과의 자리
SAP S/4HANA 에는 표준 CDS 분석 쿼리와 Fiori 분석 앱, Analysis for Office 같은 분석 도구가 있습니다. 표준 분석 쿼리가 있는 지표는 그것을 먼저 쓰고, 이 화면은 이자 손익을 여러 축으로 끌어다 놓아 보고 계획과의 차이를 요인으로 나누는 자리에 둡니다. 구체적인 표준 앱 이름은 확인한 것만 쓰며 이 글에서는 확인 필요로 남겨 둡니다.
분석 지표 정의표
| 지표 | 산식·판정 기준 | 대응 기능 | 원천 데이터 | 비고 |
|---|---|---|---|---|
| 이자 수익 | 수익 라인의 이자손익 합 | 조회·계산 항목 | 이자 계산 라인의 원화 이자(수익) | - |
| 이자 비용 | 비용 라인의 이자손익 합에 −1 | 조회·계산 항목 | 이자 계산 라인의 원화 이자(비용) | 표시는 양수 |
| 순이자손익 | 수익 + 비용(비용은 −) | 피벗·차트 | 원화 이자 | - |
| 순금융손익 | 순이자손익 + 수수료 | 계산 항목 | 원화 이자·수수료 | 수수료는 비용 − |
| 평균 잔액 | 적수 합 ÷ 일수 합 | 계산 항목 | 적수·일수 | - |
| 조달 금리(%) | −비용 이자 × 36500 ÷ 비용 적수 | 계산 항목·에이전트 규칙 | 원화 이자·적수 | 일 단위 365일 환산 |
| 운용 금리(%) | 수익 이자 × 36500 ÷ 수익 적수 | 계산 항목 | 원화 이자·적수 | - |
| 예대 금리차(%p) | 운용 금리 − 조달 금리 | 계산 항목 | 위 두 값 | - |
| 계획 대비 차이 | 실적 − 계획, 차이율 = 차이 ÷ |계획| | 기준 대비 차이·워터폴 | 큐브·계획 큐브 | 금액·비율 기준 둘 다 넘을 때 색 표시 |
| 환율 영향 | 외화 라인 환율 요인의 합 | 요인분해·에이전트 규칙 | 외화 잔액·환율 | 환율은 가정값 |
확장 포인트 — 운영에서 실제로 손대는 자리
| 자리 | 손대는 일 | 정하지 않으면 |
|---|---|---|
| 원천 연결 | 샘플 이자 라인을 운영 전표·계약 자료에 연결(CDS 뷰 교체) | 화면은 열려도 숫자가 운영과 맞지 않음 |
| 차원 매핑 | 은행·상품·용도 코드를 회사 기준 코드로 매핑 | 리포트 숫자가 기존 보고서와 어긋남 |
| 환율 유형 | 환산 시점과 환율 유형 지정 | 외화 이자가 기준일마다 달라짐 |
| 계획 원천 | 계획 버전과 범주 선택 | "계획이 왜 이 숫자냐"가 반복됨 |
| 감시 규칙 | 지표·임계값·받을 사람 조정 | 알림이 너무 많거나 너무 적음 |
| 권한 | 회사코드·은행 단위 조회 권한(DCL) | 남의 회사 숫자가 보임 |
CDS 구성
운영 데이터로 가려면 샘플 데이터 서비스를 CDS 뷰로 바꿉니다. 아래 코드는 구조를 보이기 위한 스케치이며 원천 테이블 이름과 필드는 시스템마다 달라 확인 필요입니다. 객체 이름은 기능을 뜻하는 영문으로 지었습니다.
뷰 레이어 구성
| 레이어 | 뷰 | 하는 일 | 왜 나누나 |
|---|---|---|---|
| 기준 | 코드 매핑 테이블 | 원천 코드를 분석 코드로 옮김 | 매핑 변경이 한곳에서만 일어나게 |
| 기본 | ZI_IntCostLine | 이자 라인을 축·측정값으로 정리 | 환산 기준을 한 번만 정하려고 |
| 차원 | ZI_IntBankText | 이름·정렬 | 값 도움과 표시 이름 공유 |
| 큐브 | ZI_IntCostCube · ZI_IntCostPlan | 9개 차원 집계, 계획 큐브 | 실적과 계획이 같은 차원을 쓰게 |
| 쿼리 | ZC_IntCostQuery | 필수 필터·필터 가능 필드 | 대용량에서 기간을 강제 |
| 권한 | DCL | 회사코드 권한 적용 | 집계 단계에서 걸러내려고 |
| 서비스 | ZUI_IntCostAnalysis | 화면이 부르는 서비스 | 주소 교체만으로 전환 |
① 매핑 테이블 — 코드를 회사 기준으로 옮기는 자리
샘플의 은행·상품 코드를 운영 코드와 연결하는 가장 작은 객체입니다. 여기서 한 번 정한 매핑이 이후 모든 뷰의 기준이 되므로 변경 이력이 남도록 키를 두었습니다.
@EndUserText.label : '이자 분석 코드 매핑'
@AbapCatalog.enhancement.category : #NOT_EXTENSIBLE
@AbapCatalog.tableCategory : #TRANSPARENT
@AbapCatalog.deliveryClass : #C
@AbapCatalog.dataMaintenance : #ALLOWED
define table zint_codemap {
key client : abap.clnt not null;
key map_type : abap.char(4) not null; " BANK / PROD / PURP
key src_code : abap.char(10) not null; " 원천 코드
tgt_code : abap.char(10); " 분석용 코드
tgt_text : abap.char(40); " 표시 이름
valid_to : abap.dats;
}② 기본 라인 뷰 — 이자 계산 라인을 한 줄로
원천 이자 라인을 분석 축과 측정값만 남겨 읽는 기본 뷰입니다. 이자·적수·수수료를 원화 기준으로 맞추는 자리라 환산 기준을 여기서 정합니다. 원천 테이블 이름은 확인 필요입니다.
@AbapCatalog.viewEnhancementCategory: [#NONE]
@EndUserText.label: '이자 기본 라인'
define view entity ZI_IntCostLine
as select from zint_line as l
association [0..1] to zint_codemap as _bank
on _bank.map_type = 'BANK' and _bank.src_code = $projection.Bank
{
key l.gjahr as FiscalYear,
key l.docno as DocumentNo,
key l.itemno as ItemNo,
l.bukrs as CompanyCode,
l.bank as Bank,
l.prod as Product,
l.waers as Currency,
l.ratetype as RateType,
l.dir as Direction, // I 수익 · E 비용
@Semantics.amount.currencyCode: 'Currency'
l.int_fc as InterestFc,
l.days as Days,
_bank
}③ 차원 뷰 — 은행 이름과 정렬
은행 같은 차원은 코드만으로는 읽기 어려워 이름과 정렬 순서를 함께 둡니다. 값 도움과 표의 행 이름이 이 뷰에서 나옵니다.
@EndUserText.label: '이자 분석 은행 차원'
@ObjectModel.dataCategory: #TEXT
define view entity ZI_IntBankText
as select from zint_codemap
{
key src_code as Bank,
@Semantics.text: true
tgt_text as BankName
}
where map_type = 'BANK';④ 큐브 — 9개 차원으로 집계
화면이 한 번 읽는 큐브입니다. 기간·회사·은행·상품·통화·금리 유형·만기·용도·손익 구분 단위로 합산하고, 외화는 기준일 환율로 원화에 환산합니다. 환율 유형과 환산 시점이 여기서 정해집니다.
@Analytics.dataCategory: #CUBE
@EndUserText.label: '이자 손익 큐브'
define view entity ZI_IntCostCube
with parameters p_rate_date : abap.dats
as select from ZI_IntCostLine as L
{
key left(L.PostDate, 6) as Period,
key L.CompanyCode,
key L.Bank,
key L.Product,
key L.Currency,
key L.RateType,
key L.Direction,
@DefaultAggregation: #SUM
currency_conversion(
amount => L.InterestFc,
source_currency => L.Currency,
target_currency => cast('KRW' as abap.cuky),
exchange_rate_date => $parameters.p_rate_date,
exchange_rate_type => 'M',
error_handling => 'SET_TO_NULL') as InterestKrw,
@DefaultAggregation: #SUM
L.Days as Days
}⑤ 계획 큐브 — 같은 차원으로 계획을 얹는다
계획도 실적과 같은 차원으로 집계해야 칸마다 차이를 맞붙일 수 있습니다. 계획 버전을 키에 두어 버전을 바꿔 비교합니다. 계획 원천은 확인 필요입니다.
@Analytics.dataCategory: #CUBE
@EndUserText.label: '이자 계획 큐브'
define view entity ZI_IntCostPlan
as select from zint_plan
{
key version as PlanVersion,
key period as Period,
key bukrs as CompanyCode,
key bank as Bank,
key prod as Product,
key dir as Direction,
@DefaultAggregation: #SUM
int_krw as PlanInterestKrw,
@DefaultAggregation: #SUM
bal_day as PlanBalanceDays
}⑥ 소비 뷰 — 서비스로 노출하는 쿼리
소비 뷰는 화면이 실제로 읽는 이름과 필터 가능 필드를 정합니다. 큐브를 그대로 노출하면 필터를 강제할 수 없으므로 기간을 필수 필터로 둡니다.
@EndUserText.label: '이자 손익 쿼리'
@Metadata.allowExtensions: true
define view entity ZC_IntCostQuery
with parameters p_rate_date : abap.dats
as select from ZI_IntCostCube(p_rate_date: $parameters.p_rate_date)
{
@Consumption.filter: { selectionType: #INTERVAL, mandatory: true }
key Period,
@Consumption.filter.selectionType: #SINGLE
key CompanyCode,
key Bank,
key Product,
key Currency,
key RateType,
key Direction,
InterestKrw,
Days
}⑦ 권한 — 회사코드 단위로 걸러낸다
권한은 집계 단계에 걸어야 합니다. 드릴스루에만 걸면 합계에서 뺀 값으로 남의 숫자가 드러납니다. 회사코드를 기준으로 표준 권한 객체를 확인합니다.
@EndUserText.label: '이자 손익 쿼리 권한'
@MappingRole: true
define role ZC_IntCostQuery {
grant select on ZC_IntCostQuery
where ( CompanyCode ) = aspect pfcg_auth( F_BKPF_BUK, BUKRS, ACTVT = '03' );
}⑧ 서비스 정의 — 화면이 부르는 문
마지막으로 쿼리를 서비스로 노출합니다. 서비스 활성화 뒤에는 화면 설정의 서비스 주소만 바꾸면 됩니다.
@EndUserText.label: '이자 손익 분석 서비스'
define service ZUI_IntCostAnalysis {
expose ZC_IntCostQuery as IntCostQuery;
expose ZI_IntBankText as BankText;
}운영 시점에 해야 할 일
개발보다 정하는 일이 많습니다.
| 해야 할 일 | 무엇을 정하나 | 정하지 않으면 | 누가 |
|---|---|---|---|
| 원천 확정 | 이자 라인을 어느 전표·계약 자료에서 읽나 | 숫자가 표준 화면과 맞지 않음 | 회계팀·자금팀 |
| 환율 유형·환산 시점 | 어느 환율을 어느 날짜로 쓰나 | 외화 이자가 기준일마다 달라짐 | 자금팀 |
| 부호 규칙 | 수익·비용 부호와 표시 방향 | 손익 영향 방향이 화면마다 달라짐 | 회계팀 |
| 계획 원천·버전 | 어느 계획 버전과 범주를 비교하나 | 계획 대비 차이를 설명하지 못함 | 기획팀 |
| 차원 범위 | 어느 차원을 쓰나 | 나중에 늘리려면 뷰를 고쳐 다시 이송 | 현업·자금팀 |
| 권한 설계 | 회사코드·은행 단위 권한 | 남의 숫자가 합계로 드러남 | 보안·권한 담당 |
| 성능 기준 | 기간·건수 상한과 응답 시간 | 화면이 느려져도 원인을 못 찾음 | IT 부서 |
| 대사 체계 | 표준 T-code 와 맞출 항목과 주기 | 숫자 의심 때마다 수작업 | 회계팀 |
| 전송 순서 | 테이블·뷰·권한·서비스 이송 순서 | 권한 없이 서비스가 열림 | IT 부서 |
| 서비스 활성화 | 서비스 게시와 화면 설정의 서비스 주소 교체 | 화면이 샘플 서비스를 계속 읽음 | IT 부서 |
운영 데이터로 갈 때
이 화면은 큐브와 계획을 조회 때 한 번 읽어 브라우저에서 다시 합산하므로 한 번에 읽는 행이 5,000행을 넘지 않는 범위에 맞춰져 있습니다. 운영 데이터는 전표 라인이 수천만 건이 될 수 있어 집계는 반드시 서버(CDS 큐브)에서 하고, 기간을 필수 필터로 두며, 큐브의 차원 조합 수를 먼저 확인해야 합니다. 응답 시간 기준과 상한은 시스템 환경에 따라 정해야 하며 현재 샘플에서는 측정하지 않았습니다(확인 필요).
자주 묻는 질문
도입을 검토할 때 자주 나오는 질문을 숫자와 산식, 화면과 조작, 분석 기능, 도입과 운영으로 묶었습니다. 확인하지 못한 항목은 확인 필요로 적었습니다.
숫자와 산식
표시된 합계가 맞는지 어떻게 확인하나요
표 합계와 차트 합계는 같은 원 단위 큐브 합계에서 나옵니다. 칸을 누르면 원천 문서 합계가 칸 금액과 같은지 적고, 큐브와 원천 라인은 기간별·측정값별로 36건을 대사해 차이가 0이었습니다. 운영 데이터에서는 같은 대사를 다시 돌려야 합니다.
조달 금리는 어떻게 계산하나요
비용 이자에 36500을 곱해 비용 적수로 나눈 값입니다. 적수는 원화 환산 잔액에 경과 일수를 곱한 값이고, 합계 행에서는 행별 비율을 평균내지 않고 합계끼리 다시 나눕니다. 일 단위 365일 환산이라 실제 약정 방식과 다를 수 있어 운영 전에 확인이 필요합니다.
외화와 환율은 어떻게 처리하나요
외화 라인은 외화 잔액에 환율을 곱해 원화 이자로 바꿉니다. 이 글의 환율과 금리는 모두 샘플 데이터의 가정값입니다. 환율 유형과 환산 시점은 운영에서 정해야 하는 항목입니다.
차이는 어떤 요인으로 나뉘나요
잔액 변동, 금리 변동, 기간(일수) 차이, 환율 변동, 계획 외 발생, 계획 미실현으로 나눕니다. 요인 합이 총 차이와 같은지 검산 줄이 매번 적고, 반올림으로 남는 잔차는 환율 요인에 넣습니다.
수익과 비용의 부호는 어떻게 되나요
이자손익은 손익 영향 방향으로 수익은 플러스, 비용은 마이너스입니다. 이자 비용 계산 항목은 부호를 뒤집어 양수로 보여 줍니다. 부호 규칙은 운영에서 회계팀과 맞춰야 합니다.
월별 일수가 다르면 비교가 어렵지 않나요
이자는 일수가 반영된 값이라 28일인 달과 31일인 달을 그대로 비교하면 차이가 생깁니다. 월 간 비교는 평균 잔액과 조달 금리 같은 비율을 함께 보는 편이 좋습니다.
화면과 조작
축을 바꾸면 서버를 다시 부르나요
부르지 않습니다. 조회 때 큐브와 계획을 한 번 읽고 이후 축·관점·단위 변경은 브라우저에서 다시 합산하며, 축 이동과 관점 전환에서 서버 호출이 0건인 것을 확인했습니다.
열이 너무 많아지면 어떻게 되나요
열 조합이 36개를 넘으면 이동을 취소하고 안내를 보여 줍니다. 필터로 범위를 좁히거나 다른 차원을 쓰면 됩니다.
관점 버튼은 무엇을 바꾸나요
경영·재무·자금·회계 버튼은 보는 측정값과 행·열 배치의 기본값을 바꿉니다. 데이터가 바뀌지 않으므로 합계도 같습니다.
저장한 보기와 자동 조회는 무엇인가요
보기에는 축·측정값·필터·단위·차이 기준을 이름 붙여 저장합니다. 자동 조회로 지정한 보기는 화면을 열자마자 그 배치로 조회됩니다. 기본 보기는 하나만 둘 수 있습니다.
휴대폰에서도 쓸 수 있나요
폭이 좁으면 조건과 보드가 세로로 쌓이고 차트가 표 아래로 내려옵니다. 폭 390px 에서 같은 내용을 볼 수 있는 것을 확인했지만 터치 끌어놓기의 사용성은 확인 필요입니다.
내려받기는 무엇을 지원하나요
표는 CSV 로, 해설은 PowerPoint 보고서로 내려받습니다. 원천 문서 목록도 CSV 로 내려받을 수 있습니다.
분석 기능
AI 분석은 숫자를 모델이 만드나요
아닙니다. 금액과 비율은 서비스가 큐브에서 계산해 근거로 내고 해설은 그 숫자만 인용합니다. 현재 구현은 규칙 기반 해설이며 대규모 언어 모델 연동은 확인 필요입니다.
보고서는 어떻게 만들어지나요
브라우저 안에서 표·차트·근거를 담은 PowerPoint 파일을 지어 내려받습니다. 내려받은 파일이 슬라이드 4장으로 열리는 것을 확인했습니다.
에이전트는 언제 실행되나요
화면에서 직접 실행하며 하루 한 번만 가능합니다. 제한은 화면이 아니라 서비스가 실행 기록으로 판정합니다. 자동 예약 실행은 확인 필요입니다.
변동 사유는 어디에 저장되나요
조회 범위와 행 경로를 키로 서비스에 저장됩니다. 샘플 서버는 다시 시작하면 초기화되므로 운영에서는 영구 저장소 연결이 필요합니다.
도입과 운영
운영 원천은 어떻게 연결하나요
샘플 서비스를 CDS 뷰 기반 서비스로 바꾸고 화면 설정의 서비스 주소를 교체합니다. 원천 확정과 환율·부호 규칙 합의가 먼저이며 소요 기간은 환경에 따라 달라 확인 필요입니다.
권한과 보안은 어떻게 하나요
권한은 집계 단계에 걸어야 합니다. 회사코드 단위 권한을 CDS 권한으로 걸고, 드릴스루 목록에서는 계좌번호를 가려 표시합니다.
전표가 수천만 건이면 느려지지 않나요
큐브 집계를 서버에서 하고 기간을 필수 필터로 두어야 합니다. 현재 샘플은 5,000행 안에서 동작하도록 만들었고 대용량 응답 시간은 측정하지 않았습니다(확인 필요).
코드 체계가 바뀌면 어떻게 하나요
코드 매핑 테이블에서 원천 코드와 분석 코드를 다시 맞추면 됩니다. 뷰를 고칠 필요가 없도록 매핑을 분리했습니다.
기존 표준 리포트를 없애야 하나요
아닙니다. 표준 리포트는 그대로 두고 이 화면의 숫자를 표준 화면과 맞춰 보는 절차를 운영 대사로 두는 것을 권합니다.
이 화면의 결과를 결산이나 신고에 그대로 써도 되나요
이 화면은 점검 도구이며 최종 판단은 회사와 감사인이 합니다. 세무 신고는 회사와 세무 대리인·관세사가 판단합니다. 색 표시와 해설은 살펴볼 곳을 좁히는 용도입니다.
어떤 SAP 환경에서 쓸 수 있나요
S/4HANA 의 CDS 를 기준으로 설계했습니다. ECC 와 다른 버전 적용 여부는 확인 필요이며 현재는 샘플 데이터로만 동작을 확인했습니다.
샘플 데이터는 실제 거래인가요
아닙니다. 은행 이름·상품·금액은 모두 가상이며 실제 고객사나 은행과 관계가 없습니다.