SAP ROE 듀폰분석 점검 — 자기자본이익률이 좋아졌다면, 이익이 늘어난 걸까 빚이 늘어난 걸까
ROE를 순이익률·총자산회전율·자기자본배수 세 갈래로 나눠, 레버리지가 밀어올린 증가분과 수익성 개선이 밀어올린 증가분을 갈라 봅니다
자기자본이익률(ROE)이 지난 분기보다 좋아졌다는 숫자 하나만 보면 반가운 소식입니다. 그런데 그 증가가 영업을 더 잘해서 생긴 것인지, 아니면 빌린 돈을 늘려 자산을 키운 결과인지는 ROE 한 줄만으로는 구분되지 않습니다. 듀폰(DuPont) 분석은 ROE를 순이익률 × 총자산회전율 × 자기자본배수 세 요인의 곱으로 풀어 이 질문에 답하는 오래된, 그러나 여전히 유용한 틀입니다.
법인·기간별 재무 데이터를 그대로 이어받아 세 요인을 자동으로 산출하고 공시 ROE와 대사한 뒤, 전기 대비 ROE 증가분 가운데 자기자본배수(레버리지) 요인이 차지하는 비중을 로그가법분해로 계산해 OpenUI5 화면으로 확장했습니다. 레버리지가 증가를 주도한 구간을 먼저 걸러 보여주고, 실제 구동 화면 3종을 함께 공개합니다.
SAP 표준 기능을 그대로 이어받은 부분
- 재무제표 집계 — 재무제표버전 기준 재무상태표·손익계산서 조회 결과를 그대로 사용
- 계정 잔액 — 총계정원장 계정별 월별 잔액(
FAGLB03)을 그대로 사용 - 표준 화면 — 재무제표 조회(S_ALR_87012284) · 계정별 잔액(FS10N)
| 항목 | 내용 |
|---|---|
| 업무 영역 | 재무회계(FI) · 재무 분석 |
| 관련 기준서 | - |
| Namespace | zui5.dupont |
| 셸 구조 | 조회조건 영역(우측 조회) + 조회 결과·추이 탭 + 상세 Dialog |
| 화면 수 | 조회 화면 1개(탭 2종) + 상세 다이얼로그 |
| SAP 표준 T-code | S_ALR_87012284 · FS10N · FAGLB03 |
| 데이터 연동 방식 | OData V2 — 화면 블록마다 엔티티셋에 직접 바인딩 |
| 성격 | 조회·산출·대사·점검형 — 차입·자본 정책 판단은 화면 밖 프로세스 |
| UI 테마 | sap_horizon 단일 적용 |
실제 화면 3종 둘러보기
법인·연도·기간을 고르고 조회하면 법인별 ROE 3단분해 결과가 표로 뜹니다 → 추이(12개월) 탭에서 선택 법인의 월별 추이를 확인합니다 → 행을 클릭하면 원천 항목 상세가 열립니다.
아래는 실제로 앱을 실행해 기능을 눌러 가며 캡처한 화면입니다. 이미지를 클릭하면 원본 크기로 확대됩니다.
조작 방법
- 법인코드·회계연도·회계기간(월)·점검결과를 선택합니다. 기본값은 모두 "전체"입니다.
- 조회 버튼은 조회조건 입력 필드 줄의 가장 오른쪽에 있습니다. 입력 영역에서 Enter 키를 눌러도 같은 조회가 실행됩니다.
- 조회 결과 탭에서 법인·기간별 3단분해 결과를, 추이(12개월) 탭에서 월별 추이를 확인합니다.
- 결과 표의 행을 클릭하면 해당 법인·기간의 ROE 원천 항목 상세가 열립니다. CSV 다운로드로 내려받을 수 있습니다.
- 초기화 버튼을 누르면 기본 조회조건으로 되돌아갑니다.
레버리지 주도 증가를 가르는 판정 로직
ROE = 순이익률 × 총자산회전율 × 자기자본배수라는 승법 항등식을 로그로 풀면, 전기 대비 ROE 증감을 세 요인의 증감 기여로 나눌 수 있습니다. 레버리지 기여 비중이 높은 구간을 우선 점검 후보로 표시합니다.
| 판정 조건 | 결과 상태 | 사용자 조치 |
|---|---|---|
| 직전 기간 비교 대상 없음(계열 첫 기간) | - | 추이 탭에서 다음 기간부터 확인합니다. |
| ROE 증가 && 레버리지 로그기여비중 50% 이상 && 수익성·회전율 기여가 상대적으로 작음 | 점검 필요 | 차입 구조·자본배수 변동의 배경을 재무제표 주석과 함께 확인합니다. |
| 그 외(ROE 비증가 또는 수익성·회전율 개선이 기여의 중심) | 정상 | 별도 조치가 필요하지 않습니다. |
이 화면이 대신 정하지 않는 것
판정 결과는 확인이 필요한 구간을 알리는 표시이며, 차입 정책이 잘못됐다고 단정하지 않습니다. 차입 구조·자본 정책의 타당성에 대한 최종 판단은 회사와 감사인이 합니다.
ROE 3단분해 산출 절차
| 단계 | 내용 |
|---|---|
| 1단계 | 법인·연도·기간별 당기순이익·매출액·자산총계·자본총계를 집계한다 |
| 2단계 | 세 요인을 산출한다 — 순이익률 = 당기순이익 ÷ 매출액, 총자산회전율 = 매출액 ÷ 자산총계, 자기자본배수 = 자산총계 ÷ 자본총계 |
| 3단계 | 3단분해 ROE를 재산출하고 대사한다 — ROE(3단분해) = 순이익률 × 총자산회전율 × 자기자본배수, 공시 ROE(당기순이익 ÷ 자본총계)와 차이를 표시한다 |
| 4단계 | 직전 기간과 로그가법분해로 비교해 레버리지 기여비중을 산출하고 점검결과를 표시한다 |
조회조건
| 필드 | 필수 | 설명 |
|---|---|---|
| 법인코드 | 선택 | 전체 / 법인 단위 지정 |
| 회계연도 | 선택 | 전체 / 4자리 회계연도 지정 |
| 회계기간(월) | 선택 | 전체 / 01~12월 지정 |
| 점검결과 | 선택 | 전체 / 정상 / 점검 필요 |
결과 컬럼
| 영역 | 컬럼 · 표시 |
|---|---|
| 조회 결과 | 법인코드 · 법인명 · 연도.기간 · 순이익률 · 총자산회전율 · 자기자본배수 · ROE(공시) · ROE(3단분해) · 산출차이 · 레버리지 기여비중 · 점검결과 |
| 추이(12개월) | 연도.기간 · 순이익률 · 총자산회전율 · 자기자본배수 · ROE(공시) |
| 원천 항목 상세 | 항목(당기순이익·매출액·자산총계·자본총계) · 금액 · 원천테이블 · 원천필드/산식 |
SAP 표준 기능 매핑
표준 실행은 SAP 표준 T-code 가 담당하고, 이 화면은 그 데이터에 ROE 요인분해 조회·점검 관점을 더해 확장합니다.
| 표준 T-code | 표준 기능 | 이 화면이 더한 것 |
|---|---|---|
S_ALR_87012284 | 재무제표버전 기준 재무상태표·손익계산서 조회 | 동일 원천 수치를 ROE 3요인으로 자동 분해·대사합니다 |
FS10N / FAGLB03 | 계정별 월별 잔액 조회 | 자산·자본·손익 계정 잔액을 법인·기간 단위로 자동 집계합니다 |
분석 지표 정의표
| 지표 | 정의 | 대응 기능 | 원천 데이터 |
|---|---|---|---|
| ROE 3단분해 | 순이익률 × 총자산회전율 × 자기자본배수 | 조회 결과 산출·대사 | 총계정원장 손익·자산·자본 잔액 |
| 레버리지 기여비중 | 전기 대비 ROE 로그증감 중 자기자본배수 요인이 차지하는 비율 | 조회 결과 점검결과 컬럼 | 당기·전기 3단분해 결과 |
참고 CDS 뷰
| 원천 테이블 | 주요 필드 | 쓰임 |
|---|---|---|
ACDOCA | RBUKRS · GJAHR · POPER · RACCT · HSL | 손익·자산·자본 계정 잔액/발생액 집계 |
define view entity ZC_RoeDecomposition
as select from I_JournalEntryItem as j
{
key j.CompanyCode as CompCode,
key j.FiscalYear as FiscYear,
key j.FiscalPeriod as FiscPeriod,
sum(j.AmountInCompanyCodeCurrency) as AmountByAccountCategory
}
group by j.CompanyCode, j.FiscalYear, j.FiscalPeriod
표준 CDS 뷰 이름과 필드는 시스템 릴리스에 따라 다를 수 있으므로, 도입 시 실제 시스템에서 확인해 확정합니다.
OpenUI5 구성
| 기능 | 사용 컨트롤 · 구성 |
|---|---|
| 화면 골격 | sap.m.Page + 조회조건 패널 · IconTabBar(조회 결과/추이) · 명세 표 |
| 데이터 연동 | manifest.json 에 OData V2 서비스를 상대 경로로 선언 — 화면 블록마다 엔티티셋에 직접 바인딩합니다 |
| 조회조건 | sap.m.Select — 우측 끝에 조회·초기화 버튼, 조회조건 영역에서 Enter 키로 즉시 재조회, sap/ui/model/Filter로 조건을 조립합니다. "전체"를 고른 조건은 필터를 만들지 않습니다 |
| 정렬 · 총건수 | sap/ui/model/Sorter로 연도·기간·법인 정렬, 총건수는 모델의 inline count 기능으로 얻습니다 |
| 결과 표 | sap.ui.table.Table(11개 컬럼) — 행 클릭 시 상세 다이얼로그(rowBindingContext 로 컨텍스트 전달) |
| 상세 표 | sap.m.Table — CSV 다운로드 공통 컨트롤러(UTF-8 BOM) |
| 공통 처리 | 전역 오류 처리기 — 메타데이터 로드 실패·요청 실패를 구분해 안내 |
파일 구성
| 경로 | 역할 |
|---|---|
index.html | OpenUI5 부트스트랩 — sap_horizon, OData 서비스에 연결 |
Component.js | 화면 상태 모델 초기화, 전역 오류 처리기 연결 |
manifest.json | 앱 디스크립터 — zui5.dupont · ko 로케일, OData 서비스와 모델 선언 |
view/Main.view.xml | 조회조건 · 조회 결과/추이 탭 |
view/DetailDialog.fragment.xml | 원천 항목 상세 다이얼로그 |
controller/Main.controller.js | 조회조건 조립 · 바인딩 · 다이얼로그 · CSV 다운로드 |
controller/BaseController.js | CSV 다운로드 공통 처리 |
model/ErrorHandler.js | 전역 오류 처리 |
model/formatter.js | 금액 · 비율 · 상태 표시 서식 |
i18n/i18n_ko.properties | ko 로케일 리소스 |
운영 데이터는 OData 서비스가 제공하며, 검증용 샘플 데이터는 화면과 완전히 분리해 별도로 둡니다. 화면과 판정 로직은 그대로 씁니다.
검증 결과
화면 구성에 쓴 검증용 샘플 데이터는 5개 법인 × 24개월, 총 120건의 결과를 기준으로 세 요인의 곱이 공시 ROE와 맞물리도록 구성했습니다.
| 검증 항목 | 결과 |
|---|---|
| ROE(3단분해) = 순이익률 × 총자산회전율 × 자기자본배수 | 통과(허용 반올림오차 이내) |
| ROE(3단분해) ≈ 공시 ROE(당기순이익 ÷ 자본총계) | 통과(최대 차이 0.0002) |
| 레버리지 기여비중 산출(로그가법분해) | 통과 |
| 점검 필요 판정(레버리지 주도 증가) 검증용 배치 | 120건 중 10건 (의도적으로 구성한 케이스) |
| 조회 조건 전달 — 필터 · 정렬 · 총건수 확인 | 확인 |
| 표시 금지 검사 — 커스텀 프로그램ID·앱 식별자·출처 표현 검출 | 0건 |
| 화면 렌더링 — 실브라우저에서 조회 → 탭 전환 → 행 클릭 상세까지 실동작 후 캡처 | 3/3 |
조회 버튼 위치 · sap_horizon 테마 · Enter 키 조회 · 서비스 미연결 시 오류 안내 | 확인 |
모든 데이터는 검증용으로 구성한 가상 데이터입니다.
자주 묻는 질문
이 화면에서 "점검 필요"는 문제가 있다는 뜻인가요?
아닙니다. ROE 증가분 중 레버리지(자기자본배수) 요인이 차지하는 비중이 큰 구간을 먼저 확인하도록 표시하는 것으로, 문제를 단정하지 않습니다. 차입 구조나 자본 정책 변경 등 합리적 배경이 있을 수 있으며 최종 판단은 회사와 감사인이 합니다.
이 화면은 어떤 기간·법인을 대상으로 하나요?
회계연도와 회계기간(월) 단위로 조회하며, 법인코드를 지정하거나 전체로 조회할 수 있습니다. 그 밖의 적용 범위는 도입 시스템에서 확인이 필요합니다.
레버리지 기여비중은 어떻게 계산하나요?
ROE = 순이익률 × 총자산회전율 × 자기자본배수라는 승법 항등식을 로그로 풀어, 전기 대비 증감분을 세 요인의 로그 증감으로 나눈 뒤 자기자본배수 요인이 차지하는 비율로 산출합니다.
공시 ROE와 3단분해 ROE가 다르게 나오면 어떻게 하나요?
두 값은 산식상 같아야 하며, 화면은 허용 반올림오차를 넘는 차이가 있는지 항상 함께 표시합니다. 차이가 크면 원천 집계 구간이나 반올림 처리를 다시 확인합니다.